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 NAMETRIGGER
payouts.asset.received
Customer's payment to the funding address/invoice has been confirmed.
payouts.withdrawal.processing
Fiat payout to the beneficiary has been initiated.
payouts.withdrawal.success
Payout completed successfully — funds delivered to beneficiary.
payouts.withdrawal.failed
Payout failed after payment receipt (e.g., invalid account details, delivery failure).
payouts.withdrawal.expired
Quote expired without receiving payment (transaction cancelled).
payouts.withdrawal.rejected
Payout rejected for compliance or risk reasons (rare).

Webhook Event Details

1. payouts.asset.processing

Triggered when Bitnob detects and confirms customer payment to the assigned address or invoice.

Example Payload

json

2. payouts.withdrawal.processing

Triggered when Bitnob has started processing the fiat payout to the recipient's bank, mobile money wallet, or cash pickup location.

Example Payload

json

3. payouts.withdrawal.success

Triggered when the payout has been successfully delivered to the beneficiary.

Example Payload

json

4. payouts.withdrawal.failed

Triggered when the payout fails after payment was received — typically due to an invalid beneficiary account, closed mobile wallet, or destination issues.

Example Payload

json

5. payouts.withdrawal.expired

Triggered when no payment was received within the quote validity window and the payout request is canceled.

Example Payload

json

5. payouts.withdrawal.rejected

Triggered when a payout is rejected after payment, due to compliance violations, risk checks, or fraud flags.

Example Payload

json

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.