Skip to main content

What is a Withdrawal?

A withdrawal moves funds from your Daya withdrawal balance to an on-chain destination address. Withdrawals are separate from deposits and transfers. A deposit may settle into the merchant collection balance first, then be transferred to the withdrawal balance, and the withdrawal happens later as its own lifecycle.
The merchant balance is split into a collection balance and a withdrawal balance. Withdrawals draw from the withdrawal balance. Use POST /v1/merchant/balance/transfer to move funds from collection to withdrawal.

How the Merchant Balance Works

Your merchant balance has two sides:
BalanceWhat goes inWhat goes out
Collection balanceFunding account deposits and USD virtual account depositsBalance transfers to withdrawal balance
Withdrawal balanceBalance transfers from collection, merchant funding depositsTransfers to bank recipients, on-chain withdrawals
To use collection funds for transfers or withdrawals, move them to your withdrawal balance via POST /v1/merchant/balance/transfer. You can also fund the withdrawal balance directly:
  • Crypto deposits — send stablecoins to your merchant funding crypto wallet addresses on any supported chain.
  • NGN deposits — transfer Naira to your permanent merchant funding NGN bank account. These are converted to USD at the current rate.

When Withdrawals Are Used

Withdrawals apply when you want to move funds from your Daya withdrawal balance to an on-chain crypto address. For sending funds to bank accounts, use the Transfers API instead. Typical flow:
  1. Fund your balance — funding account deposits and USD virtual account deposits land in the collection balance, or fund directly via merchant funding
  2. Move funds to the withdrawal balance via POST /v1/merchant/balance/transfer (skip this step if funded via merchant funding)
  3. Create a withdrawal to a supported chain and token
  4. Daya tracks the withdrawal until it settles or fails

Withdrawal Properties

Each withdrawal is represented by the following fields:
PropertyDescription
idUnique withdrawal identifier
amount_usdAmount withdrawn from merchant balance
chainDestination chain
tokenToken sent on-chain
destination_addressRecipient address
statusCurrent withdrawal status
failure_codeFailure code if unsuccessful
failure_messageHuman-readable failure detail
provider_tx_idProvider-side transfer identifier
tx_hashOn-chain transaction hash after submission/settlement
created_atWhen the withdrawal record was created
updated_atLast update time
submitted_atWhen the withdrawal was submitted to the provider
settled_atWhen the withdrawal completed

Withdrawal Statuses

StatusMeaningTerminal
PENDINGWithdrawal record exists but has not been submitted yetNo
SUBMITTEDSent to the provider and awaiting final outcomeNo
SETTLEDWithdrawal completed successfullyYes
FAILEDWithdrawal failed permanentlyYes

Lifecycle

At a high level, withdrawals move through these stages:
  1. Created A withdrawal request is accepted against available merchant balance
  2. Submitted The withdrawal is successfully initiated with the provider
  3. Completed The withdrawal becomes SETTLED or FAILED
Withdrawal progress can be tracked via both the withdrawal read APIs and merchant webhook events.

Webhook Events

Merchant-configured webhook endpoints receive withdrawal lifecycle events:
  • withdrawal.created
  • withdrawal.submitted
  • withdrawal.completed
  • withdrawal.failed
Each webhook uses the common merchant webhook envelope:
  • event
  • timestamp
  • data (the public withdrawal object)

Supported Chains and Tokens

Withdrawals are constrained by token-level support, not just chain-level support.
Withdrawals currently support chains: SOLANA, TRON, APTOS, BASE, POLYGON, ETHEREUM with tokens USDC and USDT.
Use List Supported Chains to fetch the current live matrix of supported chains and token combinations.

API Routes

Use these routes to work with balances and withdrawals:

Next Steps

Merchant Balance

Check available funds before creating withdrawals

Supported Chains

Validate supported chain and token combinations

Webhook Events

Track withdrawal lifecycle asynchronously