- Crypto transfers
- Off-Ramp integration
- Fiat withdrawals from one of your virtual accounts to a bank account
Events on this page
payment.payout.updated
The main payout event.
Trigger conditions
One event per change of this payout’sstatus.
Pending and Preparing can also go directly to Failed. Events may arrive out of order; see Event ordering.
Event content
Failure reasons
Usefailed_reason.code to decide how to handle the failure.
Sample events
Each sample shows thedata object only. The envelope around it is the same for every event — see Event structure.
The payout is accepted
Record it and do not submit the request again.requested_target is your own instruction echoed back — check it against what you sent.
The payout completed
Mark the payout as completed in your system. This means Cobo finished the transfer, not that the recipient’s platform has credited it.The payout is partially completed
Create a new payout for the amount infailed_amounts. Do not resend the part that succeeded.
Here the payout requested two tokens, and one of them failed on its outgoing transaction, so both the object-level reason and the entry-level reason are present.
The payout failed
⚠️ A payout item can also fail before any outgoing transaction exists. Here it failed during fund consolidation, sofailed_amounts carries the amount but transactions is empty.
An Off-Ramp payout is rejected by the bank
This is not a final status. The on-chain leg has already completed (the entry intransactions is Completed); it is the receiving bank that returned the fiat credit, so failed_amounts is empty. Contact Cobo to resolve it, and wait for further events on this payout: if a retry succeeds, you receive a second Transferring and then Completed.
payment.bank_withdrawal.status.updated
Fires when a bank withdrawal reaches Completed or Failed; no event is sent for Pending or Processing. A bank withdrawal moves fiat out of one of your virtual accounts into a target bank account, and is created with Create bank withdrawal.
Event content: the
data object carries data_type PaymentBankWithdrawal, plus:
bank_withdrawal_id(required) — The bank withdrawal ID generated by Cobo.request_id(required) — The request ID you provided when creating the bank withdrawal.source_bank_account_id(required) — The ID of the source bank account, which must be a virtual account (taggedVA).target_bank_account_id(required) — The ID of the target bank account that receives the withdrawal.source_bank_account(required) — The full details of the source bank account.target_bank_account(required) — The full details of the target bank account.currency(required) — The fiat currency of the bank withdrawal, for exampleUSD.amount(required) — The bank withdrawal amount, as a decimal string in the currency’s display unit, for example100.00.bank_tx_fee(optional) — The bank transaction fee charged for the bank withdrawal.status(required) — The current status. One of:Pending,Processing,Completed,Failed.remark(optional) — The remark for the bank withdrawal.failed_reason(optional, string) — Free-text reason the bank withdrawal failed; there is nocode. Populated only whenstatusisFailed.timeline(required) — The status timeline of the bank withdrawal. Each item carries astatusand thetimestampat which the withdrawal entered it, in Unix timestamp (seconds).created_timestamp(required) — The creation time, in Unix timestamp (seconds).
The bank withdrawal payload does not carry an
updated_timestamp. To determine when the withdrawal entered its current status, read the last entry in timeline.Advanced events
For the payout’s on-chain transaction detail, subscribe to the advanced eventpayment.payout.status.updated. See Advanced events.