Skip to main content
Withdrawals take funds off a venue and back to an EVM wallet. Aster, Hyperliquid, Lighter, Robinhood, and Ondo share one prepare/sign/execute flow; Extended has its own quote-based flow.
Prerequisites: an active VOOI API token and the source venue connected. See API Tokens and Use your own keys if you don’t have them yet.
Binance, Bybit, and MEXC expose no withdrawals through VOOI. Move funds out of those venues directly.

1. Prepare

POST /withdraw/prepare takes the exchange, the amount, and the address to withdraw to. Two optional fields are venue-specific:
  • chainId — the destination chain. Only Aster and Ondo offer a real choice; both default to Arbitrum One (42161).
  • symbol — the token to withdraw. Only Aster offers a real choice; it defaults to USDC.
Every other venue withdraws to exactly one chain and token, listed in Destination chains and tokens below. Passing a value a venue doesn’t support is rejected rather than quietly ignored. The response always carries a withdrawId to pass to the execute step, a fee, a withdrawLimit, and a signData whose shape depends on the venue:
withdrawLimit is the maximum you can withdraw right now, and it is not the same as your balance. On Lighter and Robinhood it is the fast withdrawal ceiling. On Ondo it is your withdrawable margin minus the fee — Ondo debits the fee on top of the amount, not out of it — capped by whatever remains of the period limit.

2. Sign

Sign whatever prepare returned, with the wallet that owns the account.

3. Execute

POST /withdraw/execute takes the withdrawId from step 1, the signature from step 2, and the address executing the withdrawal. VOOI submits it to the venue — you don’t broadcast anything on-chain.
On Ondo the address must match the one the withdrawal was prepared for — a mismatch is rejected. Prepare a fresh withdrawal rather than reusing a withdrawId for a different destination.

Destination chains and tokens

Robinhood settles in USDG on its own chain rather than USDC on Arbitrum, matching how it takes deposits. An unsupported chainId or symbol is rejected with a message naming what the venue does support — see Errors.

Tracking the result

There is no withdrawal-status endpoint. Confirm the debit the same way you confirm a deposit credit: watch the venue balance on GET /exchange/accounts, or subscribe to the accounts event on the updates stream. Arrival in your wallet depends on the destination chain.

Next steps

Extended withdrawals

The separate quote-based flow for Extended

Transfers between exchanges

Move funds between venues without going to a wallet