# EU VAT number validation

Source: https://veriport.io/docs/vat-validation (published 2026-10-24)

Normalises the country code and the number (spaces, punctuation, a repeated prefix, GR → EL), checks the national structure and check digit, then asks VIES (REST first, SOAP fallback). Returns the registered name and address where the member state publishes them, and a consultation number when `requester` is supplied (prepaid credits or the monthly plan). When VIES or the member state is down, the last answer we hold for that number is returned with `source.kind = "cache"` and `source.stale = true`; it is never presented as live. A structurally impossible number answers `valid: false` without calling VIES and is not counted.

## GET https://veriport.io/api/v1/vat/validate

Normalises the country code and the number (spaces, punctuation, a repeated prefix, GR → EL), checks the national structure and check digit, then asks VIES (REST first, SOAP fallback). Returns the registered name and address where the member state publishes them, and a consultation number when `requester` is supplied (prepaid credits or the monthly plan). When VIES or the member state is down, the last answer we hold for that number is returned with `source.kind = "cache"` and `source.stale = true`; it is never presented as live. A structurally impossible number answers `valid: false` without calling VIES and is not counted.

Tiers: anonymous, free, credits, plan. Cost: 1 call when VIES or the cache answered; 0 when the structure already fails or when a 5xx is returned.

- `country` (query): ISO 3166-1 alpha-2 of the member state; Greece is `EL` (GR accepted), Northern Ireland `XI`. May be omitted when `number` carries the prefix.
- `number` (query, required): The VAT number, with or without the country prefix, spaces or punctuation.
- `requester` (query): Your own EU VAT number (with prefix). VIES then issues a consultation number, the evidence a tax audit accepts. Prepaid credits or the monthly plan.
- `record` (query): `true` keeps this validation as a record on your account for 10 years (or until you delete it), and the answer gains `record`. A structure-only answer is not kept (`record` is null), since VIES was not consulted. A record is our dated copy of the answer; only the consultation number is issued by VIES. Prepaid credits or the monthly plan.

Example 200:

```json
{
  "valid": true,
  "countryCode": "DE",
  "vatNumber": "136695976",
  "full": "DE136695976",
  "structure": {
    "valid": true,
    "checksum": "passed",
    "expected": "9 digits"
  },
  "name": null,
  "address": null,
  "requestDate": "2026-10-24",
  "consultationNumber": null,
  "source": {
    "kind": "live",
    "checkedAt": "2026-10-24T09:14:03Z",
    "cacheAgeSeconds": 0,
    "stale": false
  },
  "upstream": {
    "service": "vies",
    "transport": "rest",
    "status": "ok",
    "memberStateAvailable": true
  },
  "tableVersion": null
}
```

## POST https://veriport.io/api/v1/vat/validate/bulk

Monthly plan only. Each item is processed as `GET /vat/validate` would, with a bounded concurrency towards VIES; items are answered in order. Each item counts one call. Up to 100 items.

Tiers: plan. Cost: 1 call per item.

## GET https://veriport.io/api/v1/vat/validations

The records made with `record=true`, newest first, on every key of the account (a rotated key keeps them). Open to every key, a lapsed plan included, and not counted. `format=csv` returns the same page as CSV with the next cursor in `X-Next-Cursor`.

Tiers: free, credits, plan. Cost: free.

- `number` (query): Only this VAT number, with or without its prefix (`country` supplies a missing prefix).
- `country` (query): Two-letter prefix when `number` has none.
- `from` (query): Records made at or after this ISO 8601 date or instant.
- `to` (query): Records made before this ISO 8601 date or instant.
- `limit` (query): Records per page.
- `cursor` (query): The `nextCursor` of the previous page.
- `format` (query): The answer format.

## GET https://veriport.io/api/v1/vat/validations/{id}

One record of your account, as it was kept. Open to every key and not counted.

Tiers: free, credits, plan. Cost: free.

- `id` (path, required): The record id (`vr_…`).

## DELETE https://veriport.io/api/v1/vat/validations/{id}

Deletes the record for good. Records cannot be edited, only deleted. Open to every key and not counted.

Tiers: free, credits, plan. Cost: free.

- `id` (path, required): The record id (`vr_…`).

## Read next

- [Product page: the VAT validation API](https://veriport.io/vat-validation-api)
- [Free VAT number check](https://veriport.io/tools/vat-number-check)
- [VAT number formats by country](https://veriport.io/vat-number-format)
