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.*
| Event | When it fires |
|---|---|
payment.succeeded | A charge completed successfully (one-time, subscription, or installment) |
payment.failed | A charge attempt failed |
payment.refunded | A full or partial refund was processed |
payment.disputed | A customer opened a chargeback/dispute |
subscription.*
| Event | When it fires |
|---|---|
subscription.created | A new subscription was initiated |
subscription.renewed | A recurring charge succeeded |
subscription.payment_failed | A renewal charge failed |
subscription.cancelled | Subscription was cancelled (immediately or at period end) |
subscription.expired | Period ended without renewal |
subscription.trial_started | Trial period began |
subscription.trial_ending | 3 days before trial ends (grace notification) |
subscription.trial_ended | Trial period ended (converted or expired) |
wallet.*
| Event | When it fires |
|---|---|
wallet.credited | Merchant wallet was credited (after a successful sale) |
wallet.debited | Wallet was debited (refund issued, dispute hold placed, payout) |
settlement.*
| Event | When it fires |
|---|---|
settlement.initiated | Payout/withdrawal was requested |
settlement.processing | Gateway confirmed it is processing |
settlement.completed | Funds confirmed delivered to the merchant’s bank |
settlement.failed | Payout failed at the gateway level |
dispute.*
| Event | When it fires |
|---|---|
dispute.created | Dispute was opened |
dispute.evidence_due | Evidence deadline is approaching |
dispute.won | Dispute resolved in the merchant’s favour |
dispute.lost | Dispute resolved against the merchant |
order.* (physical products only)
| Event | When it fires |
|---|---|
order.created | Order was placed and paid |
order.shipped | Shipping label generated, tracking available |
order.delivered | Delivery confirmed |
order.refunded | Order-level refund (also fires payment.refunded) |
Event Payloads
payment.succeeded
Fired when a payment is completed successfully.payment.failed
Fired when a payment attempt fails. Same structure aspayment.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 withstatus: "disputed".
subscription.created
Fired when a new subscription is initiated.subscription.renewed
Fired when a recurring charge succeeds. Includeslatest_payment_id and amounts with the renewal payment breakdown.
subscription.payment_failed
Fired when a renewal charge fails. Subscription status changes topast_due.
subscription.cancelled
Fired when a subscription is cancelled (immediately or at period end). Includescancellation_reason if provided.
subscription.expired
Fired when the subscription period ends without renewal.subscription.trial_started
Fired when a trial period begins. Subscription status istrialing 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 aswallet.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.settlement.processing
Fired when the gateway confirms the payout is being processed.settlement.failed
Fired when a payout fails at the gateway level. Includesfailure_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. Includesshipping.tracking_number, shipping.carrier, and shipping.shipped_at.
order.delivered
Fired when delivery is confirmed. Includesshipping.delivered_at.
order.refunded
Fired on an order-level refund. Also fires apayment.refunded event for the associated payment.