upstream_member_state_unavailable
HTTP Status: 503 Service Unavailable
Example response
vat_number you submitted (and requester_vat_number when supplied). meta.validation_id identifies the recorded attempt; include it when contacting support.
What happened?
VIES reported that the specific EU member state’s tax authority backend is unavailable. VIES is a gateway that routes to individual national databases. When one is down, only VAT numbers from that country are affected. This is different fromupstream_unavailable, which means the entire upstream service (VIES, HMRC, BFS, BRREG, or ABR) is unreachable. Here, VIES itself is working but the member state backend is not.
Common VIES availability errors that trigger this:
MS_UNAVAILABLE- the member state database is offlineMS_MAX_CONCURRENT_REQ- the member state is overloadedTIMEOUT- the member state did not respond in timeSERVICE_UNAVAILABLE- the VIES service itself is downGLOBAL_MAX_CONCURRENT_REQ- VIES-wide concurrency limit reachedVOW-ERR-11- the member state failed while answering, and VIES reported it as a validation error (“A mandatory field is missing”) rather than as an availability fault. In the outage we observed, the VIES check-status service reported the same member state as unavailable at that moment
Why didn’t I get a stale cached result?
Avatcado tries two fallbacks before returning this error: on Pro and Business plans the country’s national tax register (forBE (companies only), CZ, EE, FI, FR, HR, LV, RO, SI, SK; served with meta.source_status: "fallback" when the register confirms the number), and on every plan the most recent stored result (meta.source_status: "unavailable"). You only see this 503 when neither can answer: no national register exists or the plan or request skipped it, it failed, or it did not confirm the number, and Avatcado has never validated this VAT number before.
A request that carries requester_vat_number skips both fallbacks by default: it consults no register and serves no stored result, because a consultation number only means something when it comes from the check that produced the answer. Such a request sees this 503 whenever the member state is down, and is refunded. Pass fallback=true to accept a register answer (without a consultation number) or cache=true to accept the stored result; see Consultation numbers.
On the Free plan, when the country has a national register, the message ends with National register fallback (10 EU countries) is available on Pro and Business plans. so the reason is visible in logs. On Pro and Business, when the country has a national register and the request carried requester_vat_number without fallback=true, the message ends with The national register was not consulted because requester_vat_number was supplied. Pass fallback=true to accept a register answer, which never carries a consultation_number. A paid request that passed fallback=false gets the plain message.
Billing
This error is not counted against your monthly quota. When no fallback can be served, the API automatically refunds the request so you are not charged for an unanswered call. See Non-billable failures. If a stale fallback was served instead (HTTP200 with meta.stale: true), the request does count, since you received usable data. The same is true for a national registry fallback (HTTP 200 with meta.source_status: "fallback"): the request counts, since data was served.
How to fix
- Retry after the
Retry-Afterheader: Use exponential backoff, doubling each time up to 60 seconds - Check VIES status: https://ec.europa.eu/taxation_customs/vies/ to see if the specific country shows as unavailable
- Try again later: Member state outages are usually temporary (minutes to hours)
- Handle gracefully: Show users a message like “VAT validation for [country] is temporarily unavailable”
Common mistakes
- Treating this as a permanent failure: Member state outages are transient. Always retry
- Not checking
meta.source_status: On subsequent requests for the same VAT number, Avatcado may serve a national registry answer ("fallback", Pro and Business) or a stored result ("unavailable") instead of this error