Simple, transparent pricing
VIES is free. Knowing if a VAT is invalid or VIES just went down — that's what you're paying for.
Free
$0forever
100 validations/month
- All 27 EU countries
- Company name + address
- JSON responses
- No credit card required
Starter
$19/month
1,000 validations/month
- All 27 EU countries
- Sub-10ms cached responses
- invalid vs service_unavailable — never block a valid customer
- Email support
Growth
$49/month
10,000 validations/month
- All 27 EU countries
- Sub-10ms cached responses
- invalid vs service_unavailable — never block a valid customer
- Priority email support
Business
$149/month
100,000 validations/month
- All 27 EU countries
- Sub-10ms cached responses
- invalid vs service_unavailable — never block a valid customer
- Priority support
Need more than 100,000 validations? Contact us for the Scale plan (1,000,000/month) or custom pricing.
Why pay when VIES is free?
Three numbers.
Downtime — last 12 months
Every minute VIES is down, your checkout returns an error unless you absorb it.
Slow responses (>2 s)
Checkout latency kills conversions. VIES has no SLA and no cache.
Build your own wrapper
Cache, retries, monitoring, SOAP parsing — before ongoing maintenance.
When you don't need TaxID
If these three things describe you, call VIES directly — it's free and official.
- You validate fewer than 50 VAT numbers per month
- You can tolerate 1–4 second response times (VIES has no SLA)
- You have time to parse XML and handle ambiguous errors yourself
Direct VIES call — no API key required
const res = await fetch(
"https://ec.europa.eu/taxation_customs/vies/services/checkVatService",
{
method: "POST",
headers: { "Content-Type": "text/xml;charset=UTF-8" },
body: `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<checkVat xmlns="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
<countryCode>DE</countryCode>
<vatNumber>123456789</vatNumber>
</checkVat>
</soapenv:Body>
</soapenv:Envelope>`,
}
);
// Parse XML yourself.
// Note: same fault code for invalid VAT and for VIES downtime.
const xml = await res.text();Frequently asked questions
Why not just call VIES directly? It's free.
VIES is free and official, but it returns the same error whether a VAT number is invalid or the service is temporarily down. Our API returns status: "invalid" when a VAT fails validation and status: "service_unavailable" when VIES has a problem — so your code can retry safely and you never block a valid customer because VIES had a bad hour. We also validate format locally before hitting VIES (those requests don't count against your quota), cache active results for 24 hours without ever caching transient errors, and return clean JSON — no SOAP XML to parse.
Do unused validations roll over?
No. The monthly quota resets on the first of each month. Unused validations do not carry over to the next month.
What counts as a validation?
Every request to GET /api/v1/validate/{country}/{vat} that reaches our servers counts as one validation, regardless of the result. Requests that fail format validation locally before hitting VIES do not count against your quota.
Can I upgrade or downgrade at any time?
Yes. You can change your plan at any time from the billing portal in your dashboard. Upgrades take effect immediately. Downgrades apply at the end of the current billing period.
What happens if I exceed my monthly limit?
Requests beyond your plan limit return a 429 rate_limit_exceeded error. Your existing integration will not break — it will just need to handle that error code until the next billing cycle or until you upgrade.
Is there a free trial for paid plans?
The free plan (100 validations/month) lets you test the full API without a credit card. For higher volume testing, contact us and we can arrange a trial.
Do you offer annual billing?
Not yet, but it is on the roadmap. Contact us at hello@taxid.dev if annual billing is important for your procurement process.
Ready to start?
Free plan includes 100 validations/month with no credit card required.
Get free API key