Skip to main content

What is a Withdrawal?

A withdrawal moves funds from your Daya merchant balance to an on-chain destination address. Withdrawals are separate from deposits. A deposit may settle into merchant balance first, and the withdrawal happens later as its own lifecycle.

When Withdrawals Are Used

Withdrawals apply when an onramp settles to merchant balance instead of auto-withdrawing directly on-chain. Typical flow:
  1. Deposit settles into merchant balance
  2. You check available balance
  3. You 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.submitted
  • withdrawal.settled
  • 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.
Only USDT on POLYGON is withdrawal-enabled right now.
Use List Supported Chains to fetch the current live matrix of supported chains and token combinations.

API Routes

Use these routes to work with 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