Set a webhook_url on a payment (or checkout) and Orqex POSTs a JSON event to it on
every lifecycle change. This is the reliable way to learn a payment’s final status.
Events
payment.partially_refunded
Partially refunded.
payment.attempt.completed
An attempt succeeded.
payment.attempt.action_required
An attempt needs customer action.
The event name is also sent in the X-Payment-Event header, with X-Payment-Id carrying
the payment id.
Payload and handler
{
"event": "payment.completed",
"payment": {
"id": "TRX1A2B3C4D",
"amount": { "value": 5000, "formatted": "50.00 XOF", "currency": "XOF" },
"status": "completed",
"metadata": { "order_id": "1024" }
},
"attempt": { "id": "att_...", "status": "completed", "method_code": "momo_mtn", "is_fallback": false },
"customer": { "id": "cus_...", "email": "[email protected]" },
"timestamp": "2026-06-08T12:00:00+00:00"
}
Handling rules
- Respond with 2xx quickly; do slow work asynchronously.
- Orqex retries failed deliveries (up to 5 attempts).
- Events are at-least-once — key your processing on
payment.id + event.
Deliveries to a per-payment webhook_url are not signed. Re-fetch the payment from the
API and act on that authoritative status (shown above). For signed deliveries, register
a project webhook endpoint — each has a signing secret and an
x-orqex-signature header you can verify.