VAT Rates
Get current VAT rates for 44 European countries (EU-27 + Norway, Switzerland, UK, and others). This endpoint is free and does not require an API key.
Endpoints
Get Rates for a Country
GET /v1/rates/{countryCode}Get All Rates
GET /v1/ratesRequest Examples
Single Country
curl https://api.vatnode.dev/v1/rates/DEAll Countries
curl https://api.vatnode.dev/v1/ratesResponse
Single Country Response
{
"countryCode": "DE",
"countryName": "Germany",
"vatName": "Umsatzsteuer",
"vatAbbr": "MwSt",
"standardRate": 19,
"reducedRates": [7],
"superReducedRate": null,
"parkingRate": null,
"updatedAt": "2026-03-27"
}All Countries Response
{
"rates": [
{
"countryCode": "AT",
"countryName": "Austria",
"vatName": "Umsatzsteuer",
"vatAbbr": "USt",
"standardRate": 20,
"reducedRates": [19, 13, 10],
"superReducedRate": null,
"parkingRate": null,
"updatedAt": "2026-03-27"
},
// ... 43 more countries
],
"count": 44
}Response Fields
| Field | Type | Description |
|---|---|---|
| countryCode | string | Two-letter ISO country code |
| countryName | string | Full country name in English |
| vatName | string | Official local name of the tax (e.g. "Umsatzsteuer") |
| vatAbbr | string | null | Short abbreviation (e.g. "MwSt", "TVA", "ALV") |
| standardRate | number | Standard VAT rate (%) |
| reducedRates | number[] | Array of reduced VAT rates (%) |
| superReducedRate | number | null | Super-reduced rate if applicable |
| parkingRate | number | null | Parking rate if applicable |
| updatedAt | string | Last update timestamp |
EU-27 VAT Rates (2026)
| Country | Code | Standard | Reduced |
|---|---|---|---|
| Austria | AT | 20% | 10%, 13%, 19%* |
| Belgium | BE | 21% | 6%, 12% |
| Bulgaria | BG | 20% | 9% |
| Croatia | HR | 25% | 5%, 13% |
| Cyprus | CY | 19% | 5%, 9% |
| Czech Republic | CZ | 21% | 12% |
| Denmark | DK | 25% | — |
| Estonia | EE | 24% | 9%, 13% |
| Finland | FI | 25.5% | 10%, 13.5% |
| France | FR | 20% | 0.9%†, 1.05%†, 5.5%, 8.5%, 10%, 13% |
| Germany | DE | 19% | 7% |
| Greece | GR | 24% | 4%*, 6%, 13%, 17% |
| Hungary | HU | 27% | 5%, 18% |
| Ireland | IE | 23% | 9%, 13.5% |
| Italy | IT | 22% | 5%, 10% |
| Latvia | LV | 21% | 5%, 12% |
| Lithuania | LT | 21% | 5%, 12% |
| Luxembourg | LU | 17% | 8%, 14% |
| Malta | MT | 18% | 5%, 7% |
| Netherlands | NL | 21% | 9% |
| Poland | PL | 23% | 5%, 8% |
| Portugal | PT | 23% | 6%, 13%, 16%†, 22%† |
| Romania | RO | 21% | 11% |
| Slovakia | SK | 23% | 5%, 19% |
| Slovenia | SI | 22% | 5%, 9.5% |
| Spain | ES | 21% | 4%*, 10% |
| Sweden | SE | 25% | 6%, 12% |
* Super-reduced rate (Greece: basic goods; Spain: food, medicines, books).
* Austria 19%: regional standard rate applying only in Jungholz and Mittelberg municipalities.
† France 0.9% and 1.05%: apply in French Overseas Departments or Corsica.
† Portugal 16% and 22%: territorial rates for Madeira (16% intermediate, 22% standard) and Azores.
Code Examples
JavaScript - Calculate VAT
async function getVatRate(countryCode) {
const response = await fetch(`https://api.vatnode.dev/v1/rates/${countryCode}`);
if (!response.ok) throw new Error('Failed to fetch VAT rate');
return response.json();
}
// Calculate VAT
const rate = await getVatRate('DE');
const netPrice = 100;
const vatAmount = netPrice * (rate.standardRate / 100);
const grossPrice = netPrice + vatAmount;
console.log(`Net: €${netPrice}, VAT: €${vatAmount}, Gross: €${grossPrice}`);
// Output: Net: €100, VAT: €19, Gross: €119Caching
VAT rates change infrequently. We recommend caching rates on your end for at least 24 hours to minimize API calls.
Data Source
VAT rates are sourced from the European Commission Taxes in Europe Database (TEDB) via its official SOAP web service, checked daily and updated automatically when rates change.
Prefer a zero-dependency solution? If you only need VAT rates (not validation), check out eu-vat-rates-data — a free, open-source package available for JavaScript/TypeScript, Python, PHP, Go, and Ruby. Rates are bundled directly in the package and updated daily via GitHub Actions.