vatverify home
/v1/validate

One endpoint.
Thirty-two countries.

Validate any VAT number against the relevant official registry. Returns company name, address, VAT rates, and a consultation ID auditors accept as proof.

Request

One call, one parameter.

GET /v1/validate with a bearer token. The API handles normalisation, retries, and routing to the correct registry.

cURL
curl "https://api.vatverify.dev/v1/validate?vat_number=IE6388047V" \  -H "Authorization: Bearer $VATVERIFY_API_KEY"
@vatverify/node
import { Vatverify } from "@vatverify/node"const vatverify = new Vatverify()const { data, meta } = await vatverify.validate({  vat_number: "IE6388047V",})data.valid              // truedata.company?.name      // "GOOGLE IRELAND LIMITED"data.country.vat?.standard_rate  // 23meta.source             // "vies"meta.cached             // false

See the full endpoint schema: GET /v1/validatePOST /v1/validate/batch.

Parametersquery string
vat_numberstringrequired

Full VAT number with country prefix. Spaces, dots, and casing normalised automatically.

cachebooleanoptional

Defaults to true. Pass false to bypass the 30-day cache and force a fresh registry lookup.

requester_vat_numberstringoptional

Your own VAT number. When present, VIES returns a consultation ID under verify_id that tax auditors accept as proof of verification.

Response

Same shape, every registry.

Business payload under data, operational metadata under meta. VIES, HMRC, BFS, and Brreg all normalised to this envelope.

200 OK 路 application/json
{
  "data": {
    "valid": true,
    "vat_number": "IE6388047V",
    "country": {
      "code": "IE",
      "name": "Ireland",
      "vat": {
        "standard_rate": 23,
        "reduced_rates": [9, 13.5],
        "currency": "EUR",
        "number_format": "IE + 7 digits + 1-2 letters"
      }
    },
    "company": {
      "name": "GOOGLE IRELAND LIMITED",
      "address": "3RD FLOOR GORDON HOUSE, BARROW STREET, DUBLIN 4"
    },
    "verify_id": null,
    "verified_at": "2026-04-21T09:14:29.451Z"
  },
  "meta": {
    "request_id": "0190f8ea-a5b2-7000-a123-000000000000",
    "latency_ms": 694,
    "cached": false,
    "source": "vies",
    "source_status": "live"
  }
}
data.country.vat

Standard rate, reduced rates, currency, and number-format regex. Ready for invoicing.

data.verify_id

VIES consultation ID when you pass requester_vat_number. Tax auditors accept it as proof.

meta.source

Which registry answered: vies, hmrc, bfs, or brreg.

Batch

Up to 50 at once. One roundtrip.

POST /v1/validate/batch fans out per country to the correct registry in parallel. Results come back in request order.

@vatverify/node
const { data, meta } = await vatverify.validateBatch({  vat_numbers: [    "IE6388047V",    "DE811569869",    "FR44732829320",    "GB727255821",  ],})data.summary    // { total: 4, successful: 4, failed: 0 }data.results    // ordered same as input; each { ok, data? | error? }
Coverage

Every country, one shape.

Coverage maps exactly to government registries. No scrapers, no proxies, no intermediaries.

32 countries supportedEU-27 + XI + GB + CH + LI + NO
AustriaVIES
AT20%
BelgiumVIES
BE21%
BulgariaVIES
BG20%
CyprusVIES
CY19%
Czech RepublicVIES
CZ21%
GermanyVIES
DE19%
DenmarkVIES
DK25%
EstoniaVIES
EE22%
SpainVIES
ES21%
FinlandVIES
FI25.5%
FranceVIES
FR20%
GreeceVIES
EL24%
CroatiaVIES
HR25%
HungaryVIES
HU27%
IrelandVIES
IE23%
ItalyVIES
IT22%
LithuaniaVIES
LT21%
LuxembourgVIES
LU17%
LatviaVIES
LV21%
MaltaVIES
MT18%
NetherlandsVIES
NL21%
PolandVIES
PL23%
PortugalVIES
PT23%
RomaniaVIES
RO19%
SwedenVIES
SE25%
SloveniaVIES
SI22%
SlovakiaVIES
SK23%
Northern IrelandVIES
XI20%
United KingdomHMRC
GB20%
SwitzerlandBFS UID
CH8.1%
LiechtensteinBFS UID
LI8.1%
NorwayBr酶nn酶ysund
NO25%
VIES 路 28HMRC 路 1BFS UID 路 2Br酶nn酶ysund 路 1Standard VAT rates 路 2026

See the full reference.

Endpoint schema, error codes, SDK examples, and every edge case documented.