If you sell to businesses in other EU countries, you check their VAT numbers in VIES, the European Commission's VAT number lookup. A valid number is what lets you skip VAT and apply the reverse charge.
VIES isn't one database. It's a search service that asks each country's own system, and those systems go offline independently: for maintenance, under load, or for no stated reason. When Germany's or Spain's connection is down, every check for a German or Spanish number fails, while the rest of the EU works fine.
It happened while this post was being prepared: on the afternoon of 22 October 2026, the Commission's VIES status page listed Ireland as unavailable while Germany and the Netherlands answered normally. Every Irish VAT number check failed until Ireland's system came back.
So sooner or later a business customer will be at your checkout, and you won't be able to confirm their number.
What an outage is, and isn't
An unavailable check is not an invalid number. VIES tells you it couldn't reach the country (the error is typically MS_UNAVAILABLE, "member state unavailable"). It hasn't told you anything about the customer.
Treating "unavailable" as "invalid" means charging VAT to a real business that didn't owe it. Treating it as "valid" means skipping VAT you can't yet justify.
Your options at checkout
1. Retry shortly. Many outages are short. If your integration can wait and retry, that's the cleanest fix. Don't retry in a tight loop: it adds load to a system that's already struggling and burns your own API usage.
2. Use a recent result. If the same VAT number was checked successfully a short time ago, that result is still good evidence. Most outages don't coincide with a customer's very first purchase.
3. Charge VAT now, correct it later. Complete the sale with VAT charged, and once VIES confirms the number, issue a corrected invoice and refund the VAT. The customer's purchase isn't blocked, and you never skip VAT you couldn't justify. The cost is a refund and a corrected invoice afterwards.
4. Ask the customer to come back later. It works for big contracts, less so for a self-serve checkout.
Which is right depends on your business. A tool sold to developers at €20 a month can charge VAT and correct later. A large B2B invoice is better paused until the check works.
Keep a record either way: when you checked, what VIES answered, and what you did. If a tax authority later asks why you applied the reverse charge (or didn't), that record is your answer.
How Duty27 handles it
Duty27's /v1/calculate checks the buyer's VAT number as part of a business-to-business calculation. There are two kinds of check, and they behave differently in an outage:
Basic checks use a recent result first. On the free tier, or with
mode: "BASIC", Duty27 looks in its cache before asking VIES. A number checked in the last 24 hours is answered from the cache, markedvat_validation_cached: true, without contacting VIES at all, so an outage doesn't affect it.Qualified checks always ask VIES. Paid accounts with their own VAT number on file get a qualified check by default: the kind that returns a VIES consultation number as proof. That proof has to come from VIES on the day, so it's never served from a cache.
When VIES can't answer, you get a clear error. The response is HTTP 503
VAT_VALIDATION_UNAVAILABLE, distinct from an invalid number, with aRetry-Afterheader suggesting how long to wait before retrying (60 seconds). It's a starting point, not a promise: a country's outage can last much longer.That error looks like this, so your code can tell it apart from a real "invalid":
HTTP/1.1 503 Service Unavailable Retry-After: 60 Content-Type: application/json {"error": "VAT_VALIDATION_UNAVAILABLE", "message": "VAT number validation could not be completed"}An invalid number is not an error at all: the calculation succeeds with
"vat_validation_status": "INVALID", VAT charged and"reverse_charge": false.Or you choose to proceed. Send
on_validation_unavailable: "ASSUME_INVALID"and Duty27 calculates with VAT charged and no reverse charge, as in option 3 above. That choice is logged, so you can show later why VAT was charged.
When your own VAT number is on file, a valid check also returns the VIES consultation number: the reference that proves the check happened, for your records.
The free calculator on the Duty27 homepage does the same: when a country's registry is down, it says that VIES isn't returning results for that country, rather than reporting a failed lookup.
See the VIES guide for how the check works, and the API docs for the error codes.
Duty27™