Cheqi webhooks notify your integration when an encrypted receipt, credit note, or return request is ready. Webhooks remove the need to poll and preserve Cheqi's zero-knowledge boundary: receipt and credit-note documents remain encrypted for the receiving integration.
Every request has two top-level properties:
{
"event": "RECEIPT_CREATED",
"data": {
"encryptedReceipt": {
"cheqiReceiptId": "CHQ-20260803-ABC123",
"encryptedEnvelope": "base64-ciphertext...",
"encryptedEnvelopeKey": "base64-wrapped-key..."
}
}
}eventidentifies the lifecycle event.datacontains exactly one event-specific object, such asencryptedReceipt,encryptedCreditNote, orcreditNoteInitiationRequest.
See Webhook Events for every event shape.
| Event | Object in data | Description |
|---|---|---|
RECEIPT_CREATED | encryptedReceipt | A recipient-specific encrypted receipt envelope is ready. |
RETURN_REQUESTED | creditNoteInitiationRequest | A customer submitted an encrypted return request. |
CREDIT_NOTE_CREATED | encryptedCreditNote | A recipient-specific encrypted credit-note envelope is ready. |
- Register an HTTPS endpoint and select event types.
- Cheqi sends the event as an HTTP
POST. - Verify
X-Cheqi-Signatureagainst the exact raw request body. - Persist or enqueue the event before doing expensive work.
- Return a successful
2xxresponse promptly. - Decrypt encrypted payloads asynchronously.
Webhook delivery may be retried. Make processing idempotent using the combination of event and cheqiReceiptId from the event-specific data object.
For RECEIPT_CREATED and CREDIT_NOTE_CREATED, encryptedEnvelope is the ciphertext of a ReceiptEnvelope. After decryption, ReceiptEnvelope.documents contains the authoritative set of generated documents. Cheqi does not send separate customer-detail ciphertext or a separate receipt-format list.
Continue with: