Validate a VAT number
Validate a VAT number against the appropriate upstream service (VIES, HMRC, BFS, or BRREG) and return the validity status, company details, and VAT metadata for the country.
Input is normalized automatically — spaces, dots, and casing are handled for you ("de 811.569.869" → "DE811569869").
Results are cached for 30 days. Cached responses include `meta.cached: true`; `data.verified_at` always reflects the original registry fetch time. Pass `cache=false` to bypass the cache and force a fresh lookup from the upstream service.
30 requests per hour per IP · demo key used automatically
Authorization: Bearer <api_key> header. Use a vtv_live_* key in production or a vtv_test_* key for deterministic magic-number responses.Query parameters
vat_numberrequiredstring · min 4Full VAT number with country prefix. Spaces, dots, and casing are handled automatically ("de 811.569.869" → "DE811569869"). Norwegian registrations use the "NO" prefix even though the underlying 9-digit number has no prefix in Brønnøysund.
DE811569869cacheenumSet to `false` to bypass the 30-day cache and force a fresh upstream lookup. Defaults to `true`.
truerequester_vat_numberstring · min 4Your own VAT number. When provided, the response includes a `data.verify_id` — the official consultation identifier emitted by VIES (or HMRC, when supported). These calls bypass the cache since the verify_id is specific to each consultation.
DE100000001Response
Validation result
datarequiredobjectvalidrequiredbooleanWhether the VAT number is registered and active according to the upstream registry.
truevat_numberrequiredstringThe normalized VAT number — uppercased, stripped of spaces/dots/dashes, with country prefix.
IE6388047VcountryrequiredobjectCountry derived from the VAT prefix, with VAT metadata useful for invoicing and client-side validation.
coderequiredstringTwo-letter ISO-3166 country code extracted from the VAT prefix.
IEnamerequiredstringFull English country name.
Irelandvatrequiredobject | nullVAT metadata for this country (rates, currency, number format). Null when we have no data for the country (currently XI, LI).
namerequiredstringOfficial local name of the tax (e.g. "Arvonlisävero", "Mehrwertsteuer", "TVA").
Value Added TaxabbreviationrequiredstringShort abbreviation used in invoices and official docs (e.g. "VAT", "MwSt", "TVA", "IVA").
VATcurrencyrequiredstringISO 4217 currency code used when invoicing in this country.
EURstandard_raterequirednumberStandard VAT rate applied to most goods and services, in percent.
23reduced_ratesrequiredarray<number>Reduced VAT rates applied to specific categories (food, medicine, books, etc). Empty array when the country has no reduced rate.
[9,13.5]super_reduced_raterequirednumber | nullSuper-reduced rate for essential items, where applicable (currently CY, ES, FR, IT, LU, PT). Null for countries that do not use one.
4.8parking_raterequirednumber | nullTransitional "parking" rate for items that previously qualified for a reduced rate. Null for most countries.
13.5number_formatrequiredstringHuman-readable description of the VAT number format for this country.
IE + 7 digits + 1-2 lettersnumber_patternrequiredstringRegex pattern for client-side format validation before hitting the API. Matches the normalized (uppercased, stripped) VAT string.
^IE\d{7}[A-Z]{1,2}$updated_atrequiredstringISO date when the VAT metadata for this country was last reviewed.
2026-04-01companyrequiredobject | nullCompany details returned by the upstream registry. Null when `valid: false` or when the registry does not publish company info (e.g. Germany).
namestring | nullRegistered legal name of the company as reported by the upstream registry. Null when the registry does not publish a name (Germany, Spain, Austria suppress disclosure under national privacy policy via VIES).
GOOGLE IRELAND LIMITEDaddressstring | nullRegistered address of the company. Null when the registry does not publish an address.
3RD FLOOR GORDON HOUSE, BARROW STREET, DUBLIN 4verify_idrequiredstring | nullOfficial verification identifier emitted by the upstream registry (VIES consultation number / HMRC check reference). Populated when `requester_vat_number` is provided and the source supports it; null otherwise. Tax auditors accept this as proof of a valid query.
WAPIAAAAA1BBB2verified_atrequiredstringISO 8601 timestamp of when the VAT number was fetched from the registry. For cached responses this is the original fetch time, not the current request time.
2026-04-14T15:42:03.451Zmetarequiredobjectrequest_idrequiredstringUUID v7 identifying this specific HTTP request. Include it in any support ticket so we can trace the call in our logs.
0190f8ea-a5b2-7000-a123-000000000000latency_msrequiredintegerTotal server-side processing time in milliseconds, from request received to response sent.
694cachedrequiredbooleanWhether this response was served from the 30-day cache instead of a fresh registry fetch. Cached hits do not count toward your monthly quota.
falsesourcerequiredstringWhich official registry produced this result. `vies` for EU-27 + XI, `hmrc` for GB, `bfs` for CH/LI, `brreg` for NO.
"vies""hmrc""bfs""brreg""bzst"source_statusrequiredstringUpstream data source reliability. `live` = confirmed fresh registry response. `cached` = served from the 30-day cache. `degraded` = result may be unreliable (reserved for future expansion).
"live""cached""degraded"Error responses
import { Vatverify } from '@vatverify/node';
const client = new Vatverify();
const result = await client.validate();{
"data": {
"valid": true,
"vat_number": "IE6388047V",
"country": {
"code": "IE",
"name": "Ireland",
"vat": {
"name": "Value Added Tax",
"abbreviation": "VAT",
"currency": "EUR",
"standard_rate": 23,
"reduced_rates": [
9,
13.5
],
"super_reduced_rate": 4.8,
"parking_rate": 13.5,
"number_format": "IE + 7 digits + 1-2 letters",
"number_pattern": "^IE\\d{7}[A-Z]{1,2}$",
"updated_at": "2026-04-01"
}
},
"company": {
"name": "GOOGLE IRELAND LIMITED",
"address": "3RD FLOOR GORDON HOUSE, BARROW STREET, DUBLIN 4"
},
"verify_id": "WAPIAAAAA1BBB2",
"verified_at": "2026-04-14T15:42:03.451Z"
},
"meta": {
"request_id": "0190f8ea-a5b2-7000-a123-000000000000",
"latency_ms": 694,
"cached": false,
"source": "vies",
"source_status": "live"
}
}Validate up to 50 VAT numbers in one request
Validate up to 50 VAT numbers in a single request. Each item is normalized and routed to the correct registry (VIES/HMRC/BFS/BRREG) independently. Per-item successes and failures coexist in the 200 response under `data.results`. Cache hits do not count against your monthly quota. Pass `requester_vat_number` to obtain a per-item `verify_id` (VIES consultation number) for each EU result — useful for tax-audit trails. Calls with a requester always bypass the cache. Pro plan or Business plan required.
Register a webhook endpoint
Registers an HTTPS URL to receive signed webhook events. The `secret` is returned once — store it securely. Requires Pro or Business plan.