About this endpoint
What it does
Checks an EU VAT number in two steps. First it checks that the number has the right layout for its member state. Then, by default, it looks the number up live in VIES, the European Commission's VAT registration service, and returns whether it is registered for trade within the EU, with the registered company name and address where the member state provides them.
Send offlineOnly: true to skip the live lookup and only check the layout. The offline check is instant and does not confirm that the number is registered.
It covers the 27 EU member states and Northern Ireland (XI). Numbers from other countries, such as GB, US or CH, return formatValid: false.
Request Body
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
| vatNumber | String | Yes | The VAT number, 2 to 40 characters. Send it with its two-letter country prefix, for example DE115235681. Spaces, dots and dashes are ignored, letters are not case sensitive, and leading or trailing spaces are removed. |
| country | String | No | Two-letter country code, used when vatNumber has no prefix. Greece is EL. If you send country, send vatNumber without a prefix: the whole value is then treated as the number for that country. |
| offlineOnly | Boolean | No | true checks only the number layout and skips the live lookup. Default false. |
A prefix of GR is accepted for Greece and returned as EL.
Response
The endpoint returns a JSON object with the result under result.
| Field | Type | Description |
|---|---|---|
| vatNumber | String | The number in clean form, with the country prefix and no spaces or dots. |
| country | String | Two-letter country code. |
| countryName | String | Country name. |
| formatValid | Boolean | true when the number has a valid layout for its country. This checks the layout only, not the check digits. |
| valid | Boolean or null | true when VIES shows the number as registered for intra-EU trade on the request date. false when it does not. null when no live lookup was made, for example with offlineOnly: true. |
| checked | String | vies when the live lookup ran, format when only the layout was checked. |
| name | String | Registered name. Only returned by the live lookup, and only when the member state provides it. |
| address | String | Registered address. Same conditions as name. Lines are separated by \n. |
| requestDate | String | Date and time of the live lookup, in UTC. |
| reason | String | Optional. Extra detail when valid could not be confirmed. |
| note | String | Plain-language note about the result. |



