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

SOAP / 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

REST / JSON
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

FeaturevatnodeOfficial 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.