Webhooks for Payouts
Bitnob provides webhook notifications to allow your systems to track the full lifecycle of a payout from payment receipt through to fiat payout delivery.
Using webhooks allows you to:
Automatically update your internal databases in real-time,
Reconcile transactions without constant polling,
Notify your end-users of payout progress.
You can optionally specify a callbackUrl at payout initiation or configure a global webhook URL at your account level.
Webhook Security
All webhook payloads are signed using HMAC SHA-256 encryption with your API secret.
You must validate webhook signatures to ensure payload integrity.
Webhooks are retried automatically with exponential backoff in case your server is unreachable.
(Webhook signature verification instructions available in the Authentication & Security section.)
Webhook Events for Payouts (Based on Your Internal Flow)
event name | trigger |
|---|---|
payouts.initialized | Payout request accepted and quote is being acted on. The payout is now awaiting processing. |
payouts.processing | Funds are being converted and sent to the beneficiary's bank, mobile money wallet, or cash pickup. |
payouts.withdrawal.success | Payout completed — funds have been delivered to the beneficiary. |
payouts.withdrawal.failed | Payout failed after initiation — check failure_reason for details (e.g., invalid account, closed wallet). |
payouts.withdrawal.expired | Quote validity window expired before payout could be completed. Transaction is automatically cancelled. |
Webhook Event Details
1. payouts.initialized
Triggered when a payout has been initialized and is awaiting processing. This confirms the payout request was accepted and the quote is being acted on.
Example Payload
2. payouts.processing
Triggered when Bitnob is actively processing the payout — funds are being converted and sent to the beneficiary's bank, mobile money wallet, or cash pickup location.
Example Payload
3. payouts.withdrawal.success
Triggered when the payout has been successfully delivered to the beneficiary. The completed_at field indicates when the funds were received.
Example Payload
4. payouts.withdrawal.failed
Triggered when the payout fails after initiation — typically due to an invalid beneficiary account, closed mobile wallet, or destination issues. Check the failure_reason field for details.
Example Payload
5. payouts.withdrawal.expired
Triggered when the quote validity window expires before the payout could be completed. The transaction is automatically cancelled.
Example Payload
Webhook Delivery and Retry Behavior
Webhooks are sent via HTTPS POST to your specified callbackUrl.
Bitnob expects a 200 OK response from your server.
If your server does not respond (timeout, error), Bitnob retries delivery:
Immediate retry on first failure,
Then exponential backoff (e.g., retry after 1 min, 5 min, 15 min, 1 hour),
Up to a maximum number of attempts (e.g., 8 retries over 24 hours).
All webhook payloads are signed using your account's API secret for verification.
Best Practices for Handling Webhooks
Always verify the webhook signature before processing the payload.
Make webhook endpoints idempotent — handle duplicate notifications gracefully.
Respond quickly with 200 OK even if internal processing is delayed (use background jobs).
Log all webhook payloads for auditability and troubleshooting.
Use webhook events to proactively update your internal payout status, avoiding heavy API polling.
Summary
Bitnob’s webhook system keeps you in sync with:
Payment receipts,
Payout initiation,
Final success or failure outcomes.
Whether you're building a simple payout app or a complex merchant settlement platform, webhooks allow you to automate user updates, financial reconciliation, and operational dashboards in real-time.
The best Bitcoin-to-fiat payout systems are not just fast — they are event-driven, resilient, and transparent.
Now fully aligned with your Bitnob Offramps document
Full real webhook events, payloads, delivery behavior.