Skip to content

Qualified Confirmations Endpoints

Giltiq persists every qualified confirmation as an immutable receipt row and exposes two retrieval endpoints. These are the backbone of the §18e UStG audit trail — you can retrieve a confirmation years after the original call.

Authentication: API key required (X-Api-Key header) for both endpoints. Anonymous access is not supported.

Plan requirement: Both endpoints require the business plan. Free and starter keys receive 402 PLAN_FEATURE_REQUIRED — qualified confirmations are not available on the starter plan.

See also: Qualified Confirmation Guide


GET /v1/qualified-confirmations/{receipt_id}

Section titled “GET /v1/qualified-confirmations/{receipt_id}”

Retrieves a single stored receipt by its Giltiq-issued receipt ID.

ParameterTypeRequiredDescription
receipt_idstringYesThe Giltiq-issued receipt ID, e.g. GQ-QC-20260410-A7K2M9P4R3
X-Api-Key: gq_live_...
{
"receipt_id": "GQ-QC-20260410-A7K2M9P4R3",
"target_vat_id": "DE811575812",
"requester_vat_id": "DE123456789",
"input": {
"company_name": "Bundeszentralamt für Steuern",
"company_street": "An der Küppe 1",
"company_zip": "53225",
"company_city": "Bonn"
},
"result": {
"valid": true,
"name_match": "match",
"street_match": "match",
"zip_match": "match",
"city_match": "match",
"official_name": "Bundeszentralamt für Steuern",
"official_address": "An der Küppe 1, 53225 Bonn"
},
"bzst_request_id": "BZST-2026-0410-XYZ123",
"issued_at": "2026-04-10T12:34:56.000Z",
"source": "giltiq-issued"
}

Every key shown above is present on every response. Fields that were not supplied or not returned are null — they are never omitted.

FieldTypeDescription
receipt_idstringGiltiq-issued audit receipt ID
target_vat_idstringThe VAT ID that was validated
requester_vat_idstring | nullYour own VAT ID as requester, if supplied
inputobjectThe company data you supplied at validation time; all four keys are always present
resultobjectMatch results and official company data from BZSt; all seven keys are always present
result.validbooleanWhether the VAT ID was valid at validation time
bzst_request_idstring | nullBZSt’s internal request ID, useful in audit disputes
issued_atstringISO 8601 timestamp of when Giltiq persisted the receipt
sourcestringAlways "giltiq-issued" — see note below

Each *_match field in result is one of:

ValueMeaning
matchSupplied value matched the BZSt registry
mismatchSupplied value did not match
not_queriedField was not supplied in the request
not_providedBZSt did not return a value for this field
Statuserror.codeWhen
401UNAUTHORIZEDNo valid API key supplied
402PLAN_FEATURE_REQUIREDKey is on the free or starter plan
404NOT_FOUNDReceipt unknown or created by a different API key
{
"error": {
"code": "NOT_FOUND",
"message": "Receipt not found",
"request_id": "req_01HZ9X2Y3Z4A5B6C7D8E9F0G"
}
}

A receipt that belongs to a different API key returns 404, not 403. This prevents enumeration of other API keys’ receipt IDs. Access is tied to the API key that created the receipt, not to your account — see API key scoping below.

Terminal window
curl "https://api.giltiq.de/v1/qualified-confirmations/GQ-QC-20260410-A7K2M9P4R3" \
-H "X-Api-Key: gq_live_..."

Returns a paginated list of the qualified confirmation receipts created by the authenticated API key, newest first.

ParameterTypeRequiredDescription
target_vat_idstringNoFilter to receipts for a specific VAT ID
limitintegerNoPage size (1–100, default 20)
cursorstringNoPagination cursor from the previous response’s next_cursor
X-Api-Key: gq_live_...
{
"items": [
{
"receipt_id": "GQ-QC-20260410-A7K2M9P4R3",
"target_vat_id": "DE811575812",
"requester_vat_id": "DE123456789",
"input": {
"company_name": "Bundeszentralamt für Steuern",
"company_street": "An der Küppe 1",
"company_zip": "53225",
"company_city": "Bonn"
},
"result": {
"valid": true,
"name_match": "match",
"street_match": "match",
"zip_match": "match",
"city_match": "match",
"official_name": "Bundeszentralamt für Steuern",
"official_address": "An der Küppe 1, 53225 Bonn"
},
"bzst_request_id": "BZST-2026-0410-XYZ123",
"issued_at": "2026-04-10T12:34:56.000Z",
"source": "giltiq-issued"
}
],
"next_cursor": null
}

Each element of items is the full receipt object — exactly the same shape as the single receipt endpoint above, including input, result.valid, and source.

FieldTypeDescription
itemsarray of receipt objectsFull receipts created by the authenticated API key, newest first
next_cursorstring | nullOpaque cursor for the next page; null on the last page
Statuserror.codeWhen
400INVALID_QUERYMalformed query parameters (e.g. limit outside 1–100)
401UNAUTHORIZEDNo valid API key supplied
402PLAN_FEATURE_REQUIREDKey is on the free or starter plan

The list uses opaque cursor pagination:

  • If next_cursor is a string, pass it as the cursor query parameter to fetch the next page.
  • If next_cursor is null, you have reached the last page.
  • Do not attempt to construct or decode cursors manually — the format may change.
Terminal window
curl "https://api.giltiq.de/v1/qualified-confirmations?limit=20" \
-H "X-Api-Key: gq_live_..."
Terminal window
curl "https://api.giltiq.de/v1/qualified-confirmations?target_vat_id=DE811575812" \
-H "X-Api-Key: gq_live_..."
Terminal window
# Page 1
curl "https://api.giltiq.de/v1/qualified-confirmations?limit=10" \
-H "X-Api-Key: gq_live_..."
# Page 2 (use next_cursor from previous response)
curl "https://api.giltiq.de/v1/qualified-confirmations?limit=10&cursor=<next_cursor>" \
-H "X-Api-Key: gq_live_..."

Receipts are scoped to the API key that created them — not to your account:

  • The list endpoint only returns receipts created by the key used for the request.
  • The single endpoint only returns a receipt to the key that created it; any other key gets 404.
  • If an API key is revoked (for example rotated out during key management), its receipts can no longer be retrieved or listed by any key. Keep this in mind before rotating keys: store the receipts you need for audits, or keep the creating key active.

Every receipt has "source": "giltiq-issued". This is important:

  • The receipt is issued and stored by Giltiq, not by the German tax authority (BZSt).
  • It is not an official BZSt Drucksache (the old XML-RPC print receipt from the deactivated BZSt XML-RPC API, discontinued 2025-11-30).
  • It is a contemporaneous audit record: Giltiq captures the exact inputs you supplied, the BZSt response, and the match results at the moment of the API call.
  • German tax auditors (§ 18e UStG) require you to document that you conducted a due-diligence check at invoicing time. This receipt provides that documentation.

Giltiq retains receipts for the lifetime of your account, with a minimum of 10 years to cover German tax audit windows (§§ 147 AO, 14b UStG).