{referenceId} = OpenCard transaction reference from the match request.
Required headers
| Header | Value |
|---|---|
X-Event | CallbackRequestResolved or CallbackRequestDeleted |
X-CallbackRequest-Id | Callback request ID from OpenCard |
X-Data-Signature | HMAC-SHA256(raw_body, client_secret) |
Signature calculation
X-Data-Signature header exactly. Raw body bytes, not re-serialized JSON.
Resolved payload
Content type depends on callback type configured for the request:application/xml— receipt XML (parsed for VAT + line items)application/json— structured receipt data
- True VAT rates and amounts →
transaction.true.vatwebhook - Line items →
transaction.line.itemswebhook - Receipt file → stored, URL sent via
receipt.fetchedwebhook
Response
| Code | Meaning |
|---|---|
200 | Accepted |
403 | Bad signature |
404 | Unknown callback request ID |
CallbackRequestResolved for already-resolved requests → 200 (idempotent, logged as warning).
What happens after
- Receipt file downloaded and stored in cloud
- TrueVAT records created
- LineItem records created
- Webhooks fired to EMS (per org webhook config)

