LIVE EU VAT number validation against VIES, the European Commission's official service — n
LIVE EU VAT number validation against VIES, the European Commission's official service — not a format check: the number is verified in the member state's actual register, returning the registered trader name and address where published. Covers all 27 member states plus Northern Ireland (XI). Essential before B2B invoicing with reverse charge.
20000 (raw units)
price
1
calls / 30d
1
unique payers
2026-09-06
updated
Provider
agentbit.app · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x4395C7e383b7e05665aad7f36ed77c01923Dd965",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "20000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"description": "Live EU VAT validation for invoicing, onboarding and compliance workflows. The number is checked against VIES — the European Commission's official cross-border VAT information exchange system — which queries the member state's real register: a valid answer means the trader is registered for intra-EU transactions RIGHT NOW, and where the member state publishes them you also get the registered trader name and address to match against what your counterparty claimed. Accepts the number in any common shape ('RO12345678', 'ro 123-456.78', or country and number as separate fields); Greece's EL prefix and Northern Ireland's XI are handled. Member-state outages (a VIES reality) are reported as retryable errors, never as false negatives, and an invalid answer explains that some states have domestic-only registrations that VIES does not cover. Reverse-charge B2B invoicing inside the EU requires exactly this check — agents issuing invoices should run it before every new counterparty.",
"errors": [
{
"code": "PAYMENT_REQUIRED",
"description": "Missing or invalid payment — retry with a valid PAYMENT-SIGNATURE header",
"retryable": true,
"status": 402
},
{
"code": "VALIDATION_ERROR",
"description": "Request body does not match the input schema",
"retryable": false,
"status": 422
},
{
"code": "RATE_LIMITED",
"description": "Too many requests from this client",
"retryable": true,
"status": 429
},
{
"code": "UPSTREAM_TIMEOUT",
"description": "Upstream data source unavailable — safe to retry",
"retryable": true,
"status": 502
}
],
"input": {
"body": {
"vat_number": "RO14399840"
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"networks": [
"eip155:8453"
],
"output": {
"example": {
"checked_at": "2026-09-06T12:00:00Z",
"country": "RO",
"full_vat_number": "RO14399840",
"note": "Number is registered for cross-border EU transactions.",
"source": "VIES (European Commission, official)",
"trader_address": "STR. EXEMPLU 1, CLUJ-NAPOCA",
"trader_name": "EXAMPLE SRL",
"valid": true,
"vat_number": "14399840"
},
"type": "json"
},
"pricing": {
"amount": 0.02,
"currency": "USDC",
"firstCallFree": true,
"model": "per-call",
"quoteHint": "Send your wallet address in an X-BUYER-WALLET header on the unpaid request to receive your personalized (volume-discounted) quote.",
"volumeDiscounts": [
{
"minCalls30d": 100,
"percent": 10
},
{
"minCalls30d": 1000,
"percent": 20
}
]
},
"reliability": {
"measuredAt": "2026-09-06T13:16:41+00:00",
"p50LatencyMs": 406,
"p95LatencyMs": 406,
"sampleSize": 1,
"successRatePercent": 100,
"windowDays": 30
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"description": {
"type": "string"
},
"errors": {
"items": {
"properties": {
"code": {
"type": "string"
},
"description": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"status": {
"type": "integer"
}
},
"required": [
"status",
"code"
],
"type": "object"
},
"type": "array"
},
"input": {
"additionalProperties": false,
"properties": {
"body": {
"description": "EU VAT Validation input. LIVE EU VAT number validation against VIES, the European Commission's official service — not a format check: the number is verified in the member state's actual register, returning the registered trader name and address where published. Covers all 27 member states plus Northern Ireland (XI). Essential before B2B invoicing with reverse charge.",
"properties": {
"country": {
"description": "Two-letter member state code if not included in vat_number (EL for Greece, XI for Northern Ireland)",
"type": "string"
},
"vat_number": {
"description": "VAT number, with or without the country prefix, e.g. RO12345678",
"type": "string"
}
},
"required": [
"vat_number"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"headers": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"queryParams": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"networks": {
"items": {
"type": "string"
},
"type": "array"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"pricing": {
"properties": {
"amount": {
"type": [
"number",
"null"
]
},
"currency": {
"type": "string"
},
"firstCallFree": {
"type": "boolean"
},
"maxAmount": {
"type": "number"
},
"model": {
"type": "string"
},
"quoteHint": {
"type": "string"
},
"volumeDiscounts": {
"items": {
"properties": {
"minCalls30d": {
"type": "integer"
},
"percent": {
"type": "number"
}
},
"required": [
"minCalls30d",
"percent"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"reliability": {
"properties": {
"measuredAt": {
"type": "string"
},
"p50LatencyMs": {
"type": [
"integer",
"null"
]
},
"p95LatencyMs": {
"type": [
"integer",
"null"
]
},
"sampleSize": {
"type": "integer"
},
"successRatePercent": {
"type": "number"
},
"windowDays": {
"type": "integer"
}
},
"required": [
"successRatePercent",
"sampleSize",
"windowDays"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://agentbit.app/v1/compliance/vat" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://agentbit.app/v1/compliance/vat");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://agentbit.app/v1/compliance/vat")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/10990.json, and this resource appears in /discovery/resources and /discovery/search.