Skip to main content

Supported Countries

Avatcado validates VAT and GST numbers for 32 countries - all EU member states, the United Kingdom (including Northern Ireland via the XI prefix), Switzerland, Liechtenstein, Norway, and Australia.
You can also retrieve current VAT rates for all supported countries via the VAT Rates API. Free and unlimited.

Country codes

VIES name and address availability verified 2026-09-04 with one registered sample number per state. Notes
  • Germany and Spain do not disclose company names or addresses through VIES; a valid answer for these countries has company: null.
  • Greece uses the EL prefix for VAT numbers (ISO code GR).
  • Northern Ireland trades under EU VAT rules for goods and uses the XI prefix; VIES answers for it.
  • Liechtenstein shares Switzerland’s VAT territory and is validated through the same BFS UID Register.
  • France: VAT status comes from the DGFiP list; name and address come from the public company search and are null when that lookup fails.
  • Estonian VAT groups share one VAT number; a snapshot answer names one member of the group.
  • The Croatian VAT payer list carries no names or addresses; a porezna fallback answer has company: null.
  • The Latvian register publishes names but no addresses.
  • Belgium: the KBO snapshot answers for companies only; sole traders fall through to the cache.

Routing

  • EU countries (including XI) are validated via the VIES service
  • GB is validated via the HMRC API
  • CH and LI are validated via the BFS UID Register (Swiss Federal Statistical Office). Liechtenstein shares a VAT territory with Switzerland and uses the same BFS API
  • NO is validated via the Bronnoysund Register Centre (Enhetsregisteret)
  • AU is validated via the ABR (Australian Business Register). Checks GST registration status via ABN lookup
  • DE and ES are validated via VIES like every other EU country, but neither member state publishes company data: a valid answer for them carries company: null

National registry fallback

VIES is a gateway to 27 national databases, and individual member states go offline regularly. When VIES reports a member state unavailable (or times out), Avatcado consults that country’s own tax register before turning to stored results. For these countries the order is: national register, then cache, then stale cache. The national register step is included in the Pro and Business plans. On the Free plan the order is cache, then stale cache, for every country, and a 503 for a never-validated number in one of the countries below ends with the upgrade sentence quoted on the caching page. Paid callers can skip the register on a single request with fallback=false, and a request that carries requester_vat_number skips it by default, because a register answer never carries a consultation number (see Consultation numbers). CZ, FI, FR, LV, RO and SK are queried live, on the request itself. The Slovak register (fssr) is a keyed API over a list the Financial Administration republishes every morning, so its answer reflects the previous day. SI, HR and EE are served from a daily snapshot instead: a scheduled job downloads each authority’s previous-day bulk file twice a day and stores it, so a fallback request never waits on a live download. A snapshot that could not be refreshed for three days, or whose source file has not changed in fourteen days, is not used; the request falls through to the cache, then stale cache, exactly as when a live register cannot answer. The Croatian list carries no names or addresses, so a porezna answer always has company: null. Two of the three snapshot registers have a VAT-group quirk. Estonian VAT groups share one VAT number across several companies; when the RIK snapshot answers for such a number, company names one member of the group rather than the entity you queried, though valid itself is unaffected. The Slovenian register lists a small number of companies under a VAT-group identifier; VIES did not confirm such a member’s own number in our checks, so the mirror never serves those rows and the request falls through to the cache. A register answer is served only when the register confirms the number is registered for VAT. That answer comes back with meta.source_status: "fallback" and meta.source set to the registry id, is stored like any other result and served from cache afterwards, and the next cache hit triggers a background VIES refresh. It never carries a consultation_number (national registers cannot issue one, which is why a request with requester_vat_number only takes a register answer when it passes fallback=true). When the register reports the number as not registered, has no record of it, or cannot look up that number shape at all, Avatcado does not serve that answer. It falls through to the cache: the most recent stored result for the number is served with meta.source_status: "unavailable" and meta.cached: true, plus meta.stale: true when that result is older than the 25-day TTL. If nothing is stored, the request fails with upstream_member_state_unavailable and is refunded. The reason is coverage. National registers publish domestic VAT registration and leave out entity types that VIES includes: the Finnish open data has no private traders or municipalities, the Latvian register lists no natural persons, and the Czech register cannot look up the 9 or 10 digit numbers issued to individuals. The Slovak list goes the other way: it also carries subjects registered under sections 7 and 7a of the VAT act, which are not VAT payers, and VIES confirms those numbers too, so they are served as registered. The Belgian snapshot only stores legal persons, never sole traders: about 4 percent of Belgian sole traders are VAT-registered domestically under the small-enterprise exemption without being valid in VIES, so a kbo answer for a natural person would be a false negative, and those numbers fall through to the cache instead. A missing record therefore says nothing about the number, while a confirmation means the country’s own tax authority lists it as VAT registered. The trade-off is that a number the register lists as deregistered is not reported as invalid during the outage either; the stored result is served instead, so re-validate through VIES once the member state is back when the answer matters. What valid: true means on a fallback: registered for VAT in that country according to its own register. Domestic registration can be broader than the intra-EU registration VIES reports, so treat a fallback answer as the best available signal during an outage rather than as a VIES result. Countries with no usable national register (for example DE, NL, PL, AT, ES, IE) rely on the cache alone: the most recent stored result, flagged stale when it is older than 25 days.
The coverage page shows the live state of every register, including when each snapshot was last refreshed.

