Skip to main content
Qint currently emits two event types. Build your handler to ignore event types it doesn’t recognize (still returning 2xx) so future event types never break you.

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).
{
  "type": "payment.status",
  "intentId": "pi_x7k2m9p4q1w8",
  "status": "settled",
  "amount": 49.90,
  "currency": "CHF",
  "assetSymbol": "USDT",
  "invoiceId": null,
  "paymentLinkId": null,
  "occurredAt": "2026-07-08T09:24:03+00:00"
}
FieldTypeDescription
typestringAlways payment.status.
intentIdstringThe payment intent (pi_…) this event is about.
statusstringThe intent’s status after the transition: initiated, pending, confirmed, settled, failed, expired or cancelled.
amountnumberThe fiat amount of the payment.
currencystringCHF, EUR or USD.
assetSymbolstring | nullThe crypto asset the buyer chose, once chosen.
invoiceIdstring | nullSet when the payment pays an invoice (inv_…).
paymentLinkIdstring | nullSet when the payment came through a payment link (pl_…).
occurredAtstring (ISO 8601)When the transition happened.
Fulfil on status: "settled" and nothing else. confirmed means the crypto is confirmed on-chain but settlement to fiat hasn’t completed.

Underpayment fields

When the payment partner detects that a buyer sent less than the quoted amount, the payment.status event is re-emitted for the intent’s current (unchanged) status, carrying three extra fields:
{
  "type": "payment.status",
  "intentId": "pi_x7k2m9p4q1w8",
  "status": "pending",
  "amount": 49.90,
  "currency": "CHF",
  "assetSymbol": "USDT",
  "invoiceId": null,
  "paymentLinkId": null,
  "underpaid": true,
  "expectedCryptoAmount": "55.48765432",
  "receivedCryptoAmount": "53.20000000",
  "occurredAt": "2026-07-08T09:21:40+00:00"
}
FieldTypeDescription
underpaidbooleantrue when the received amount is short. A flag, not a status — the intent’s status is unchanged by the detection itself.
expectedCryptoAmountstringThe quoted crypto amount, as an 8-decimal string.
receivedCryptoAmountstringWhat actually arrived, as an 8-decimal string.
What to do with an underpaid event — including the merchant review queue for payments that expire underpaid — is covered in the underpayments guide.

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.

Verifying signatures

Working verification code in four languages.

Delivery & retries

The retry schedule and the delivery log.