VAT validation via one API, with VIES and BZSt.
VAT ID validation through one REST API. Every validation result states which source answered and whether it came from the cache. BZSt qualified confirmations under §18e UStG on the Business plan. Free tier, no credit card.
Try it now
Here is what an API response looks like: an example, not a live call.
{
"valid": false,
"vat_id": "DE123456789",
"country_code": "DE",
"vat_number": "123456789",
"company_name": null,
"company_address": null,
"source": "vies",
"source_timestamp": "2026-09-14T09:00:00.000Z",
"cache": false,
"qualified_confirmation": null,
"request_id": "req_01JZ9X2Y3Z4A5B6C7D8E9F0G",
"requested_at": "2026-09-14T09:00:00.000Z"
} Request-dependent routing across VIES and BZSt.
Without an API key, live checks use VIES. For authenticated simple checks, a DE VAT ID or the requester_vat_id parameter selects BZSt first, with VIES fallback. Other authenticated simple checks use VIES. Qualified requests query BZSt. Where the request allows caching, a stored result may be returned. Completed validation results include source, cache, and source_timestamp. A simple or cached result is not qualified evidence. If the relevant sources are unavailable and no permitted cached result exists, the API returns SOURCE_UNAVAILABLE (HTTP 503).
Qualified confirmations under §18e UStG.
For a qualified confirmation, your system sends the company name and address, and the API returns the BZSt match results (name_match, street_match, zip_match, city_match) plus a receipt_id you can use to retrieve the record later. Currently part of the Business plan.
Built for developers and agents.
Structured JSON responses with explicit fields instead of prose. Alongside the REST API, Giltiq publishes agents.json, llms.txt, and an Agent Card, and runs an MCP server for agentic workflows. Whether you issue PDF invoices, XRechnung, or ZUGFeRD documents is up to your system: the validation runs before invoice creation.
Integration in minutes
-H "X-API-Key: YOUR_API_KEY"
from urllib.request import Request, urlopen
req = Request(
"https://api.giltiq.de/v1/validate/DE123456789",
headers={"X-API-Key": "YOUR_API_KEY"},
)
with urlopen(req) as res:
result = json.load(res)
print(result["valid"], result["source"]) # True bzst
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const result = await res.json();
console.log(result.valid, result.source); // true bzst
One API for developers and agents.
Giltiq publishes agents.json, llms.txt, and an Agent Card so your AI workflows can discover and call the API on their own. An MCP server exposes the same validations as tools.
Protocol implementation
Try it
Call the API without an API key. By default, 10 requests are possible without signing up.
Register
Create an account for an API key with 100 validations per month. Email is optional.
Go Live
Call the REST endpoint directly: GET /v1/validate/{vat_id} with your X-API-Key header. That is all it takes.
Simple, transparent pricing
Start free. Scale as you grow.
100 validations/mo
1.000 validations/mo
5.000 validations/mo