VIES averages 70% uptime and requires SOAP. EuroValidate gives you a REST API with sub-100ms cached responses, per-country circuit breakers, and confidence scoring across all 27 EU member states.
{
"valid": true,
"vat_number": "NL820646660B01",
"country_code": "NL",
"company_name": "COOLBLUE B.V.",
"company_address": "Weena 664\n3012CN ROTTERDAM",
"confidence": "HIGH",
"source": "vies_live",
"cached": false,
"response_time_ms": 47
}
The EU VIES system depends on 27 independent national backends. Each country manages its own infrastructure with wildly different uptime. Germany alone generates 95% of all VIES errors. When VIES goes down, your checkout breaks, your invoicing stalls, and your customers leave.
VIES member state backends go offline regularly. Germany, Italy, and Spain are the worst offenders. There is no SLA, no status page, no warning.
VIES uses SOAP/XML with verbose WSDL contracts. No REST, no JSON, no developer-friendly tooling. Parsing responses requires specialized libraries like zeep.
Germany and Spain never return company names or addresses due to data protection laws. You get a "valid/invalid" boolean and nothing else.
Greece uses "EL" in VIES but "GR" in ISO 3166. Northern Ireland has dual status (XI for customs, GB for VAT). Monaco routes through France. None of this is documented well.
EuroValidate wraps the VIES SOAP API in a modern REST interface with intelligent caching, per-country health monitoring, and automatic enrichment from GLEIF when VIES data is incomplete.
Dual-layer cache (Redis + PostgreSQL) serves previously validated numbers in under 100ms. Cache TTL is 24 hours per GDPR requirements.
Each EU country gets its own circuit breaker. When Germany goes down, France keeps working. No single point of failure across the entire EU.
Every response includes a confidence level: HIGH (live verification), MEDIUM (cached, recent), LOW (cached, stale), or UNKNOWN. Your application decides how to proceed.
Full coverage of all EU member states plus UK VAT validation via HMRC. Automatic GR/EL mapping for Greece, XI routing for Northern Ireland.
When VIES is down, EuroValidate returns the last known valid result with reduced confidence and an upstream_status field. Your checkout never breaks.
For countries like Germany and Spain that suppress company data, EuroValidate cross-references the GLEIF LEI database to fill in company names and addresses.
A single GET request validates any EU VAT number. No WSDL, no SOAP envelopes, no XML parsing. Just clean JSON over HTTPS.
# Validate a Dutch VAT number curl "https://api.eurovalidate.com/v1/vat/NL820646660B01" \ -H "X-API-Key: your_api_key" # Response { "success": true, "data": { "valid": true, "vat_number": "NL820646660B01", "country_code": "NL", "company_name": "COOLBLUE B.V.", "company_address": "Weena 664, 3012CN ROTTERDAM" }, "meta": { "confidence": "HIGH", "source": "vies_live", "response_time_ms": 47 } }
import httpx response = httpx.get( "https://api.eurovalidate.com/v1/vat/NL820646660B01", headers={"X-API-Key": "your_api_key"} ) data = response.json() if data["data"]["valid"]: print(f"Valid: {data['data']['company_name']}") print(f"Confidence: {data['meta']['confidence']}") else: print("Invalid VAT number")
const response = await fetch( "https://api.eurovalidate.com/v1/vat/NL820646660B01", { headers: { "X-API-Key": "your_api_key" } } ); const { data, meta } = await response.json(); if (data.valid) { console.log(`Valid: ${data.company_name}`); console.log(`Confidence: ${meta.confidence}`); } else { console.log("Invalid VAT number"); }
Start free. Scale as you grow. No credit card required for the free tier. All plans include VAT validation, IBAN, EORI, and company lookup.
Common questions about the EuroValidate VAT Validation API.
Get your free API key and validate your first VAT number in under 60 seconds.