EU VAT Validation API
Validate any EU VAT number against VIES, the European Commission's official registry. Real-time confirmation plus the trader's registered name and address where the member state discloses them.
Don't have an API key?
Sign in to your account to create and manage your API keys.
Integration guide
Copy a snippet, replace your API key, run. Works in any HTTP client — examples below in cURL, JavaScript, and Python.
/api/validate-vathttps://www.apipick.comValidate an EU VAT number against the official VIES registry
vat_numberstringrequiredFull VAT number with its two-letter member-state prefix. Spaces, dots, and hyphens are stripped. IE6388047V
countrystringoptionalMember-state code, if the number is supplied without its prefix. Greece is EL, not GR. IE
curl -X GET "https://www.apipick.com/api/validate-vat" \
-H "x-api-key: YOUR_API_KEY"{
"vat_number": "IE6388047V",
"country_code": "IE",
"number": "6388047V",
"valid": true,
"name": "GOOGLE IRELAND LIMITED",
"address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
"name_disclosed": true,
"request_date": "2026-09-01T11:52:22.440Z",
"consultation_number": null,
"source": "European Commission VIES",
"credits_used": 3,
"remaining_credits": 97
}Built for Real-World Use Cases
Reverse-Charge Invoicing
Confirm a buyer's VAT registration before zero-rating a cross-border B2B invoice, and keep the check on record.
B2B Onboarding
Validate at signup and pre-fill the legal name and address from the registry instead of asking the customer to type them.
Fraud Prevention
Catch invented or expired VAT numbers before they reach your billing system or a tax filing.
Agent Workflows
Give a finance agent a one-parameter tool it can call while processing an invoice, with an unambiguous boolean answer.
Response Fields
| Field | Type | Description |
|---|---|---|
| valid | boolean | Whether the number is currently registered for cross-border trade |
| country_code | string | Member-state code as filed (EL for Greece, XI for Northern Ireland) |
| number | string | The VAT number without its country prefix |
| name | string | null | Registered trader name, where the member state discloses it |
| address | string | null | Registered address, where the member state discloses it |
| name_disclosed | boolean | False when the member state withholds identity fields by policy (DE, ES) |
| request_date | string | null | Timestamp VIES recorded for the check |
| consultation_number | string | null | VIES request identifier, usable as proof of verification |
| credits_used | integer | Credits deducted for this request |
| remaining_credits | integer | Credits remaining in your account |
Rate limits
Throttling is per API key, sliding 60-second window. Hit the limit and you get a clean 429 with a Retry-After header.
20req/min
Per API key, per endpoint. Sliding 60-second window.
3concurrent
Max simultaneous in-flight requests per API key.
X-RateLimit-LimitMaximum requests allowed per minuteX-RateLimit-RemainingRequests remaining in the current windowX-RateLimit-ResetSeconds until the current window resetsRetry-AfterSeconds to wait before retrying (only on 429)HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 12
{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded: 20 requests/minute per API key. Retry after 12s.",
"retry_after": 12
}Data Source & Licensing
Checks run against VIES, the European Commission's VAT Information Exchange System, which forwards each query to the member state's own tax database in real time. We hold no copy of the register — the answer is the tax authority's, delivered as clean JSON with the outage and disclosure cases made explicit.
Frequently Asked Questions
Q: Is this the official EU check?
A: Yes. The request goes to VIES, the European Commission's VAT Information Exchange System, which queries the member state's own tax database in real time. There is no intermediate database, so an answer here matches what you would get from the Commission's own web form.
Q: Why is the trader name empty for German numbers?
A: Germany and Spain do not disclose trader name and address through VIES as a matter of policy. The number is still confirmed as registered or not — only the identity fields are withheld. The response sets name_disclosed: false so you can distinguish policy redaction from a genuinely empty field.
Q: What happens when a member state's system is down?
A: VIES routes to each member state's own database, and those go offline for maintenance. When that happens you get HTTP 503 with a clear message, and no credits are charged. Retry after a few minutes — the outage is on the tax authority's side, not ours.
Q: Which country codes are supported?
A: All 27 member states plus XI for Northern Ireland under the Windsor Framework. Note that Greece files VAT as EL, not its ISO code GR. Great Britain (GB) left VIES after Brexit and is not covered.
Q: Can I get a consultation number for my audit trail?
A: The consultation_number field carries VIES's request identifier when one is issued. That identifier is what a tax authority accepts as proof that you verified a counterparty's VAT status on a given date, which matters for reverse-charge invoicing.