Skip to main content
POST
Prepare a Withdrawal
Note: When using the production environment at moonpay.hel.io, set your API endpoint to api.hel.io/v1. For the development environment, use api.dev.hel.io/v1.
Display summary as your confirmation screen. The quote and token expire at summary.expiresAt. sourceCurrencyId is always required. Optionally pass customerId (max 255 characters) to attach a merchant-defined end-user identifier to the quote. Inspect prepared.kind to determine what to sign: raw (Solana unsignedTx), userop (EVM ERC-4337 user operation), or hypercore (Hyperliquid EIP-712 typedData).

Path Parameters

withdrawalConfigId
string
required

The withdrawal config ID.

Body

application/json
ownerAddress
string
required

Holder's source wallet address. Format is lane-specific (e.g. Solana base58 for Solana raw, EVM checksummed address for EVM raw/hyperliquid).

recipient
string
required

Destination address on any supported chain.

amount
string
required

Amount in atomic units as a decimal-free string (e.g. 1500000 for 1.5 USDC).

Pattern: ^\d+$
toCurrencyId
string
required

Destination currency Mongo ID.

sourceCurrencyId
string
required

Source currency Mongo ID from the withdrawal config.

customerId
string

Optional merchant identifier for the end user (max 255 characters). Persisted on prepare and echoed on the withdrawal detail and webhooks. Not applied on re-quote.

Maximum string length: 255

Response

Withdrawal prepared successfully.

withdrawalDetailId
string

Per-request ID. Use for submit and status polling.

token
string

JWT quote token. Pass verbatim on submit.

prepared
object
summary
object