HMRC EORI Check API: Request, Response and Errors

By Remco from Avatcado

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.

EndpointPOST https://api.service.hmrc.gov.uk/customs/eori/lookup/check-multiple-eori
HeadersAccept: application/vnd.hmrc.1.0+json, Content-Type: application/json
AuthenticationNone
Body{"eoris": ["GB123456789000"]}, 1 to 10 numbers
Version1.0, which HMRC labels beta

Send a request

HMRC · cURL
Ready to copy
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.

HMRC · JSON
Ready to copy
[
  {
    "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"
  }
]
FieldAlways presentMeaning
eoriYesThe number this entry belongs to
validYesWhether HMRC lists the number as valid
processingDateYesTimestamp of the check, with a UTC offset
companyDetails.traderNameNoPresent only when the holder consented to publication
companyDetails.addressNostreetAndNumber, 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.

CauseMessage 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 numbersyou have exceeded the maximum of 10 EORI numbers
An XI numberone or more EORI numbers begin with XI
An empty listone 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:

HMRC · JSON
Ready to copy
{
  "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.uk serves 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 Accept header 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.

ConcernHMRC directlyAvatcado
CoverageGBGB, XI and the 27 EU member states, routed by prefix
InputUppercase, no spaces, or the request is refusedSpaces, dots, dashes and casing are normalized: gb 123.456.789 000 works
Malformed number400 INVALID_REQUEST, told apart by message text422 invalid_eori_format naming the rule, not counted against the quota
OutageYour own retry and storageUp to three attempts, then the last stored answer flagged in the metadata, or a 503 that is not counted
AddressThree separate fieldsOne line, in the same shape as VAT validation results
CostFreeFree for 500 requests a month, shared with VAT validation
Avatcado · cURL
Ready to copy
# 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

Related guides