Skip to main content
GET
/
v1
/
validate
Validate VAT Number
curl --request GET \
  --url https://api.example.com/v1/validate

Validate VAT Number

GET /v1/validate Validate a VAT number against VIES (EU) or HMRC (UK) and return the validity status, company details, and an optional consultation number.

Authentication

Query parameters

ParameterTypeRequiredDescription
vat_numberstringYesThe VAT number to validate (e.g., NL123456789B01, GB123456789)
requester_vat_numberstringNoYour own VAT number, to receive a consultation number from VIES

Examples

curl -H "Authorization: Bearer vtly_live_your_api_key" \
  "https://api.vatly.dev/v1/validate?vat_number=NL123456789B01"

With requester VAT number

To receive a consultation number (Business and Scale tiers), include your own VAT number:
curl -H "Authorization: Bearer vtly_live_your_api_key" \
  "https://api.vatly.dev/v1/validate?vat_number=NL123456789B01&requester_vat_number=DE987654321"

Response examples

Valid VAT number

{
  "data": {
    "valid": true,
    "vat_number": "NL123456789B01",
    "country_code": "NL",
    "company": {
      "name": "Acme B.V.",
      "address": "Keizersgracht 123, Amsterdam"
    },
    "consultation_number": "WAPIAAAAA1BBB2",
    "requested_at": "2026-03-06T12:00:00Z"
  },
  "meta": {
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "cached": false
  }
}

Invalid VAT number

{
  "data": {
    "valid": false,
    "vat_number": "NL000000000B00",
    "country_code": "NL",
    "company": null,
    "consultation_number": null,
    "requested_at": "2026-03-06T12:00:00Z"
  },
  "meta": {
    "request_id": "550e8400-e29b-41d4-a716-446655440001",
    "cached": false
  }
}

Cached result

{
  "data": {
    "valid": true,
    "vat_number": "NL123456789B01",
    "country_code": "NL",
    "company": {
      "name": "Acme B.V.",
      "address": "Keizersgracht 123, Amsterdam"
    },
    "requested_at": "2026-03-06T10:00:00Z"
  },
  "meta": {
    "request_id": "550e8400-e29b-41d4-a716-446655440002",
    "cached": true,
    "cached_at": "2026-03-06T10:00:00Z"
  }
}

Test mode response

When using a vtly_test_ key, responses include meta.mode: "test" and use magic VAT numbers for predictable results:
{
  "data": {
    "valid": true,
    "vat_number": "DE111111111",
    "country_code": "DE",
    "company": {
      "name": "Test GmbH",
      "address": "Musterstrasse 1, Berlin"
    },
    "requested_at": "2026-03-07T12:00:00Z"
  },
  "meta": {
    "request_id": "550e8400-e29b-41d4-a716-446655440003",
    "cached": false,
    "mode": "test"
  }
}

Response headers

HeaderDescription
X-Request-IdUnique request identifier (echoes client-provided value if sent)
X-RateLimit-LimitTotal requests allowed this period
X-RateLimit-RemainingRequests remaining this period
X-RateLimit-ResetWhen the quota resets (ISO 8601)

Possible errors

Error CodeStatusWhen
missing_parameter400vat_number query parameter is missing
invalid_vat_format422VAT number format unrecognized or unsupported country
unauthorized401Invalid or missing API key
rate_limit_exceeded429Monthly quota exhausted
upstream_error503HMRC returned an error
upstream_unavailable503VIES or HMRC unreachable