← Docs

VAT API

Checksum a VAT number. Deep asks the live registry.

Checksum a VAT number before you store it. You get the normalized number and the country. That counts as a normal request. A string that is not a VAT number answers valid: false as a 200, never a 404.

Deep asks the live EU registry for registered, legal name, and address. ?from= your own VAT number to get a consultation identifier for your audit file. Those calls use your plan's monthly VAT lookup allowance. Free includes 100. Each deep request on a checksum-valid EU number uses one lookup. UK GB numbers parse on core. Live HMRC is a follow-up, so GB deep ships registered null and does not use a unit.

For a standard national reference rate, use a country lookup. GET /country/de?deep=true adds deep.tax and deep.tax_rate on paid plans. State and US ZIP lookups use the same fields at their own geographic scopes. See Tax.

Validate

GET
api.parseapi.com/vat/{number}
Format and checksum. Deep adds registered, name, and address
Explore
Parameters 4
numberstring · path · required

VAT number, with or without the country prefix

countrystring · query · optional

ISO 3166-1 alpha-2 when the number has no prefix

fromstring · query · optional

Your own VAT number. Returns a consultation identifier for your audit file

deepboolean · query · optional

When true, include optional detail in deep. Access depends on the endpoint: pooled detail, an included paid-plan profile, or a metered check. Core values stay unchanged.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.vat("DE136695976");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "vat": "DE136695976",
  "valid": true,
  "country": "DE"
}

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.vat("not-a-vat");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "vat": null,
  "valid": false,
  "country": null
}

Response fields

vat
Normalized number with country prefix, or null if invalid
valid
Format and checksum match the country
country
ISO 3166-1 alpha-2. GR not EL. XI numbers ship GB
from
Your requester VAT when ?from= parsed, else omitted

Deep registry

Live VIES check. Counts toward your plan's monthly VAT lookup allowance. See Plans. Registry downtime is HTTP 200 with registered null, never registered false.

Deep examples run with your own key. Check this API’s included units and pricing before running.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.vat("DE136695976", { deep: true });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "vat": "DE136695976",
  "valid": true,
  "country": "DE",
  "deep": {
    "registered": false,
    "name": null,
    "address": null,
    "consultation": null,
    "consulted_at": "2026-08-31T04:13:10.436Z"
  }
}

Deep fields

deep.registered
On the live national registry. Null when the registry did not complete
deep.name
Registered legal name, or null
deep.address
street, city, postal, country. null when the registry sent none
deep.consultation
Audit identifier when ?from= is a valid VAT, else null
deep.consulted_at
Registry-provided check time, or null when unavailable

Questions? Email