EU VAT number validation API (VIES)
Short answer: To validate an EU VAT number programmatically, call GET https://api.wsystem.dev/verify?vat=IE6388047V. It queries the European Commission's VIES service and returns status (valid, invalid, invalid_format, member_state_unavailable or error), the registered name and address where the member state discloses them, and a VIES consultation number as audit proof. No signup or API key is needed for 20 calls per day per IP.
Key facts
- Covers all 27 EU member states plus Northern Ireland (XI). Greece uses the prefix EL, not GR.
- Source: VIES, run by the European Commission. W System is an independent wrapper and is not affiliated with the Commission.
- Input is normalised: spaces, dots and dashes are removed, so
DE 811 193 231works. - Batch:
POST /verify/batchtakes up to 100 numbers per request. - When a national database is offline, the API retries with backoff, then falls back to an official national source (PL, CZ, FI, FR) or the last successful VIES result, flagged
fallback: truewithsourceandlegal_statusand no consultation number. Otherwise it returnsmember_state_unavailablewithvalid: null, never a falseinvalid. Details: VIES down fallback. - UK: GB numbers are accepted and check-digit validated; live validation through the HMRC Check a UK VAT number API v2 is built but needs HMRC Developer Hub OAuth credentials, which are not configured yet, so GB results currently return
status: not_configured. Northern Ireland (XI) numbers are checked in VIES. - Free tools: bulk VAT checker for CSV files and live VIES status.
- Consultation number: pass your own EU VAT number as
requester(default is ours) to get a dated VIES reference you can keep for audits. - Germany and Spain usually do not disclose name/address through VIES; validity is still returned.
Examples
Validate one VAT number
curl "https://api.wsystem.dev/verify?vat=IE6388047V"Real response (live data, 2026-10-17):
{
"input": "IE6388047V",
"vat": "IE6388047V",
"country_code": "IE",
"vat_number": "6388047V",
"status": "valid",
"valid": true,
"name": "GOOGLE IRELAND LIMITED",
"address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
"request_date": "2026-10-17T06:07:32.092Z",
"consultation_number": "WAPIAAAAaFIeQCDg",
"requester": "HU33119856",
"source": "VIES (European Commission)",
"cached": true
}German number (no name/address disclosed by DE)
curl "https://api.wsystem.dev/verify?vat=DE811193231"Real response (live data, 2026-10-17):
{
"input": "DE 811 193 231",
"vat": "DE811193231",
"country_code": "DE",
"vat_number": "811193231",
"status": "valid",
"valid": true,
"name": null,
"address": null,
"request_date": "2026-10-17T06:07:30.845Z",
"consultation_number": "WAPIAAAAaFIePvTH",
"requester": "HU33119856",
"source": "VIES (European Commission)",
"cached": true
}Batch of up to 100
curl -X POST https://api.wsystem.dev/verify/batch -H 'Content-Type: application/json' \
-d '{"vats":["IE6388047V","FR40303265045"],"requester":"YOUR_EU_VAT"}'Pricing
| Channel | Price |
|---|---|
| Website checker, REST and MCP free tier | Free, 20 calls/day per IP, no key |
| x402 REST: GET /verify | $0.01 USDC per call |
| x402 REST: POST /verify/batch (up to 100) | $0.10 USDC per request |
| Apify Actor wsystem/eu-vat-checker | $0.005 per VAT checked + $0.005 per run |
Comparison with alternatives
| W System API | VIES REST/SOAP (EC, direct) | vatlayer (apilayer) | |
|---|---|---|---|
| Free usage | 20 calls/day per IP, no key | Free, no key | 100 requests/month, non-commercial, signup + key |
| Paid entry price | $0.01 per call (x402), no subscription | n/a (free) | $9.99/month for 1,000 requests |
| Batch endpoint | Yes, 100 per request | No (one number per call) | Not listed on pricing page |
| MCP server for AI agents | Yes, remote, 7 tools | No | Not listed |
| Pay per call without account (x402) | Yes, USDC on Base | No | No (card subscription) |
| Consultation number (audit proof) | Yes, with requester VAT | Yes, with requester VAT | Not listed |
| EORI, registry, sanctions in same API | Yes | No | VAT rates and price calculation instead |
Based on each provider's public pages on 2026-10-17. Corrections welcome via GitHub issues.
Questions and answers
Is there a free EU VAT validation API without an API key?
Yes. The VIES REST API itself is free, and W System's api.wsystem.dev gives 20 free calls per day per IP with no key and no signup, adding batch, retries, caching and an MCP endpoint.
How do I check a VAT number for reverse charge?
Validate the customer's VAT number with GET /verify on the invoice date and keep the consultation_number from the response as evidence. A valid VIES result is one of the conditions for zero-rating intra-EU B2B supplies; it is not tax advice.
What does member_state_unavailable mean?
The member state's national database behind VIES did not answer (MS_UNAVAILABLE). The number is not invalid. Retry later; the API already retries with backoff before returning this.
Why is name and address empty for a German VAT number?
Germany (and often Spain) do not publish name/address through VIES. The validity result is still official.
Can I validate UK VAT numbers?
GB numbers are not in VIES since Brexit. The API accepts GB numbers and checks the HMRC check digits, and has HMRC Check a UK VAT number API v2 support built in, but that needs OAuth app credentials from the HMRC Developer Hub which are not configured yet; until then GB results say not_configured. XI (Northern Ireland) numbers are fully checked in VIES.
Can AI agents use it?
Yes. Connect any MCP client to https://api.wsystem.dev/mcp/ and use the verify_vat or verify_batch tools.
Related
- VIES is down: how to handle MS_UNAVAILABLE and timeouts
- Free bulk VAT checker (CSV)
- VIES status: live availability per member state
- EU VAT validation guide
- EORI number check API (EU, official EOS)
- One-call KYB check for EU companies
- API reference (OpenAPI)
Facts and competitor details checked 2026-10-17. W System Hungary Kft. is the maker of this product. Not affiliated with the European Commission. Not legal or tax advice.