Overview
You can withdraw funds from a subaccount in two ways:- Fiat Payouts: Convert currency balances to local currency (e.g., NGN, BRL, USD) and send it to a bank account.
- Stablecoin Off-ramp: Withdraw USD as stablecoins (USDC/USDT) to an external crypto wallet.
1. Validate Recipient Details (Fiat)
Endpoint:POST /v1/banking/{currency}/validate
Before adding a recipient for fiat withdrawals, it is crucial to validate the account details. This ensures the account exists and prevents failed transactions or lost funds.
Always validate account numbers and bank codes before attempting to create a recipient.
Example: Validate NGN Account
2. Create Recipient
Endpoint:POST /v1/ramp/{subaccountId}/banking/recipients
Once validated, save the details as a recipient. This recipient id will be used to initiate withdrawals.
For USD named withdrawal use cases, create a business recipient. Business recipients are identified by business_name. The fields beneficiary_date_of_formation, beneficiary_country_of_formation, and beneficiary_national_identification_number are optional for recipient creation, but required if the recipient will be used for named withdrawal flows.
Example: Create USD Business Recipient for named withdrawal
Example: Create NGN Recipient
3. Initiate Fiat Payout
Endpoint:POST /v1/ramp/{subaccountId}/banking/withdrawals
Send funds from the subaccount to the created recipient. The system will deduct the appropriate currency balance from the subaccount.
USD withdrawals can include payment_rail with RTP, WIRE, SWIFT, SAME_DAY_ACH, or ACH. Set named_withdrawal to true only for a USD named withdrawal. named withdrawal currently supports USD only, requires a business recipient identified by business_name, and requires the recipient to include beneficiary_date_of_formation, beneficiary_country_of_formation, and beneficiary_national_identification_number. named withdrawal supports only WIRE and SWIFT; RTP, SAME_DAY_ACH, and ACH remain supported only for non-named USD flows where applicable.
Example: Normal USD ACH Withdrawal
Example: Normal USD RTP Withdrawal
Example: USD named withdrawal by WIRE
Example: USD named withdrawal by SWIFT
Example: Withdraw to NGN Recipient
Note: The amount field specifies the amount in the destination currency (e.g., NGN). The equivalent balance will be deducted from the subaccount’s currency holdings.
View API Reference
4. Stablecoin Off-ramp (Crypto Withdrawal)
Endpoint:POST /v1/ramp/{subaccountId}/banking/withdrawals/stablecoin
You can also withdraw balances directly as stablecoins (USDC or USDT) to an external wallet address.
Example: Withdraw USDT on Ethereum
Common Mistakes
- Skipping Validation: Failing to validate bank account details often leads to failed withdrawals and unnecessary delays.
- Incorrect Network: When withdrawing stablecoins, ensure the
chainmatches the destination wallet. - Insufficient Balance: Ensure the subaccount has enough balance in the relevant currency to cover the withdrawal amount plus fees.
- Unverified subaccounts: Withdrawals are only permitted for subaccounts with approved verification.
Webhook Events
Listen to webhook events to track the status of your withdrawals in real-time.withdrawal.status.completed: The funds have successfully reached the destination.withdrawal.status.failed: The withdrawal could not be processed.