Skip to main content

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 with valid: 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 with invalid_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 has meta.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" and meta.stale: true. Check meta.cached_at to see how old it is.
  • No stored answer exists: the request ends in a upstream_unavailable 503 with a Retry-After header.
  • cache=false: the request answers with a fresh check or a 503. A stored answer is never served.
Before giving up, the API tries the register up to three times.

Quota

The endpoint is available on every plan, Free included. Burst limits apply as on the VAT endpoints.

Test mode

With an avat_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.