[ validation · tax ]● 3 cr · 20 req/min

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.

Official VIES source27 states + XIReal-time check
auth · x-api-key

Don't have an API key?

Sign in to your account to create and manage your API keys.

[ 02 · integrate ]

Integration guide

Copy a snippet, replace your API key, run. Works in any HTTP client — examples below in cURL, JavaScript, and Python.

spec
GET/api/validate-vat
base
https://www.apipick.com

Validate an EU VAT number against the official VIES registry

parameters
vat_numberstringrequired

Full VAT number with its two-letter member-state prefix. Spaces, dots, and hyphens are stripped. IE6388047V

countrystringoptional

Member-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"
● 200 · response
{
  "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

FieldTypeDescription
validbooleanWhether the number is currently registered for cross-border trade
country_codestringMember-state code as filed (EL for Greece, XI for Northern Ireland)
numberstringThe VAT number without its country prefix
namestring | nullRegistered trader name, where the member state discloses it
addressstring | nullRegistered address, where the member state discloses it
name_disclosedbooleanFalse when the member state withholds identity fields by policy (DE, ES)
request_datestring | nullTimestamp VIES recorded for the check
consultation_numberstring | nullVIES request identifier, usable as proof of verification
credits_usedintegerCredits deducted for this request
remaining_creditsintegerCredits remaining in your account
[ 03 · limits ]

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.

request rate

20req/min

Per API key, per endpoint. Sliding 60-second window.

concurrency

3concurrent

Max simultaneous in-flight requests per API key.

response headers
X-RateLimit-LimitMaximum requests allowed per minute
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetSeconds until the current window resets
Retry-AfterSeconds to wait before retrying (only on 429)
● 429 · too many requests
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.