Alpha testing: all current functionality is free while VAT Engine is in active development

SME Thresholds

Reference for GET /v1/vat/sme-thresholds, including member-state threshold data, date filters, and example scheme-threshold responses.

Endpoint

GET /v1/vat/sme-thresholds

Authentication: Public (no API key required)

Overview

Returns EU Small Business Scheme (SME) VAT thresholds for all 27 member states, sourced from the official EU TEDB SMERetrievalService. Data includes the main national exemption threshold plus optional cash-accounting, flat-rate scheme, reduced-supply-of-services, and non-established-business thresholds where published by TEDB.

Amounts are in whole currency units. For eurozone countries the nationalCurrency is EUR and NAC amounts mirror EUR. For non-eurozone countries (BG, CZ, DK, HU, PL, RO, SE) a separate NAC amount is provided in the national currency.

Country codes: TEDB uses EL for Greece (ISO 3166-1 uses GR).

Query Parameters

ParameterTypeRequiredDescription
countrystringNoISO 3166-1 alpha-2 filter (e.g. DE, EL for Greece). Returns all if omitted.
datestringNoYYYY-MM-DD. Returns the most recent threshold per key ≤ date. Defaults to today.
taxNamestringNoCase-insensitive exact match on TEDB tax name (e.g. VAT).

Example Requests

All thresholds as of today

curl https://api.vat-engine.app/v1/vat/sme-thresholds

Single country

curl "https://api.vat-engine.app/v1/vat/sme-thresholds?country=DE"

Country + specific date

curl "https://api.vat-engine.app/v1/vat/sme-thresholds?country=PL&date=2026-01-01"

Response

{
  "thresholds": [
    {
      "country": "PL",
      "situationOn": "2026-01-01",
      "taxName": "VAT",
      "thresholdType": "Regular scheme / specific scheme",
      "nationalCurrency": "PLN",
      "cashAccountingEur": 5000.25,
      "cashAccountingNac": 21000.75,
      "flatRateSchemeEur": 6000.5,
      "flatRateSchemeNac": 25000.25,
      "reducedSupplyOfServicesEur": 7000.75,
      "reducedSupplyOfServicesNac": 29000.5,
      "nonEstablishedBusinessEur": 8000.25,
      "nonEstablishedBusinessNac": 33000.75,
      "exemption": {
        "thresholdEur": 22000.5,
        "thresholdNac": 240000.75,
        "oneNationalAnnualThreshold": true,
        "nationalAnnualThreshold": false,
        "exclusionArticle288QuarantinePeriod": "6 months",
        "transitionalPeriodExceeded": "sectoral",
        "voluntaryCessationArticle290": true,
        "article290QuarantinePeriod": "12 months",
        "sectorals": []
      }
    }
  ]
}

Top-Level Threshold Fields

FieldTypeDescription
countrystringISO alpha-2 country code (TEDB uses EL for Greece)
situationOnstringYYYY-MM-DD effective date of this threshold record
taxNamestringTEDB tax name (e.g. VAT, VAT - Canary Islands)
thresholdTypestringTEDB threshold type (e.g. Regular scheme, Specific scheme)
nationalCurrencystringISO 4217 currency code. EUR for eurozone; national currency for others
cashAccountingEurnumber | nullCash-accounting annual threshold in EUR
cashAccountingNacnumber | nullCash-accounting annual threshold in national currency
flatRateSchemeEurnumber | nullFlat-rate scheme threshold in EUR
flatRateSchemeNacnumber | nullFlat-rate scheme threshold in national currency
reducedSupplyOfServicesEurnumber | nullReduced supply-of-services threshold in EUR
reducedSupplyOfServicesNacnumber | nullReduced supply-of-services threshold in national currency
nonEstablishedBusinessEurnumber | nullNon-established-business threshold in EUR
nonEstablishedBusinessNacnumber | nullNon-established-business threshold in national currency
exemptionobjectMain national exemption details — see below

Exemption Object

FieldTypeDescription
thresholdEurnumber | nullMain exemption threshold in EUR
thresholdNacnumber | nullMain exemption threshold in national currency
oneNationalAnnualThresholdboolean | nullSingle national annual threshold applies
nationalAnnualThresholdboolean | nullNational annual threshold flag
exclusionArticle288QuarantinePeriodstring | nullArticle 288 quarantine period description
transitionalPeriodExceededstring | nullTransitional period exceeded flag (national / sectoral)
voluntaryCessationArticle290boolean | nullArticle 290 voluntary cessation quarantine
article290QuarantinePeriodstring | nullArticle 290 quarantine period description
sectoralsarraySector-specific breakdowns — see below. Empty array if none provided.

Sectoral Threshold Object

Some countries publish sector-specific exemption levels (e.g. France for regulated professions, Denmark for publishers). Each entry in the sectorals array has:

FieldTypeDescription
sectorstring | nullSector label (e.g. Authors and similar professions)
exemptionThresholdEurnumber | nullSector exemption in EUR
exemptionThresholdNacnumber | nullSector exemption in national currency
commentstring | nullOptional TEDB note
cnCodesarrayCN product codes scoped to this sectoral threshold
cpaCodesarrayCPA product codes scoped to this sectoral threshold

Each cnCodes / cpaCodes item has value (code string) and description (human-readable label).

Notes

  • A null monetary amount means TEDB does not publish that value for the country/scheme combination — it is not the same as a zero threshold.
  • Spain and the Canary Islands are returned as two separate rows (taxName: "VAT" and taxName: "VAT - Canary Islands") because TEDB models them separately.
  • TEDB may not publish a threshold for every country. Countries without a general exemption threshold currently appear with exemption.thresholdEur: null.

Error Responses

StatusError codeDescription
400invalid_countryCountry code is not 2 letters
400invalid_dateDate is not in YYYY-MM-DD format
500internal_errorServer error