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
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