GET /vat/{number}

VAT validation API

Checksum a VAT number.

Try it

Example response/vat/DE136695976
{
  "vat": "DE136695976",
  "valid": true,
  "country": "DE",
  example
}

1M requests · $20/mo. Get started

What comes back.

vat

Normalized number with country prefix, or null if invalid

valid

Format and checksum match the country

country

ISO 3166-1 alpha-2. GR not EL. XI numbers ship GB

deep.registered

On the live national registry. Null when the registry did not complete

deep.name

Registered legal name, or null

deep.address

street, city, postal, country. null when the registry sent none

deep.consultation

Audit identifier when ?from= is a valid VAT, else null

deep.consulted_at

Registry-provided check time, or null when unavailable

1

Pass a number

Spaces, dots, missing prefix with country. Junk is valid false, never a 404.

2

Deep asks the registry

Registered, legal name, address. One unit from the monthly allowance.

3

Pass your own VAT

from= puts the consultation number on your audit file, not ours.

Make your first request.

One key works across the APIs. Copy a request in your language and get JSON back.

curl "https://api.parseapi.com/vat/DE136695976" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Parse-Version: 2.0.0"
// Example response · 200
{
  "vat": "DE136695976",
  "valid": true,
  "country": "DE"
}

API referenceSDKsKeys and authentication

Every response field

Response fields

vatstring or null
Normalized number with country prefix, or null if invalid
validboolean
Format and checksum match the country
countrystring or null
ISO 3166-1 alpha-2. GR not EL. XI numbers ship GB
fromstring
Your requester VAT when ?from= parsed, else omitted

Deep fields

deep.registeredboolean or null
On the live national registry. Null when the registry did not complete
deep.namestring or null
Registered legal name, or null
deep.addressobject or null
street, city, postal, country. null when the registry sent none
deep.consultationstring or null
Audit identifier when ?from= is a valid VAT, else null
deep.consulted_atstring or null
Registry-provided check time, or null when unavailable

QUESTIONS

What is included in a normal request?
Format and checksum. Spaces, dots, and a missing prefix with country are fine. That rides the normal request pool.
What if it is not a VAT number?
valid: false as a 200. vat is null. Same as a typo in a form field.
What does deep check?
Whether the number is on the live national registry, plus legal name and address when the registry sent them. One unit from the monthly VAT allowance. Free includes 100 a month. See Plans for additional lookup rates.
Where do I find VAT rates?
GET /country/DE?deep=true returns the standard national reference rate in deep.tax and deep.tax_rate on paid plans. The Tax page explains the geographic scopes. A number check does not determine what tax an order owes.
What is from?
Your own VAT number. Pass it and the response includes a consultation identifier for your audit file. Missing or junk from still returns registered, name, and address. consultation is null.
What if the registry is down?
HTTP 200 with registered null. The unit is not billed. registered false means the registry answered not listed.
Northern Ireland or UK?
Registry verification covers EU VAT numbers and Northern Ireland XI numbers. XI keeps its prefix and ships country GB. UK GB numbers support format and checksum validation. GB deep returns registered null and uses no verification unit.
Greece EL or GR?
The public country is GR. The live registry still uses EL on the wire. You can pass either prefix.

Find location reference rates on Tax. VAT number validation is a separate lookup.