Payouts Lifecycle
Understanding the full lifecycle of a payout is critical for designing reliable systems and anticipating every possible event during the transaction journey.
At Bitnob, a payout typically passes through five major stages:
stage | description |
|---|---|
1 | Quote Requested |
2 | Payout Initiated |
3 | Funding Detected |
4 | Fiat Payout Processing |
5 | Completion (Success, Failure, or Expiry) |
Each stage updates the payout’s Trip timeline. Four webhook events are emitted: payouts.initialized when the payout is accepted for processing, payouts.processing when the settlement rail picks it up, and payouts.withdrawal.success or payouts.withdrawal.expired on the terminal outcome. Intermediate stages are observed by polling GET /api/payouts/:id.
Lifecycle Diagram

Step-by-Step Breakdown
1. Quote Requested
Action:
Customer calls POST /api/payouts/quotes.
Bitnob returns a quote_id with the amount to pay, destination currency, FX rate, and expiry timestamp.
Important:
Quote has a strict expiry time (typically 15 minutes).
Customer must initiate payout before the quote expires.
2. Payout Initiated
Action:
Customer calls POST /api/payouts/:quoteId/initialize with the quoteId and beneficiary details.
Bitnob responds with:
A payment address (BTC/USDT address or Lightning invoice),
Funding amount,
Trip ID to track the lifecycle.
Webhook:
payouts.initialized is emitted once the payout is accepted for processing. Nothing has settled yet — the customer is still expected to pay.
3. Funding Detected
Action:
Customer pays the provided address/invoice.
Bitnob detects the incoming payment.
Status — observe by polling GET /api/payouts/:id (no webhook is sent at this stage):
event | meaning |
|---|---|
Asset received (status) | Asset detected on-chain or over Lightning. |
If payment is too late (after expiry), payout may be canceled or manually reconciled.
If underpaid, payout will adjust down proportionally.
4. Fiat Payout Processing
Action:
After payment is fully confirmed, Bitnob initiates the fiat payout to the beneficiary (bank, mobile wallet, cash pickup).
Webhook: payouts.processing is emitted when the rail picks up the payout.
event | meaning |
|---|---|
Processing (status) | Fiat payout is now underway. |
Payout processing depends on the destination country/rail speed (NIP, SEPA, ACH, Mobile Money, etc.)
If the beneficiary account details are invalid, payout may fail here.
5. Completion (Success, Failure, or Expiry)
outcome | description | webhook |
|---|---|---|
Success | Fiat funds delivered to the beneficiary account. | payouts.withdrawal.success |
Failure | Fiat payout failed (e.g., invalid account, system downtime). The payout record moves to status FAILED. | — (poll GET /api/payouts/:id ) |
Expired | Payment not received within the quote window; payout canceled. | payouts.withdrawal.expired |
Final Trip Timeline Snapshot:
completion_time is recorded on the terminal state,
Webhooks delivered to customer systems.
Quick Summary Table
lifecycle stage | trigger | trip fields | webhooks |
|---|---|---|---|
Quote Requested | POST /api/payouts/quotes | quote_at | - |
Payout Initiated | POST /api/payouts/:quoteId/initialize | initialized_at | payouts.initialized |
Funding Detected | Payment observed on-chain | - | - |
Funding Confirmed | Full confirmation thresholds met | finalized_at | - |
Payout Processing | Fiat payout dispatched | processing_start | payouts.processing |
Payout Completion | Success, failure, or expiry | completion_time | payouts.withdrawal.success, payouts.withdrawal.expired |
Developer Best Practices
Treat every payout as a lifecycle with stages, not a single API call.
Use Trip ID as the anchor to track a payout through all webhook updates and fetches.
Handle both funding events and payout events separately — they are not the same.
Build for timeouts and failures gracefully (expired quotes, rejected payouts).
Log and monitor key lifecycle timestamps to improve operational efficiency and incident detection.
Random Thought
In Bitcoin + fiat hybrid payments, payout success depends not just on payment, but on orchestrating funding, confirmation, fiat liquidity, compliance, and beneficiary delivery together.
This lifecycle documentation gives you the full map to operate confidently.