BZSt §18e qualified VAT confirmation (German legal evidence)
Issues a qualified Bestätigungsmitteilung from the German Bundeszentralamt für Steuern (BZSt) confirming a foreign EU VAT and, field-by-field, whether the supplied company details match what the foreign registry has on file. The result is stored for 10 years as tax-audit evidence under §18e UStG. Business plan only. Supports `Idempotency-Key` header (UUID) for safe retries within 24 hours.
30 requests per hour per IP · demo key used automatically
Authorization: Bearer <api_key> header. Use a vtv_live_* key in production or a vtv_test_* key for deterministic magic-number responses.Body
vat_numberrequiredstring · min 3Foreign EU VAT number to confirm. Country prefix required.
FR44732829320companyrequiredobjectCompany details to verify against the foreign registry. `name` is required; the rest are optional but recommended — only fields you supply are matched.
[object Object]requester_vat_numberstringGerman VAT number authorising the confirmation. Overrides the per-key `default_requester_vat`. Must pass DE MOD-11 checksum.
DE129273398Response
Confirmation issued and stored as evidence
datarequiredobjectvalidrequiredbooleanqualifiedrequiredboolean`true` only when every requested field returned A. `valid && !qualified` means BZSt returned evatr-0003 — VAT is valid, but at least one field did not match or was not returned.
vat_numberrequiredstringrequester_vat_numberrequiredstringmatchesrequiredobjectnamerequiredstringA = matches, B = does not match, C = not requested (you did not supply this field), D = not provided by the foreign registry.
"A""B""C""D"streetrequiredstringA = matches, B = does not match, C = not requested (you did not supply this field), D = not provided by the foreign registry.
"A""B""C""D"postcoderequiredstringA = matches, B = does not match, C = not requested (you did not supply this field), D = not provided by the foreign registry.
"A""B""C""D"townrequiredstringA = matches, B = does not match, C = not requested (you did not supply this field), D = not provided by the foreign registry.
"A""B""C""D"companyrequiredobjectnamerequiredstring | nullstreetrequiredstring | nullpostcoderequiredstring | nulltownrequiredstring | nullvalid_fromrequiredstring | nullvalid_torequiredstring | nullconfirmation_idrequiredstringRetrievable later via `GET /v1/confirmations/{id}`. Retained 10 years.
confirmed_atrequiredstringmetarequiredobjectsourcerequiredstring"bzst"source_statusrequiredstring"live"latency_msrequiredintegerrequest_idrequiredstringbzst_status_coderequiredstringevatr-0000bzst_idrequiredstring | nullBZSt's own request identifier (the `id` field of the qualified-confirmation response). Independent evidence of the upstream call alongside `request_id` and the `data.confirmation_id` UUID. Null if BZSt omitted it on this response.
08aba84d66448118Error responses
import { Vatverify } from '@vatverify/node';
const client = new Vatverify();
const result = await client.confirm({
"vat_number": "FR44732829320",
"company": {
"name": "Airbus SAS",
"street": "2 Rond-Point Emile Dewoitine",
"postcode": "31700",
"town": "Blagnac"
},
"requester_vat_number": "DE129273398"
});{
"data": {
"valid": true,
"qualified": true,
"vat_number": "…",
"requester_vat_number": "…",
"matches": {
"name": "A",
"street": "A",
"postcode": "A",
"town": "A"
},
"company": {
"name": "…",
"street": "…",
"postcode": "…",
"town": "…"
},
"valid_from": "…",
"valid_to": "…",
"confirmation_id": "9b8e1a2c-4d6f-4e0b-9b2a-1c3d5e7f9a2b",
"confirmed_at": "…"
},
"meta": {
"source": "bzst",
"source_status": "live",
"latency_ms": 47,
"request_id": "9b8e1a2c-4d6f-4e0b-9b2a-1c3d5e7f9a2b",
"bzst_status_code": "evatr-0000",
"bzst_id": "08aba84d66448118"
}
}List recent audit records for the calling key
Returns the most recent audit records for the calling API key, newest first. Filterable by endpoint and date range. Cursor pagination via `meta.next_cursor` (pass it as `cursor=` on the next call).
Fetch a stored §18e confirmation by id
Returns a previously issued qualified confirmation. Scoped to the calling api_key — the same key that created the confirmation. Readable regardless of current plan (evidence retention is a contractual promise, not a plan feature).