Event Overview
Event Type:PAYMENT_FAILEDCategory: Payment
Description: Payment transaction has failed This webhook is triggered when a payment is marked FAILED (after a payment failed webhook/callback is received).
When the webhook is sent
- Payment failed flow: After a payment failed webhook/callback is received, the payment is updated to FAILED and the webhook is created.
- The webhook is created only if your merchant account (or parent, for sub-merchants) has an active API credential with a non-empty webhook URL.
Delivery Details
Headers
Signature verification (recommended):
Compute
HMAC-SHA256(encryption_key, raw_body) where raw_body is the exact UTF-8 request body as received. Compare the hex result with the X-Webhook-Signature header to ensure the webhook is from the platform and unchanged.
Payload Schema
Field Specifications
- Root Level Fields
- Data Object Fields
string
required
Always
"PAYMENT_FAILED" for this webhook eventstring
required
ISO 8601 datetime when the webhook event was createdExample:
"2025-02-12T10:31:00.123456Z"string
required
Envelope version (e.g. “2.0.0”)
string
required
Unique identifier for this webhook event (UUID), useful for idempotencyExample:
"660e8400-e29b-41d4-a716-446655440001"object
required
Payment request details (payment_id, order_id, status, message, mop_type, amount, bank_ref_num, extended_status, payment_message, payment_completed_at, utr, virtual_account_id, subscription_id, merchant_reference_id)
What to Do When You Receive This Webhook
- Respond with HTTP 2xx (e.g.
200 OK) as soon as you have accepted the payload, so the platform marks the delivery as successful and does not retry. - Verify the signature using your API key and the raw request body (HMAC-SHA256, hex) to ensure authenticity.
- Use
data.payment_idanddata.order_idto reconcile with your system or fetch more details from the Partner API.