Event reference
Every webhook has the same envelope; data depends on the event.
{ "id": "…", "event": "…", "mode": "LIVE", "created_at": "2026-11-10T09:00:00Z", "data": { … } }Objects in data have the same shape as the API returns for them: see the
API reference for every field.
Payments
Section titled “Payments”| Event | When | data |
|---|---|---|
payment.succeeded |
A card checkout was paid | The checkout, as GET /merchant/checkouts/{reference} |
payment.succeeded |
A gift was collected on a subscription | source "PLAN", subscription, kind, amount, due_date, paid_at |
payment.succeeded |
A payment was made on your giving page or a payment link | source "WEB", id, amount, method, payer_name, paid_at |
payment.failed |
A card checkout failed | The checkout |
Account numbers
Section titled “Account numbers”| Event | When | data |
|---|---|---|
account_number.created |
A number was issued | The account number |
account_number.paid |
A payment reached the expected amount, or any payment to a permanent number | account_number, amount, paid_at, sender_name, sender_bank |
account_number.underpaid |
A one-off number received less than expected | As account_number.paid |
account_number.overpaid |
A one-off number received more than expected | As account_number.paid |
account_number.expired |
A one-off number expired | The account number |
Example account_number.paid:
{ "id": "7d2f1a7e-4c1b-4e8e-9a3c-2f5b8c1d9e40", "event": "account_number.paid", "mode": "LIVE", "created_at": "2026-11-10T09:00:00Z", "data": { "account_number": { "reference": "INV-1001", "kind": "ONE_OFF", "account_number": "9900000001", "expected_amount": "45000.00", "received_amount": "45000.00", "status": "PAID" }, "amount": "45000.00", "paid_at": "2026-11-10T09:00:00Z", "sender_name": "Emeka Eze", "sender_bank": "GTBank" }}Payers
Section titled “Payers”| Event | When | data |
|---|---|---|
customer.funded |
A payer’s account number was paid | customer_id, external_reference, account_number, amount, paid_at, sender_name, sender_bank |
customer.charged |
A payer’s wallet was charged | The charge, as returned by …/webpayer/charge-wallet |
Wallet payment requests
Section titled “Wallet payment requests”| Event | When | data |
|---|---|---|
payment_request.paid |
The member approved | The request |
payment_request.declined |
The member declined | The request |
Direct debit
Section titled “Direct debit”| Event | When | data |
|---|---|---|
mandate.updated |
A mandate was authorised, failed or ended | The mandate |
mandate.debited |
A debit succeeded or failed | reference (the mandate’s) and debit: its id, amount, status, target_date, message, settled_at |
Transfers and wallets
Section titled “Transfers and wallets”| Event | When | data |
|---|---|---|
remittance.completed |
A transfer between your wallets finished | The transfer, with its lines |
wallet.credited |
Money came into one of your wallets | wallet_id, direction, amount, fee, narration, source, transfer_id, available_balance, at, and counterparty when known |
wallet.debited |
Money left one of your wallets | As wallet.credited |
| Event | When | data |
|---|---|---|
test |
You sent a test from the portal | message |