Skip to main content

Webhook Events

Events use dot-notation grouping: {object}.{action}. All events share the same envelope structure — the data field contains the event-specific object documented below.

Event Taxonomy

payment.*

subscription.*

wallet.*

settlement.*

dispute.*

order.* (physical products only)


Event Payloads

payment.succeeded

Fired when a payment is completed successfully.

payment.failed

Fired when a payment attempt fails. Same structure as payment.succeeded with status: "failed" and paid_at: null.

payment.refunded

Fired when a full or partial refund is processed.

payment.disputed

Fired when a customer opens a chargeback or dispute. Same payment structure with status: "disputed".

subscription.created

Fired when a new subscription is initiated.

subscription.renewed

Fired when a recurring charge succeeds. Includes latest_payment_id and amounts with the renewal payment breakdown.

subscription.payment_failed

Fired when a renewal charge fails. Subscription status changes to past_due.

subscription.cancelled

Fired when a subscription is cancelled (immediately or at period end). Includes cancellation_reason if provided.

subscription.expired

Fired when the subscription period ends without renewal.

subscription.trial_started

Fired when a trial period begins. Subscription status is trialing and the trial object is present.

subscription.trial_ending

Fired 3 days before a trial ends — a grace notification to prompt conversion.

subscription.trial_ended

Fired when the trial period ends (whether the subscription converted to paid or expired).

wallet.credited

Fired when the merchant wallet is credited (e.g., after a successful sale).

wallet.debited

Fired when the merchant wallet is debited (refund issued, dispute hold placed, or payout). Same structure as wallet.credited with type: "debit".

settlement.initiated

Fired when a payout or withdrawal is requested.

settlement.completed

Fired when funds are confirmed delivered to the merchant’s bank.
Cross-currency settlement example (USD wallet to NGN bank account):

settlement.processing

Fired when the gateway confirms the payout is being processed.

settlement.failed

Fired when a payout fails at the gateway level. Includes failure_reason.

dispute.created

Fired when a dispute is opened on a payment.

dispute.evidence_due

Fired when the evidence deadline is approaching.

dispute.won

Fired when the dispute is resolved in the merchant’s favour. Held funds are released.

dispute.lost

Fired when the dispute is resolved against the merchant.

order.created

Fired when a physical product order is placed and paid.

order.shipped

Fired when a shipping label is generated and tracking is available. Includes shipping.tracking_number, shipping.carrier, and shipping.shipped_at.

order.delivered

Fired when delivery is confirmed. Includes shipping.delivered_at.

order.refunded

Fired on an order-level refund. Also fires a payment.refunded event for the associated payment.