payment.status
Sent to every active endpoint on each status transition of a payment intent — and re-sent, with the underpayment fields populated, when an underpayment is detected on a payment (see below).
| Field | Type | Description |
|---|---|---|
type | string | Always payment.status. |
intentId | string | The payment intent (pi_…) this event is about. |
status | string | The intent’s status after the transition: initiated, pending, confirmed, settled, failed, expired or cancelled. |
amount | number | The fiat amount of the payment. |
currency | string | CHF, EUR or USD. |
assetSymbol | string | null | The crypto asset the buyer chose, once chosen. |
invoiceId | string | null | Set when the payment pays an invoice (inv_…). |
paymentLinkId | string | null | Set when the payment came through a payment link (pl_…). |
occurredAt | string (ISO 8601) | When the transition happened. |
Underpayment fields
When the payment partner detects that a buyer sent less than the quoted amount, thepayment.status event is re-emitted for the intent’s current (unchanged) status, carrying three extra fields:
| Field | Type | Description |
|---|---|---|
underpaid | boolean | true when the received amount is short. A flag, not a status — the intent’s status is unchanged by the detection itself. |
expectedCryptoAmount | string | The quoted crypto amount, as an 8-decimal string. |
receivedCryptoAmount | string | What actually arrived, as an 8-decimal string. |
ping
Emitted when you press Send test event in the dashboard. It travels the same pipeline as real events — same signature scheme, same X-Qint-Event-Id header, same retry behavior — with "type": "ping" in the payload. Verify it like any event, then return 2xx and ignore it.
Related
Verifying signatures
Working verification code in four languages.
Delivery & retries
The retry schedule and the delivery log.