The two problems VIES doesn't solve
Problem 1: VIES is unavailable more than you think
VIES queries national VAT registries across 27 EU member states in real time. When any one of those registries has a maintenance window — which happens constantly and without notice — VIES returns an error for that country. The European Commission maintains a status page, but most developers only discover downtime when their own checkout breaks.
A partial list of documented VIES failure modes:
- MS_UNAVAILABLE — the member state registry is offline
- SERVICE_UNAVAILABLE — VIES itself is down
- GLOBAL_MAX_CONCURRENT_REQ — rate limit hit during peak hours
- TIMEOUT — the request took too long (common for DE, FR, IT registries)
For a billing or checkout flow, any one of these means a hard failure at exactly the wrong moment: when a customer is trying to buy from you.
Problem 2: VIES gives you a boolean, not evidence
When VIES does return a result, it tells you valid: true or valid: false. That's it. No timestamp in a format an auditor accepts. No consultation number — the identifier that proves you made a formal query at a specific point in time.
Under the EU VAT Directive, applying a zero VAT rate on cross-border B2B sales requires you to verify that your customer has a valid VAT number and that you can prove you checked. The German Umsatzsteuergesetz (§ 6a UStG) and equivalent rules in France, Netherlands, and other member states treat the VIES consultation number as the accepted proof instrument. A screenshot of a VIES browser result is not the same thing and will fail a focused VAT audit.
VIES vs. Vatnode: a direct comparison
❌ VIES direct
- No consultation number in API response
- Hard failures when any member state is down
- No audit log — you store screenshots
- No company name / address enrichment
- No SLA, no support
- Rate-limited during peak hours
- Browser UI only (no official REST API)
✅ Vatnode
- Consultation number in every response
- National-registry fallback when VIES is down
- Immutable, exportable audit log
- Company name + address enrichment
- REST API with SDKs and webhooks
- No rate limits on your plan tier
- EU-hosted, GDPR-aware
How the migration works
Vatnode's endpoint mirrors the shape of a VIES lookup. If you're already calling a VIES wrapper library, a one-line change is typically all you need.
# Before: raw VIES call via zeep or similar
result = vies_client.service.checkVat("DE", "811907980")
# After: Vatnode — same result shape + consultation_number + audit log
curl https://api.vatnode.io/v1/validate \
-H "Authorization: Bearer sk_live_..." \
-d '{"vat_number": "DE811907980"}'
The response looks like:
{
"valid": true,
"consultation_number": "WAPIAAAAW1234567",
"company": {
"name": "Example GmbH",
"address": "Musterstraße 1, 10115 Berlin"
},
"source": "vies",
"checked_at": "2026-06-12T08:00:00Z"
}
When VIES is unavailable, source switches to national_registry automatically. Your integration doesn't need to handle errors — Vatnode handles fallback for you.
Which businesses need a VIES alternative most
VIES works fine for occasional manual lookups. The need for a proper alternative becomes critical when:
- Automated billing or subscriptions — renewals run at night when registries are most likely to be in maintenance
- E-commerce checkouts — a VIES failure at checkout means lost sales
- High-transaction-volume SaaS — rate limits become a real problem above ~1,000 validations/day
- Any business subject to EU VAT audits — GDPR-era audits increasingly focus on documentation quality
- Accounting software providers — your customers rely on you for compliant zero-rating; a VIES failure becomes your support ticket
Replace VIES in an afternoon
One REST endpoint. Consultation numbers. Fallbacks. Audit log. Free up to 100 validations/month.
Get your free API key →Frequently asked questions
Is there an official VIES REST API?
The European Commission offers a RESTful VIES API at ec.europa.eu/taxation_customs/vies/rest-api, introduced in 2022. It is better than the old SOAP interface but still subject to all the same member-state availability issues and does not return consultation numbers for programmatic clients in the same auditable form. Vatnode sits on top of both the REST and SOAP interfaces and adds fallback, logging, and enrichment.
What is a VIES consultation number exactly?
When you submit a qualified VIES query (providing both the requester's and the buyer's VAT number), VIES issues a unique consultation reference — e.g. WAPIAAAAW1234567. This number, combined with the timestamp of your query, is the formal evidence that you performed a due-diligence check. Tax authorities in Germany, Netherlands, France, and Austria have confirmed in practice that this number is what they ask for in audits of zero-rated cross-border sales.
What happens when VIES is down?
Vatnode falls back to the relevant national registry directly. For Germany that's the Bundeszentralamt für Steuern; for Netherlands it's the Belastingdienst, etc. When the fallback is used, the response notes "source": "national_registry" and the audit log records this transparently. No consultation number is issued for national-registry queries (those only come from VIES), but the fallback result still provides validity confirmation and is logged.
Does Vatnode store my customers' VAT numbers?
Vatnode logs the validation event — the VAT number queried, the result, timestamp, and consultation number — for the purpose of your audit log. Data is processed and stored in the EU. See the privacy policy for full retention and deletion terms.
Summary
VIES is the right starting point for manual lookups, but it's the wrong foundation for any production VAT validation system. It has no SLA, produces no audit-proof evidence, and fails when EU member states take maintenance windows. Vatnode is the drop-in alternative that adds the three things VIES is missing: reliability (via fallbacks), evidence (via consultation numbers), and history (via an exportable audit log).