Input normalization

The API automatically normalizes VAT numbers before validation:
  • Uppercase: nl123456789b01 becomes NL123456789B01
  • Strip spaces: NL 123 456 789 B01 becomes NL123456789B01
  • Strip dots: NL123.456.789.B01 becomes NL123456789B01
  • Strip hyphens: NL-123456789-B01 becomes NL123456789B01
You can pass messy input and the API handles the rest.
Greece uses EL as its country code (not GR). This follows the EU VIES convention.

Format details

Switzerland (CH) and Liechtenstein (LI)

Swiss UID format: CHE-NNN.NNN.NNN followed by a MWST, TVA, or IVA suffix (depending on language region). Example: CHE-123.456.789 MWST. The API normalizes this to CHE123456789MWST. The last digit of the 9-digit UID number is a MOD11 checksum. The API validates this checksum before calling the BFS upstream. Liechtenstein uses the same format and the same BFS API as Switzerland.

Norway (NO)

Norwegian format: NO followed by 9 digits and the MVA suffix. Example: NO123456785MVA. The last digit of the 9-digit organization number is a MOD11 checksum. The API validates this checksum before calling the Bronnoysund upstream.

Australia (AU)

Australian ABN (Australian Business Number) format: AU followed by 11 digits. Example: AU51824753556. The ABN has a weighted checksum algorithm that the API validates before calling the ABR upstream. You can also pass the ABN prefix (e.g., ABN51824753556) and it will be normalized to AU51824753556.

Consultation numbers with requester_vat_number

Pass your own VAT number as the requester_vat_number query parameter to receive a consultation number for audit-proof tax compliance workflows. This works for both EU (VIES) and UK (HMRC) validations. A request with a requester is always a fresh check. The cache and fallback flags default to false for it, and no stored result is served, not even during an outage: the answer is a fresh consultation number or a refunded 503. Pass cache=true or fallback=true explicitly to opt back in. See Consultation numbers on the caching page for the details. EU example: EU requester for an EU target:
UK example: UK requester for a UK target:
The consultation number appears in data.consultation_number:
For EU targets, the requester must be an EU VAT number. For UK targets, the requester must be a UK VAT number. Cross-system requests (e.g. EU requester for UK target) silently omit consultation_number.
Consultation numbers are not available for CH, LI, NO, or AU validations. The BFS UID Register, Bronnoysund Register Centre, and ABR do not support consultation number issuance.
Consultation numbers are also never issued on a national registry fallback response (meta.source_status: "fallback"), even when you pass requester_vat_number. National tax registers cannot issue them. That is why a request with requester_vat_number skips the register by default and fails with a refunded 503 while the member state is down; pass fallback=true to accept a register answer anyway, and re-validate through VIES once the member state is back if you need the proof.