VIES REST API: Stop Wrestling with SOAP
The official VIES API is a SOAP endpoint from 2003 — XML envelopes, WSDL files, and no JSON. vatnode wraps it in a clean REST interface. One GET request, structured JSON response, no XML libraries required.
Official VIES SOAP vs vatnode
Official VIES SOAP — 25 lines of XML
curl https://ec.europa.eu/taxation_customs/
tedb/ws/VatRetrievalService \
-H "Content-Type: text/xml" \
-d '<?xml version="1.0"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/
soap/envelope/"
xmlns:msg="urn:ec.europa.eu:taxud:tedb:
services:v1:IVatRetrievalService"
xmlns:types="urn:ec.europa.eu:taxud:tedb:
services:v1:IVatRetrievalService:types">
<soapenv:Header/>
<soapenv:Body>
<msg:checkVat>
<types:vatNumber>
<types:memberStateCode>
IE
</types:memberStateCode>
<types:vatNumber>
6388047V
</types:vatNumber>
</types:vatNumber>
</msg:checkVat>
</soapenv:Body>
</soapenv:Envelope>'vatnode REST — 2 lines
curl https://api.vatnode.dev/v1/vat/IE6388047V \
-H "Authorization: Bearer $VATNODE_API_KEY"
# Response — clean JSON
{
"valid": true,
"vatId": "IE6388047V",
"countryCode": "IE",
"companyName": "GOOGLE IRELAND LIMITED",
"countryVat": {
"vatName": "Value Added Tax",
"vatAbbr": "VAT",
"standardRate": 23,
"reducedRates": [9, 13.5]
}
}6 problems with the official VIES SOAP API
XML boilerplate
Every VIES request requires a full SOAP envelope with namespaced XML. A simple VAT check becomes 20+ lines of XML before you write any business logic.
WSDL complexity
You need a SOAP client, WSDL parser, and XML library just to make a call. Most modern stacks (Next.js, FastAPI, Laravel) are not built for SOAP.
Frequent downtime
Individual EU member state nodes go offline regularly for maintenance. The official API returns SOAP faults with no built-in retry logic.
No JSON response
VIES returns XML. Parsing it into usable data requires additional libraries and custom mapping code.
EL vs GR country codes
Greece uses "EL" in VIES but "GR" in ISO 3166. You need to handle this mapping yourself.
No VAT rates included
VIES only validates the number — it does not return VAT rates for the country. You need a separate data source for invoicing.
What vatnode adds on top
| Feature | vatnode | Official VIES |
|---|---|---|
| REST + JSON interface | ||
| Automatic retries on failure | ||
| German BZSt fallback | ||
| VAT rates included in response | ||
| Local VAT name (for invoice printing) | ||
| EL→GR country code normalization | ||
| Audit trail (checkId + timestamp) | ||
| 99.9% uptime SLA | ||
| EU VAT number validation | ||
| Company name + address |
Everything you get with vatnode
- REST + JSON — one curl command, no XML libraries
- Automatic retries with exponential backoff
- German BZSt fallback when VIES DE node is down
- EL/GR country code normalized automatically
- VAT rates for 44 European countries included in response
- Local VAT name (Umsatzsteuer, TVA, ALV…) for invoice printing
- checkId per validation — audit trail for each invoice
- 99.9% uptime SLA
Pricing
The free plan includes 20 requests/month — enough to build and test your full integration. No credit card required. Paid plans start at €19/month for 1,000 requests with monitoring and webhooks.
See full pricing details or read the quickstart guide to make your first API call.
Replace your VIES SOAP integration today
Free plan, no credit card, up and running in 5 minutes. The REST interface works with any language — curl, JavaScript, Python, PHP, Go, Ruby.