Event types
Every event has the same envelope; data is the full current object.
{
"id": "evt_01JB8Q4Z2N5V7K3M9P6R0T1W8X",
"type": "payment_intent.succeeded",
"created_at": "2026-10-22T09:30:00.000Z",
"livemode": false,
"business_id": "biz_01JB8Q4Z2N5V7K3M9P6R0T1W8X",
"data": { "id": "pi_01JB8Q4Z2N5V7K3M9P6R0T1W8X", "object": "payment_intent", "status": "succeeded", "amount": 125000 }
}| Type | Sent when |
|---|---|
| payment_intent.succeeded | The provider confirmed the payment. data is the full payment intent. |
| payment_intent.failed | The provider declined, the payer cancelled, or the prompt was abandoned (provider_code: abandoned). |
| payment_intent.reversed | A succeeded M-Pesa payment was reversed by the provider. |
| payment_intent.refunded | A refund against the intent succeeded; status is refunded or partially_refunded. |
| payout.pending_approval | A payout was prepared and waits for an owner to approve it with an email code. |
| payout.approved | An owner approved the payout; it is being sent. |
| payout.succeeded | The provider confirmed the payout reached the payee. |
| payout.failed | The provider rejected the payout. No money moved. |
| payout.rejected | An owner rejected the payout. Nothing was sent. |
| refund.pending_approval | A refund was requested and waits for owner approval. |
| refund.succeeded | The provider confirmed the refund. |
| refund.failed | The provider rejected the refund. No money moved. |
| exception.created | Reconciliation opened a case that needs a person (no match, duplicate, amount mismatch). |
| exception.resolved | A reconciliation case was resolved. |
| connection.failed | A provider connection failed its health check; new payments on it pause until it recovers. |
| test.ping | Sent from the dashboard's Send test event button. Safe to ignore. |