# Check EORI Number

Checks an EORI (Economic Operators Registration and Identification) number: its format first, then its registration in the official register. Name and address are returned when the trader agreed to publish them.

Request Method: GET
Request URL: https://api.vatcheckapi.com/v2/eori?eori_number=[[ eori_number ]]

# Request Parameters

Parameter Type Mandatory Description
apikey string Your API Key
eori_number string The EORI number to check, including its two-letter country prefix (e.g. DE4204891), or without any country code if you pass country_code. Spaces, invisible characters (such as zero-width spaces), dots, dashes and slashes are ignored, and lower case is accepted. At most 64 characters
country_code string One of the supported country codes (e.g. DE), put in front of an eori_number given without any country code. Ignored when the number starts with a supported code. A number that starts with another country's code (such as EL or US) is not completed and fails with a 422

# Sample Request

curl -G https://api.vatcheckapi.com/v2/eori \
    -d eori_number=DE4204891 \
    -H "apikey: YOUR-APIKEY"

# Sample Response

{
    "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

Field Description
country_code The country prefix of the number (GR for Greece, XI for Northern Ireland)
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 knows the number as a valid EORI number
registration_info.name The trader's name, or null when the register published none
registration_info.address The address, one line each for the street, the postcode and city, and the country; null when the register published none
registration_info.address_parts The address as the register publishes it (street, postcode, city, country), or null. The European Commission writes the country name in English; HMRC sends no country, so country is null for GB numbers
registration_info.checked_at When the register was asked (UTC). null when the format is invalid
source The register that answered: hmrc or eu_eos. null when the format is invalid

# Registers

Each number is checked in the register for its prefix:

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

Northern Ireland (XI) numbers are checked with the European Commission, not with HMRC.

# Name and address

The registers only publish a trader's name and address when the trader agreed to it. A registered number can therefore come back with is_registered: true and name, address and address_parts all null:

{
    "country_code": "GB",
    "eori_number": "GB220430231000",
    "format_valid": true,
    "registration_info": {
        "is_registered": true,
        "name": null,
        "address": null,
        "address_parts": null,
        "checked_at": "2026-10-04T19:04:25Z"
    },
    "source": "hmrc"
}

# Format Check

The format is checked before any register is asked:

  • GB and XI numbers: the prefix followed by 12 or 15 digits.
  • EU numbers: the country prefix followed by 1 to 15 letters or digits.

A number with an invalid format comes back with format_valid: false, checked_at: null and source: null. It counts against your quota like any other check.

{
    "country_code": "GB",
    "eori_number": "GB1234567890001",
    "format_valid": false,
    "registration_info": {
        "is_registered": false,
        "name": null,
        "address": null,
        "address_parts": null,
        "checked_at": null
    },
    "source": null
}

# Caching

Answers are cached: a registered number for up to 1 hour, a number that is not registered for up to 10 minutes. Within that time the same number gets the same answer, with the checked_at of the original lookup. Every answer, cached or not, counts as one request.

# Rate Limit for GB Numbers

HMRC allows only a few requests per second for all our customers together. Uncached lookups of GB numbers are therefore paced: each account gets about one per second.

  • When your next turn is less than about a second away, the request waits for it.
  • Further requests in the same burst are answered at once with a 503 and the header Retry-After: 1. They are not counted against your quota.
  • If you check a list of GB numbers, check them one after the other, or retry after the Retry-After delay.

Cached GB numbers, and numbers of the EU member states and XI, are not paced this way.

# Errors

Status When Counted
422 eori_number is missing, not a string or longer than 64 characters; country_code is not a string; 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. See validation errors (opens new window) No
503 The register did not answer in time or is failing, or the GB rate limit is used up for the moment No

The 503 body is a bare message:

{
    "message": "The EORI validation service is currently not available. Please check again later."
}

When the register's rate limit is the reason, the response carries Retry-After: 1: retry after one second. Without that header the register is down or slow; retry a little later.

# Sandbox

Requests with a sandbox API key (opens new window) never query a register and cost nothing (X-Cost: 0). A number with a valid format gets a fixed answer, chosen by its last character:

Last character Answer
8 or 9 Not registered
6 or 7 Registered, without name and address
anything else Registered to a fictional trader: SANDBOX TRADING LTD, 1 Example Street, AA1 1AA London for GB numbers; Sandbox Trading GmbH, Beispielstraße 1, 10115 Berlin, Germany for EU and XI numbers

checked_at is the time of the request and source follows the prefix. A number with an invalid format gets the same answer as with a live key.

# Supported Countries

The API checks EORI numbers from the following 29 countries: the 27 EU member states, the United Kingdom (GB), and Northern Ireland (XI). Note that Greece is GR in EORI numbers, not EL as in VAT numbers.

Code Country Code Country
AT Austria IT Italy
BE Belgium LT Lithuania
BG Bulgaria LU Luxembourg
CY Cyprus LV Latvia
CZ Czechia MT Malta
DE Germany NL Netherlands
DK Denmark PL Poland
EE Estonia PT Portugal
ES Spain RO Romania
FI Finland SE Sweden
FR France SI Slovenia
GB United Kingdom SK Slovakia
GR Greece XI Northern Ireland
HR Croatia
HU Hungary
IE Ireland

Numbers that start with any other country code, such as EL or US, fail with a 422 validation error (opens new window), also when you pass country_code. country_code only completes a number given without any country code.