> ## Documentation Index
> Fetch the complete documentation index at: https://docs.avatcado.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported Countries

> All country codes supported by Avatcado

# 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.

<Tip>
  You can also retrieve current VAT rates for all supported countries via the [VAT Rates API](/vat-rates). Free and unlimited.
</Tip>

## Country codes

| Code | Country          | Upstream                           |
| ---- | ---------------- | ---------------------------------- |
| `AT` | Austria          | VIES                               |
| `BE` | Belgium          | VIES                               |
| `BG` | Bulgaria         | VIES                               |
| `CH` | Switzerland      | BFS UID Register                   |
| `CY` | Cyprus           | VIES                               |
| `CZ` | Czech Republic   | VIES                               |
| `DE` | Germany          | VIES                               |
| `DK` | Denmark          | VIES                               |
| `EE` | Estonia          | VIES                               |
| `EL` | Greece           | VIES                               |
| `ES` | Spain            | VIES                               |
| `FI` | Finland          | VIES                               |
| `FR` | France           | VIES                               |
| `GB` | United Kingdom   | HMRC                               |
| `HR` | Croatia          | VIES                               |
| `HU` | Hungary          | VIES                               |
| `IE` | Ireland          | VIES                               |
| `IT` | Italy            | VIES                               |
| `LI` | Liechtenstein    | BFS UID Register                   |
| `LT` | Lithuania        | VIES                               |
| `LU` | Luxembourg       | VIES                               |
| `LV` | Latvia           | VIES                               |
| `MT` | Malta            | VIES                               |
| `NL` | Netherlands      | VIES                               |
| `NO` | Norway           | Bronnysund Register Centre         |
| `AU` | Australia        | ABR (Australian Business Register) |
| `PL` | Poland           | VIES                               |
| `PT` | Portugal         | VIES                               |
| `RO` | Romania          | VIES                               |
| `SE` | Sweden           | VIES                               |
| `SI` | Slovenia         | VIES                               |
| `SK` | Slovakia         | VIES                               |
| `XI` | Northern Ireland | VIES                               |

## Routing

* **EU countries** (including `XI`) are validated via the [VIES](https://ec.europa.eu/taxation_customs/vies/) service
* **`GB`** is validated via the [HMRC](https://developer.service.hmrc.gov.uk/api-documentation) API
* **`CH` and `LI`** are validated via the [BFS UID Register](https://www.uid.admin.ch/) (Swiss Federal Statistical Office). Liechtenstein shares a VAT territory with Switzerland and uses the same BFS API
* **`NO`** is validated via the [Bronnysund Register Centre](https://www.brreg.no/) (Enhetsregisteret)
* **`AU`** is validated via the [ABR](https://abr.business.gov.au/) (Australian Business Register). Checks GST registration status via ABN lookup

## 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.

<Note>
  Greece uses `EL` as its country code (not `GR`). This follows the EU VIES convention.
</Note>

## 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 Bronnysund 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.

**EU example**: EU requester for an EU target:

<CodeGroup>
  ```bash curl theme={null}
  curl -H "Authorization: Bearer avat_live_your_api_key" \
    "https://api.avatcado.com/v1/validate?vat_number=NL123456789B01&requester_vat_number=DE987654321"
  ```

  ```typescript @avatcado/node theme={null}
  const { data, error } = await avatcado.vat.validate({
    vatNumber: "NL123456789B01",
    requesterVatNumber: "DE987654321",
  });
  ```

  ```python Python theme={null}
  result = avatcado.vat.validate(
      "NL123456789B01",
      requester_vat_number="DE987654321",
  )
  ```
</CodeGroup>

**UK example**: UK requester for a UK target:

<CodeGroup>
  ```bash curl theme={null}
  curl -H "Authorization: Bearer avat_live_your_api_key" \
    "https://api.avatcado.com/v1/validate?vat_number=GB123456789&requester_vat_number=GB987654321"
  ```

  ```typescript @avatcado/node theme={null}
  const { data, error } = await avatcado.vat.validate({
    vatNumber: "GB123456789",
    requesterVatNumber: "GB987654321",
  });
  ```

  ```python Python theme={null}
  result = avatcado.vat.validate(
      "GB123456789",
      requester_vat_number="GB987654321",
  )
  ```
</CodeGroup>

The consultation number appears in `data.consultation_number`:

```json theme={null}
{
  "data": {
    "valid": true,
    "vat_number": "NL123456789B01",
    "consultation_number": "WAPIAAAAA1BBB2",
    "..."
  }
}
```

<Note>
  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`.
</Note>

<Note>
  Consultation numbers are not available for CH, LI, NO, or AU validations. The BFS UID Register, Bronnysund Register Centre, and ABR do not support consultation number issuance.
</Note>
