Skip to main content
POST
Submit 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.
The path parameter is withdrawalDetailId (returned by prepare), not withdrawalConfigId.
Pass signedTx in the format matching prepared.kind from prepare: base64 co-signed transaction for raw on Solana, JSON signature payload for userop on EVM, or EIP-712 signature for hypercore. If the quote was re-quoted after you signed, submit returns 409 — fetch the new quote, re-sign, and resubmit.

Path Parameters

withdrawalDetailId
string
required

The per-request withdrawal detail ID returned by prepare.

Body

application/json
token
string
required

JWT from the prepare response.

signedTx
string
required

Signed payload for the lane returned by prepare. For raw on Solana: base64 co-signed VersionedTransaction. For userop on EVM: JSON with signature and optional authorization. For hypercore: EIP-712 signature over typedData.

Response

Withdrawal submitted successfully.

withdrawalDetailId
string
txHash
string | null

On-chain transaction signature. Null only if broadcast was rejected.

state
enum<string>
Available options:
QUOTED,
SUBMITTING,
SUBMITTED,
BRIDGING,
COMPLETED,
FAILED,
FAILED_EXPIRED,
EXPIRED,
REFUNDED_BY_PROVIDER
broadcastAck
enum<string> | null

acknowledged = confirmed; unacknowledged = sent, keep polling; rejected = terminal failure.

Available options:
acknowledged,
unacknowledged,
rejected