Skip to main content
External withdrawals emit withdrawal.pending once the payout has been accepted for processing. This acknowledges that the payout is underway; it does not confirm that the beneficiary has received funds. Subscribe explicitly to withdrawal.pending to receive this best-effort update. The success, partial, and failed events report the final outcome. All four events contain a public wallet transaction snapshot under data.transaction. settlement_details.type is bank_transfer for NGN, crypto for stablecoin settlement, and usd_cash for USD cash activity; the usd_cash shape has only rail_reference, confirmed_at, and failed_at. Handle all three types. withdrawal.partial is only possible for NGN withdrawals that were split into several bank transfers, most often bulk withdrawals. Subscribe to all three so a mixed batch is not left waiting for an event that will never arrive.

withdrawal.pending

The event uses the same transaction ID as the final webhook, with data.transaction.status set to processing. This event covers NGN bank payouts, USD stablecoin payouts, and NGN payouts through cNGN. Internal transfers that complete immediately send their terminal event directly.

withdrawal.success

withdrawal.partial

amount is the full amount you requested, not the amount that was paid. confirmed_at is when the batch finished settling. Read GET /v1/partner/wallets/transactions/{id} and walk settlement_details.transfers to see which beneficiaries were paid and which need a fresh withdrawal, as shown in Bulk withdrawals.

withdrawal.failed

The webhook snapshot does not expose recipient bank details, destination wallet addresses, per-transfer detail, network fees, or raw failure messages. Within a webhook, reference and description are always null, and settlement_details.rail_reference echoes the transaction id rather than an external reference; read the transaction for all three. Use data.transaction.id with GET /v1/partner/wallets/transactions/{id} for the latest public resource. Return to the webhook overview