EORI validation API
EORI Validation API
Check EORI numbers from your own software. One GET request checks the format and asks the register for the number's prefix: HMRC's public Check an EORI number API for GB numbers, the European Commission's EORI validation service for EU and Northern Ireland (XI) numbers. You get the registration status as JSON, with name and address when the trader agreed to publish them.
Example request and response
The example from the /v2/eori documentation. Spaces, dots, dashes and lower case in eori_number are accepted. A number without its country prefix needs country_code, e.g. -d country_code=DE.
curl -G "https://api.vatcheckapi.com/v2/eori" \
-d eori_number=DE4204891 \
-H "apikey: YOUR-API-KEY"
{
"country_code": "DE",
"eori_number": "DE4204891",
"format_valid": true,
"registration_info": {
"is_registered": true,
"name": "Friedrich-Alexander-Universität Erlangen-Nürnberg",
"address": "Freyeslebenstr. 1\n91058 Erlangen\nGermany",
"address_parts": {
"street": "Freyeslebenstr. 1",
"postcode": "91058",
"city": "Erlangen",
"country": "Germany"
},
"checked_at": "2026-10-04T19:04:07Z"
},
"source": "eu_eos"
}
Response fields
- country_code
- The country prefix of the number: one of the 27 EU member states (
GRfor Greece),XIfor Northern Ireland orGB. - eori_number
- The number as it was checked: normalised, upper case, with its country prefix.
- format_valid
- Whether the number has a valid EORI format. If
false, no register was asked. - registration_info.is_registered
- Whether the register lists the number as a valid EORI number.
- registration_info.name, registration_info.address
- The trader's name and address, one line each for street, postcode and city, and country.
nullwhen the register published none. - registration_info.address_parts
street,postcode,cityandcountryas the register publishes them, ornull. HMRC sends no country, socountryisnullfor GB numbers.- registration_info.checked_at
- When the register was asked (UTC).
nullwhen the format is invalid. - source
- The register that answered:
hmrcfor GB numbers,eu_eos(European Commission) for EU and XI numbers.nullwhen the format is invalid.
Use cases
Customs and forwarding software
Check the EORI number of the importer or exporter before a declaration is filed, and show the registered name where it is published.
Customer and supplier onboarding
Validate the EORI number when a trading partner signs up, next to their VAT number, with the same API key.
Stored numbers
Re-check the EORI numbers in your ERP or customs system before large shipments. Registrations can end.
Registers
| Prefix | Register | source |
|---|---|---|
GB | HMRC’s public Check an EORI number API | hmrc |
EU member states and XI | The European Commission’s EORI validation service | eu_eos |
The European Commission updates its register from the national databases once a day, so an EU number issued very recently may not be listed yet.
Status codes and billing
| Status | When | Counted |
|---|---|---|
200 with format_valid: false | The number does not match the EORI format of its country. No register is asked. | Yes |
422 | eori_number is missing or longer than 64 characters, or the number does not start with a supported country code: it starts with another country’s code (such as EL or US), or it has none and country_code names no supported one. | No |
503 | The register did not answer in time, or the GB rate limit is used up for the moment (then with Retry-After: 1). | No |
The checks do not prove who you are dealing with: they show what the register returned at the time of the check.
Start on the free plan
The free plan includes 150 requests a month. Each EORI check counts as one request, including numbers with an invalid format. Validation errors (422) and checks the register could not answer (503) are not counted.
Frequently asked questions
Which EORI numbers can I check?
Where are GB and XI numbers checked?
Is there a rate limit for GB numbers?
Retry-After: 1 and are not counted. Check GB lists one number after the other. Cached GB numbers and EU or XI numbers are not paced this way.Are answers cached?
checked_at of the original lookup. Every answer, cached or not, counts as one request.Why are name and address sometimes null?
is_registered: true and no name or address.Can I test without using my quota?
Can AI agents check EORI numbers?
checkEori tool that calls the same endpoint.