Validation

Validate one VAT number without an API key

Keyless endpoint for agents and quick checks, rate-limited per IP. Every response carries an upgrade object pointing at a free API key. When the day's shared registry allowance is spent it answers status: "format_only" with format_valid, rather than failing.

get/ai/validate/{country_code}/{vat_number}

Request

  • Base URL: https://www.taxid.dev/api
  • URL: https://www.taxid.dev/api/ai/validate/{country_code}/{vat_number}
  • Auth: none required

Path parameters

country_code'AT' | 'BE' | 'BG' | 'CY' | 'CZ' | 'DE' | 'DK' | 'EE' | 'EL' | 'ES' | 'FI' | 'FR' | 'HR' | 'HU' | 'IE' | 'IT' | 'LT' | 'LU' | 'LV' | 'MT' | 'NL' | 'PL' | 'PT' | 'RO' | 'SE' | 'SI' | 'SK' | 'GB' | 'AU' | 'NO' | 'CH' | 'CA' | 'IN' | 'SG' | 'NZ' | 'ZA' | 'AE' | 'MX' | 'JP' | 'IS' | 'MY' | 'KR' | 'HK' | 'BR' | 'TR' | 'TH' | 'ID' required

ISO 3166-1 alpha-2 code. Case-insensitive.

vat_numberstring required

Response

A validation result, or a format-only result under load.

validboolean required

True only when the registry recognises the number as active.

status'active' | 'invalid' | 'service_unavailable' required

Branch on this, not on valid. service_unavailable means the registry did not answer — it is not a verdict on the number, and treating it as one rejects real customers during someone else's outage.

vat_numberstring required

The number as validated: uppercase, no spaces, no country prefix.

country_codestring required
company_namestring nullable

Null where the member state withholds it — Germany and Spain routinely do. A null name alongside valid:true is a complete answer, not a partial one.

company_addressstring nullable
request_datestring required

When the registry produced the answer.

sourcestring
vat_registeredboolean

Present only for registries that report it separately from validity.

cachedboolean

Served from cache (24h TTL) rather than the registry.

request_idstring
format_validboolean
noticestring

Example response

{
  "source": "VIES",
  "request_id": "req_01j5k8n2p9q4r7s3t6v8"
}

Changes

No recorded changes to this operation across all 1 revision of this API.