EORI Validation
GET /v1/eori/validate checks an EORI number against the register that issued it and returns whether it is valid, plus the trader’s name and address when the trader published them. It covers the 27 EU member states, Northern Ireland (XI) and Great Britain (GB).
An EORI number is the customs identifier a business needs to import, export or move goods in transit. It is a separate registration from a VAT number: a company can hold one without the other, so a valid VAT number says nothing about the EORI number. Use GET /v1/validate for VAT numbers.
Check a number
The
@avatcado/node and avatcado (Python) SDKs do not cover this endpoint yet. Call it over HTTP as shown above; the response uses the same { data, meta } and { error, meta } envelopes as every other endpoint.Query parameters
Response fields
Which register answers
XI numbers go to the European Commission service because HMRC refuses them and points there. GB numbers go to HMRC because the European Commission service answers “not valid” for a GB number that HMRC lists as valid. Both facts were verified against the live registers on 13 November 2026.
Greek EORI numbers start with GR, while Greek VAT numbers start with EL. The register answers “not valid” for the EL spelling of a number it lists as valid under GR, so a number sent with EL is rewritten to GR before the check. The response shows the rewritten number in data.eori_number.
Company details are often null
Both registers publish a trader’s name and address only when the trader agreed to publication. A response withvalid: true and company: null is a complete answer: the number is registered, and the register holds no public details for it. Do not treat a null company as a failed check.
Format rules
A number that neither register would accept is rejected withinvalid_eori_format before any register is called. That request does not count against your quota.
Caching and register outages
Answers are stored and served from the cache for 25 days, the same window as VAT validations. A cached answer hasmeta.source_status: "cached".
No country has a second EORI register, so an outage is covered by stored answers only:
- A stored answer exists: it is served with
meta.source_status: "unavailable"andmeta.stale: true. Checkmeta.cached_atto see how old it is. - No stored answer exists: the request ends in a
upstream_unavailable503 with aRetry-Afterheader. cache=false: the request answers with a fresh check or a 503. A stored answer is never served.
Quota
The endpoint is available on every plan, Free included. Burst limits apply as on the VAT endpoints.
Test mode
With anavat_test_ key the endpoint answers from fixed numbers. No register is called, nothing is stored and no quota is used.
Any other well-formed number returns
valid: true with a generic “Test Company”. Format rules still apply in test mode.
Errors
Errors echo the normalized
eori_number you submitted, so your logs record which number an attempt was for:
Limits of this endpoint
- One number per request. There is no batch or async variant for EORI numbers.
- Neither register supports a search by company name. A check needs the number.
- Webhooks do not report changes to an EORI number’s status.