{
  "openapi": "3.1.0",
  "info": {
    "title": "VAT Validation API",
    "version": "1.0.0",
    "description": "Validate EU VAT numbers against VIES with registered name and address where disclosed.\n\nValidate EU VAT numbers against the official registry. Every check goes to VIES — the European Commission's VAT Information Exchange System, the same source national tax authorities use — and comes back as clean JSON: valid or not, plus the registered company name and address where the member state discloses them (Ireland does: IE6388047V → GOOGLE IRELAND LIMITED, 3rd Floor, Gordon House, Barrow Street; Germany validates but withholds identity — that's the German authority's policy, not a gap). Malformed numbers fail fast against the published per-country syntax rules WITHOUT burning a registry call, with the expected format and an example in the response. Accepts one combined string ('de 811-907-980' is cleaned up), or country + number separately; Greece's GR/EL quirk and Austria's ATU prefix are handled; GB numbers get a clear post-Brexit pointer to HMRC while Northern Ireland (XI) still works. A countries endpoint lists all 28 supported formats with LIVE per-member-state VIES availability, and registry answers are cached 15 minutes to absorb checkout bursts. B2B invoicing, reverse-charge logic, checkout tax exemption, supplier onboarding — the compliance check every EU-facing SaaS needs.",
    "contact": {
      "name": "Data and APIs",
      "url": "https://dataandapis.com/contact"
    },
    "termsOfService": "https://dataandapis.com/terms-of-service",
    "license": {
      "name": "Data and APIs Terms of Service",
      "url": "https://dataandapis.com/terms-of-service"
    },
    "x-logo": {
      "url": "https://dataandapis.com/images/vat.webp"
    }
  },
  "externalDocs": {
    "description": "Documentation, live tester and pricing",
    "url": "https://dataandapis.com/apis/vat"
  },
  "servers": [
    {
      "url": "https://api-vat.dataandapis.com"
    }
  ],
  "tags": [
    {
      "name": "Finance",
      "description": "VAT Validation API belongs to the Finance category of the Data and APIs catalog."
    }
  ],
  "paths": {
    "/v1/vat/format": {
      "get": {
        "operationId": "checkFormat",
        "summary": "Check Format",
        "description": "Check Format endpoint of the VAT Validation API. Costs 2 tokens per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/vat/check-format"
        },
        "parameters": [
          {
            "name": "vat",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "ATU13585627"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "country": "AT",
                  "country_name": "Austria",
                  "vat_number": "ATU13585627",
                  "syntax_valid": true,
                  "expected_format": "ATU + 8 digits",
                  "example": "ATU13585627"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v1/sources": {
      "get": {
        "operationId": "dataSources",
        "summary": "Data Sources",
        "description": "Data Sources endpoint of the VAT Validation API. Costs 2 tokens per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/vat/data-sources"
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "sources": [
                    {
                      "slug": "vies",
                      "name": "VIES — VAT Information Exchange System",
                      "publisher": "European Commission (DG TAXUD)",
                      "licence": "official EU validation service",
                      "source_url": "https://ec.europa.eu/taxation_customs/vies/",
                      "file_url": "https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number",
                      "cadence": "live registry lookups; results cached 15 minutes"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v1/vat/countries": {
      "get": {
        "operationId": "supportedCountries",
        "summary": "Supported Countries",
        "description": "Supported Countries endpoint of the VAT Validation API. Costs 2 tokens per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/vat/supported-countries"
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "countries": [
                    {
                      "country": "AT",
                      "name": "Austria",
                      "format": "ATU + 8 digits",
                      "example": "ATU13585627",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "BE",
                      "name": "Belgium",
                      "format": "BE + 10 digits (leading 0 or 1)",
                      "example": "BE0403019261",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "BG",
                      "name": "Bulgaria",
                      "format": "BG + 9 or 10 digits",
                      "example": "BG131071587",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "CY",
                      "name": "Cyprus",
                      "format": "CY + 8 digits + 1 letter",
                      "example": "CY10259033P",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "CZ",
                      "name": "Czechia",
                      "format": "CZ + 8, 9 or 10 digits",
                      "example": "CZ25123891",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "DE",
                      "name": "Germany",
                      "format": "DE + 9 digits",
                      "example": "DE811907980",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "DK",
                      "name": "Denmark",
                      "format": "DK + 8 digits",
                      "example": "DK13585628",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "EE",
                      "name": "Estonia",
                      "format": "EE + 9 digits",
                      "example": "EE100931558",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "EL",
                      "name": "Greece",
                      "format": "EL + 9 digits",
                      "example": "EL094014201",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "ES",
                      "name": "Spain",
                      "format": "ES + letter/digit + 7 digits + letter/digit",
                      "example": "ESA28015865",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "FI",
                      "name": "Finland",
                      "format": "FI + 8 digits",
                      "example": "FI09073468",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "FR",
                      "name": "France",
                      "format": "FR + 2 check chars + 9 digits",
                      "example": "FR40303265045",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "HR",
                      "name": "Croatia",
                      "format": "HR + 11 digits",
                      "example": "HR24595836665",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "HU",
                      "name": "Hungary",
                      "format": "HU + 8 digits",
                      "example": "HU12892312",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "IE",
                      "name": "Ireland",
                      "format": "IE + 7 digits + 1-2 letters (or old style)",
                      "example": "IE6388047V",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "IT",
                      "name": "Italy",
                      "format": "IT + 11 digits",
                      "example": "IT00743110157",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "LT",
                      "name": "Lithuania",
                      "format": "LT + 9 or 12 digits",
                      "example": "LT119511515",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "LU",
                      "name": "Luxembourg",
                      "format": "LU + 8 digits",
                      "example": "LU15027442",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "LV",
                      "name": "Latvia",
                      "format": "LV + 11 digits",
                      "example": "LV40003032949",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "MT",
                      "name": "Malta",
                      "format": "MT + 8 digits",
                      "example": "MT11679112",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "NL",
                      "name": "Netherlands",
                      "format": "NL + 12 chars (usually 9 digits + B + 2 digits)",
                      "example": "NL804115217B01",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "PL",
                      "name": "Poland",
                      "format": "PL + 10 digits",
                      "example": "PL5260250995",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "PT",
                      "name": "Portugal",
                      "format": "PT + 9 digits",
                      "example": "PT500278725",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "RO",
                      "name": "Romania",
                      "format": "RO + 2 to 10 digits",
                      "example": "RO11198699",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "SE",
                      "name": "Sweden",
                      "format": "SE + 10 digits + 01",
                      "example": "SE556036079301",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "SI",
                      "name": "Slovenia",
                      "format": "SI + 8 digits",
                      "example": "SI15012557",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "SK",
                      "name": "Slovakia",
                      "format": "SK + 10 digits",
                      "example": "SK2020317068",
                      "vies_availability": "Available"
                    },
                    {
                      "country": "XI",
                      "name": "Northern Ireland",
                      "format": "XI + 9 or 12 digits (goods only, post-Brexit)",
                      "example": "XI110305878",
                      "vies_availability": "Available"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/v1/vat/validate": {
      "get": {
        "operationId": "validateVatNumber",
        "summary": "Validate VAT Number",
        "description": "Validate VAT Number endpoint of the VAT Validation API. Costs 2 tokens per call.",
        "externalDocs": {
          "url": "https://dataandapis.com/apis/vat/validate-vat-number"
        },
        "parameters": [
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "IE"
          },
          {
            "name": "number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "6388047V"
          },
          {
            "name": "vat",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "IE6388047V"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "ok": true,
                  "country": "IE",
                  "country_name": "Ireland",
                  "vat_number": "IE6388047V",
                  "valid": true,
                  "syntax_valid": true,
                  "name": "GOOGLE IRELAND LIMITED",
                  "address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
                  "request_date": "2026-09-13T06:12:47.979Z",
                  "checked_against": "VIES (EU official registry)"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "402": {
            "description": "Subscription past due; the response carries a payment_url"
          },
          "429": {
            "description": "Monthly token allowance exhausted"
          }
        },
        "security": [
          {
            "ApiKey": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Key",
        "description": "Create a free key at https://dataandapis.com/sign-up. 500 tokens a month on the Free plan; this API costs 2 tokens per call."
      }
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ]
}