Saltar para o conteúdo principal
IVA na UE

REST API · No auth required · Free

EU VAT validation API

Validate EU VAT numbers programmatically against the official VIES database. Free to use, no API key and CORS enabled.

No API key or account needed
Free
Validate up to 10 numbers at once
10 per batch
Every EU member state
27 countries

Base URL

https://vat.businesspress.io

Every endpoint is relative to this base URL. Use HTTPS in production.

Endpoints

POST

/api/vat/validation/validate

Validate a single EU VAT number in real time against the VIES database. Results are cached for 7 days.

Request body

Parameter Type Required Description
country_code string Required 2-letter ISO code, for example LT or DE. Greece uses EL.
vat_number string Required The VAT number without the country prefix: 100019070512, not LT100019070512.
company_name string Optional Expected company name for fuzzy-match verification.
address string Optional Expected address for additional verification.

Example request

curl -X POST https://vat.businesspress.io/api/vat/validation/validate \
  -H "Content-Type: application/json" \
  -d '{"country_code": "LT", "vat_number": "100019070512"}'

Example response

{
  "success": true,
  "data": {
    "valid": true,
    "country_code": "LT",
    "vat_number": "100019070512",
    "name": "UAB Company Name",
    "address": "Vilnius, Lithuania",
    "source": "vies",
    "request_identifier": "..."
  }
}
POST

/api/vat/validation/batch

Up to 10 numbers

Validate up to 10 VAT numbers in one request. Each number is checked against VIES independently.

Example request

{
  "validations": [
    {
      "country_code": "LT",
      "vat_number": "100019070512"
    },
    {
      "country_code": "DE",
      "vat_number": "129274202"
    }
  ]
}

Example response

{
  "success": true,
  "total": 2,
  "data": [
    {
      "valid": true,
      "country_code": "LT",
      "vat_number": "100019070512",
      "name": "UAB ...",
      ...
    },
    { ... }
  ]
}
GET

/api/vat/validation/health

Check the operational status of the VAT validation service.

{
  "status": "operational",
  "service": "VAT VIES Validation API",
  "timestamp": "2026-04-07T10:00:00+00:00"
}

Interactive playground

The batch demo validates the number above together with a fixed German example, so you can see the multi-result format.

POST /api/vat/validation/validate


                            

// The response appears here after you send the request.

Sending the request to VIES…

200 OK


                                

Error


                                

Response fields

Field Type Description
success boolean Always true for 200 responses.
data.valid boolean Whether the VAT number is currently active in VIES.
data.country_code string The 2-letter country code, echoed back.
data.vat_number string The VAT number as validated, without the prefix.
data.name string|null Company name returned by VIES. May be N/A when the member state withholds it.
data.address string|null Registered address. Some member states withhold it.
data.source string vies for a live lookup, or cache and database for a cached result.
data.request_identifier string|null VIES consultation reference number for your audit trail.

Error responses

HTTP status When
422 Validation failed: country_code or vat_number is missing or invalid. The errors field explains why.
429 Too many requests: the fair-use limit was reached. Retry after a short pause.
503 The VIES system is temporarily unavailable. Check the VIES status page.

Code examples

cURL

curl -X POST https://vat.businesspress.io/api/vat/validation/validate \
  -H "Content-Type: application/json" \
  -d '{"country_code":"LT","vat_number":"100019070512"}'

JavaScript

const response = await fetch('https://vat.businesspress.io/api/vat/validation/validate', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    country_code: 'LT',
    vat_number: '100019070512'
  })
});
const data = await response.json();
console.log(data.data.valid); // true

PHP

$response = Http::post('https://vat.businesspress.io/api/vat/validation/validate', [
    'country_code' => 'LT',
    'vat_number'  => '100019070512',
]);

$data = $response->json('data');
$isValid = $data['valid']; // true

Python

import requests

res = requests.post(
    "https://vat.businesspress.io/api/vat/validation/validate",
    json={"country_code": "LT", "vat_number": "100019070512"}
)
data = res.json()["data"]
print(data["valid"])  # True