HMRC EORI Check API: Request, Response and Errors
HMRC's Check an EORI number API confirms whether a GB EORI number is valid and returns the trader's name and address when the holder consented. It is a POST with up to 10 numbers and needs no credentials. It refuses XI numbers, which go to the EU service. Avatcado checks GB, XI and EU numbers with one request.
HMRC's Check an EORI number API takes a POST with up to ten GB numbers and needs no credentials. This guide gives the request that works, the response fields, the four error messages a caller meets, and where XI numbers go. Each was measured against the live API on 13 November 2026.
Short answer: an open POST endpoint for GB numbers
Unlike HMRC's VAT check API, this one has no OAuth step and no application to register for a production call. A request without an Authorization header returned HTTP 200 with a result. It checks numbers that start with GB and nothing else.
| Endpoint | POST https://api.service.hmrc.gov.uk/customs/eori/lookup/check-multiple-eori |
|---|---|
| Headers | Accept: application/vnd.hmrc.1.0+json, Content-Type: application/json |
| Authentication | None |
| Body | {"eoris": ["GB123456789000"]}, 1 to 10 numbers |
| Version | 1.0, which HMRC labels beta |
Send a request
curl --max-time 15 \
"https://api.service.hmrc.gov.uk/customs/eori/lookup/check-multiple-eori" \
--header "Content-Type: application/json" \
--header "Accept: application/vnd.hmrc.1.0+json" \
--data '{"eoris": ["GB123456789000", "GB999999999999"]}'Each number must match ^(GB|XI)[0-9]{12,15}$: the prefix, then 12 to 15 digits, uppercase, no spaces. For a UK VAT-registered business the first 9 digits are its VAT number: HMRC's own example is GB123456789000. A business does not need a VAT registration to get an EORI number.
Read the response
The response below uses synthetic values in the shape the live API returns.
[
{
"eori": "GB999999999999",
"valid": false,
"processingDate": "2026-11-13T09:19:29+00:00"
},
{
"eori": "GB123456789000",
"valid": true,
"companyDetails": {
"traderName": "EXAMPLE TRADING LTD",
"address": {
"streetAndNumber": "1 HIGH STREET",
"cityName": "LONDON",
"postcode": "SW1A 1AA"
}
},
"processingDate": "2026-11-13T09:19:29+00:00"
}
]| Field | Always present | Meaning |
|---|---|---|
eori | Yes | The number this entry belongs to |
valid | Yes | Whether HMRC lists the number as valid |
processingDate | Yes | Timestamp of the check, with a UTC offset |
companyDetails.traderName | No | Present only when the holder consented to publication |
companyDetails.address | No | streetAndNumber, cityName, postcode |
Match entries on eori. A request for two numbers came back in reverse order. An unknown number is a normal entry with valid: false and HTTP 200, so there is no 404 to interpret.
Handle the four 400 messages
Every refusal is HTTP 400 with the code INVALID_REQUEST. Only the message tells them apart, and one bad number refuses the whole request.
| Cause | Message contains |
|---|---|
| A number outside the pattern (9 digits, a letter, lowercase) | ensure all of your EORI numbers match ^(GB|XI)[0-9]{12,15}$ |
| More than 10 numbers | you have exceeded the maximum of 10 EORI numbers |
An XI number | one or more EORI numbers begin with XI |
| An empty list | one or more EORI numbers are required in your body |
Validate the format before sending so that one typo in a batch does not cost the other nine results. Treat a 400, a 5xx or a timeout as a check that did not complete, never as an answer that the number is not valid.
Send XI numbers to the EU service
The pattern in HMRC's own error message allows an XI prefix, and the API still refuses one:
{
"code": "INVALID_REQUEST",
"message": "Invalid payload - one or more EORI numbers begin with XI. To check an EORI number that starts with XI, use the EORI checker service on the European Commission website"
}Northern Ireland numbers are checked with the European Commission's SOAP service, covered in the EU EORI validation guide. The reverse does not work either: the Commission's service answers Not valid for a GB number that HMRC lists as valid. A system that accepts both prefixes needs both integrations and a router in front of them.
Sandbox, rate limits and stability
- Sandbox.
https://test-api.service.hmrc.gov.ukserves mock answers chosen by the last digit of the number. HMRC's API page lists which digit gives which answer. - Rate limit. HMRC publishes no figure for this API. Its reference guide says requests are rate limited, so bound each request with a timeout and retry with a pause.
- Stability. The version is labelled beta. Pin the
Acceptheader to version 1.0 and run a scheduled check against a known number, so a change shows up in your monitoring before it shows up in an order. - No search by name. The API takes numbers only.
HMRC directly vs Avatcado
HMRC directly is the right choice when you only meet GB numbers. Avatcado is useful when the same form also takes EU and XI numbers, or when you already validate VAT numbers through it.
| Concern | HMRC directly | Avatcado |
|---|---|---|
| Coverage | GB | GB, XI and the 27 EU member states, routed by prefix |
| Input | Uppercase, no spaces, or the request is refused | Spaces, dots, dashes and casing are normalized: gb 123.456.789 000 works |
| Malformed number | 400 INVALID_REQUEST, told apart by message text | 422 invalid_eori_format naming the rule, not counted against the quota |
| Outage | Your own retry and storage | Up to three attempts, then the last stored answer flagged in the metadata, or a 503 that is not counted |
| Address | Three separate fields | One line, in the same shape as VAT validation results |
| Cost | Free | Free for 500 requests a month, shared with VAT validation |
# Set AVATCADO_API_KEY in this server environment first.
curl --max-time 30 \
"https://api.avatcado.com/v1/eori/validate?eori_number=GB123456789000" \
--header "Authorization: Bearer $AVATCADO_API_KEY"The response reports hmrc in meta.source for a GB number and ec_eos for EU and XI numbers, so your records show which register answered.
Frequently asked questions
Does HMRC's EORI check API need an API key or OAuth?
No. On 13 November 2026 a POST to the production endpoint without an Authorization header returned HTTP 200 with a result. That differs from HMRC's Check a UK VAT Number API, which needs an application and an OAuth token.
How many GB EORI numbers can I check in one request?
Ten. A request with 11 numbers returns HTTP 400 with a message saying you have exceeded the maximum of 10 EORI numbers. One malformed number also refuses the whole request, so check the format before sending a batch.
Can I check an XI EORI number with HMRC?
No. HMRC's API answers an XI number with HTTP 400 and tells you to use the European Commission's EORI checker. XI numbers for Northern Ireland are held in the EU register and are checked with the Commission's SOAP service.
What is the format of a GB EORI number?
GB followed by 12 digits, for example GB123456789000. For a business that is VAT registered in the UK, the first 9 digits are its VAT number. HMRC's API accepts 12 to 15 digits after the prefix and refuses anything else as malformed, which includes a 9-digit VAT number.
Sources
- Check an EORI number API 1.0 HMRC Developer Hub, accessed November 13, 2026
- Check an EORI number (online service) GOV.UK, accessed November 13, 2026
- Finding and checking an EORI GOV.UK, accessed November 13, 2026
- Economic Operators Registration and Identification (EORI): introduction GOV.UK, accessed November 13, 2026
- HMRC API reference guide HMRC Developer Hub, accessed November 13, 2026
Related guides
EU EORI Validation API: SOAP Request and Response
Validate EORI numbers with the European Commission's SOAP service: the working request, response fields, both error shapes and the 10-number limit.
EORI Number vs VAT Number: What Each One Proves
An EORI number is a customs registration and a VAT number is a tax registration. See how they differ, why one does not prove the other, and where to check each.
HMRC VAT Check API: OAuth, Examples & Error Handling
Integrate HMRC's Check a UK VAT Number API with OAuth client credentials, Node.js examples, verified lookups, and structured error handling.
VIES API Guide: REST Endpoint, SOAP & Integration
Use the official VIES REST API from Node.js, handle HTTP 200 faults, preserve consultation evidence, compare SOAP, and plan for member-state downtime.