Validate EORI numbers across all 27 EU member states plus the UK with a single REST API call. Per-country circuit breakers, intelligent caching, and automatic XI/GB routing for Northern Ireland.
{
"valid": true,
"eori_number": "NL820646660",
"country_code": "NL",
"status": "active",
"confidence": "HIGH",
"source": "ec_eori_live",
"cached": false,
"response_time_ms": 89
}
EORI (Economic Operators Registration and Identification) is a unique identifier required for all businesses importing or exporting goods to or from the EU. Without a valid EORI number, customs declarations are rejected, shipments are delayed, and your supply chain grinds to a halt.
Every import/export declaration to the EU requires a valid EORI number. Invalid numbers cause goods to be held at the border, incurring storage fees and delivery delays.
UK businesses now need separate GB EORI numbers. Northern Ireland has dual status with XI-prefixed numbers for EU customs. Routing to the correct validation system is critical.
The official EC EORI validation service uses SOAP/XML. No REST API, no JSON, no modern developer tooling. Integration requires specialized SOAP libraries and verbose XML parsing.
The EC EORI endpoint suffers from the same availability issues as VIES. Country backends go offline without warning, and there is no official status page or SLA.
EuroValidate wraps the EC SOAP endpoint and HMRC REST API in a unified, cached, and monitored REST interface. One endpoint handles all EU countries and the UK.
Full coverage of all EU member states via the EC SOAP endpoint, plus UK EORI validation via the HMRC REST API. One API, complete coverage.
Northern Ireland EORI numbers with XI prefix are routed to the EC system. GB-prefixed numbers go to HMRC. Your application does not need to handle this routing logic.
Each country gets an independent circuit breaker. When one country's backend fails, validation for all other countries continues without interruption.
Dual-layer cache (Redis + PostgreSQL) serves previously validated EORI numbers in under 100ms. Cache TTL is 24 hours with graceful degradation on upstream failure.
Every response includes confidence: HIGH (live), MEDIUM (cached, recent), LOW (cached, stale), or UNKNOWN. Plus upstream_status so you know exactly what is happening.
Use the POST /v1/validate endpoint to validate EORI, VAT, and IBAN in a single request. Perfect for onboarding flows and KYB compliance checks.
A single GET request validates any EU or UK EORI number. No SOAP envelopes, no WSDL, no XML. Just clean JSON over HTTPS.
# Validate a Dutch EORI number curl "https://api.eurovalidate.com/v1/eori/NL820646660" \ -H "X-API-Key: your_api_key" # Response { "success": true, "data": { "valid": true, "eori_number": "NL820646660", "country_code": "NL", "status": "active" }, "meta": { "confidence": "HIGH", "source": "ec_eori_live", "response_time_ms": 89 } }
import httpx # Validate EU EORI response = httpx.get( "https://api.eurovalidate.com/v1/eori/NL820646660", headers={"X-API-Key": "your_api_key"} ) data = response.json() if data["data"]["valid"]: print(f"EORI {data['data']['eori_number']} is active") print(f"Confidence: {data['meta']['confidence']}") else: print("Invalid EORI number") # Also works with UK EORI (GB prefix) uk = httpx.get( "https://api.eurovalidate.com/v1/eori/GB123456789000", headers={"X-API-Key": "your_api_key"} )
const response = await fetch( "https://api.eurovalidate.com/v1/eori/NL820646660", { headers: { "X-API-Key": "your_api_key" } } ); const { data, meta } = await response.json(); if (data.valid) { console.log(`EORI ${data.eori_number} is ${data.status}`); console.log(`Confidence: ${meta.confidence}`); } else { console.log("Invalid EORI number"); }
Start free. Scale as you grow. No credit card required for the free tier. All plans include EORI validation, VAT, IBAN, and company lookup.
Common questions about the EuroValidate EORI Validation API.
Get your free API key and validate your first EORI number in under 60 seconds.