Skip to main content

Overview

You can withdraw funds from a subaccount in two ways:
  1. Fiat Payouts: Convert currency balances to local currency (e.g., NGN, BRL, USD) and send it to a bank account.
  2. Stablecoin Off-ramp: Withdraw USD as stablecoins (USDC/USDT) to an external crypto wallet.
This guide covers validating recipients, creating beneficiaries, and initiating withdrawals.

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

View API Reference

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

View API Reference

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

View API Reference

Common Mistakes

  1. Skipping Validation: Failing to validate bank account details often leads to failed withdrawals and unnecessary delays.
  2. Incorrect Network: When withdrawing stablecoins, ensure the chain matches the destination wallet.
  3. Insufficient Balance: Ensure the subaccount has enough balance in the relevant currency to cover the withdrawal amount plus fees.
  4. 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.
See Withdrawal Events for payload details.