Payout status change notification
Sent to the notification URL when it was provided at payout creation; otherwise to the webhook URL configured in Fuzebox.
| Type | Description |
|---|---|
payout_processing | Payout submitted for execution at the provider (status PROCESSING) |
payout_completed | Payout sent (status COMPLETED) |
payout_failed | Payout failed or was returned by the provider (status FAILED, see failureReason) |
payout_cancelled | Payout cancelled (status CANCELLED) |
Each event is sent at most once, but payout_processing is not guaranteed: a payout that fails before it reaches the provider (for example, insufficient funds) goes straight to payout_failed without ever emitting payout_processing. Treat payout_completed, payout_failed, and payout_cancelled as the source of truth, and do not rely on receiving payout_processing beforehand.
Delivery order is not guaranteed either, so do not rely on the order in which webhooks arrive: each payload is the payout's state at the moment it was sent, so a later-arriving webhook can validly describe an earlier moment than one you already received. Always take status from the payload itself rather than inferring it from arrival order.
Content-Type*stringContent type.
"application/json"User-Agent*stringUser agent.
"Volt/2.0"X-Volt-Timed*integerTimestamp of notification generation.
X-Volt-Signed*stringNotification signature.
X-Volt-Type*stringType of payout notification.
"payout_processing""payout_completed""payout_failed""payout_cancelled"application/json- body
id*stringIdentifier of the payout.
uuidwalletId*stringIdentifier of the wallet the payout is debited from.
uuidstatus*PayoutStatusEnumPayout status.
"PENDING""PROCESSING""ON_HOLD""COMPLETED""FAILED""CANCELLED"type*"CRYPTO"Payout type, inferred from currency.
"CRYPTO"payoutReference*stringUnique reference for the payout — merchant-supplied or Volt-generated.
length <= 18internalReference*|Internal identifier of the payout in the partner's system.
debited*|The wallet leg. This field is null until the payout executes, then carries the settled debited amount.
paid*The on-chain leg, populated from the request at creation.
rate*|Settled conversion rate as an exact decimal string: 1 unit of the debited currency equals rate units of the paid currency. This field is null until the payout executes.
beneficiary*||The counterparty identity held against the payout.
crypto*The on-chain destination. Present for crypto payouts.
transaction*|On-chain evidence for the payout. Present for crypto payouts. This field is null until the on-chain transaction is known.
failureReason*|This field is null unless status is FAILED.
"REJECTED_BY_PROVIDER""INSUFFICIENT_FUNDS""INVALID_ADDRESS""WALLET_NOT_FOUND""WALLET_MERCHANT_MISMATCH""COMPLIANCE_REJECTED""RETURNED""INTERNAL_ERROR"createdAt*stringDate of payout creation.
date-timeupdatedAt*|Date of payout's last update.
date-timeOK
application/json- response
{ "id": "7f3b9d1e-5a2c-4e6f-b8d0-a4c6e8f0b2d4", "walletId": "6a4f0c9e-2d1b-4c8a-9f3e-b7d2a1c4e5f6", "status": "PROCESSING", "type": "CRYPTO", "payoutReference": "K7KDN3PA84MRV2XQZ9", "internalReference": "TREASURY-09", "debited": null, "paid": { "amount": "150.000000", "currency": "USDC" }, "rate": null, "beneficiary": { "type": "INDIVIDUAL", "firstName": "Jane", "lastName": "Doe", "country": "DE" }, "crypto": { "address": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F", "network": "ETHEREUM", "tag": null }, "transaction": null, "failureReason": null, "createdAt": "2026-09-02T10:12:03+00:00", "updatedAt": "2026-09-02T10:12:45+00:00"}{ "Content-Type": "application/json", "User-Agent": "Volt/2.0", "X-Volt-Timed": 0, "X-Volt-Signed": "string", "X-Volt-Type": "payout_processing"}Channel payment status change notification Webhook
Sent to the notification URL when it was provided at related channel creation; otherwise to the webhook URL configured in Fuzebox. | Type | Description | |-------|-------------| | `channel_payment_detected` | Deposit seen on-chain, awaiting confirmation and crediting (`status` `PROCESSING`) | | `channel_payment_completed` | Deposit credited to the wallet (`status` `COMPLETED`) | | `channel_payment_cancelled` | Deposit cancelled or rejected (`status` `CANCELLED`) | `channel_payment_detected` is **not guaranteed**: when a deposit reaches its final state before the detection could be announced (for example, the confirmation arrived first), only the terminal webhook is sent. Treat `channel_payment_completed` and `channel_payment_cancelled` as the source of truth, and do not rely on receiving `channel_payment_detected` beforehand.
Volt Gateway API (legacy)
View OpenAPI Schemas.