To return money to the user’s bank, first sell positions to raise cash in the wallet, then withdraw against the funding source you connected earlier.
You need the INVESTOR_ID and FUNDING_SOURCE_ID from Fund the wallet.
Step 1 — Sell to raise cash
Sell requires quantity.
curl -X POST "$BASE_URL/investors/$INVESTOR_ID/orders" \
-H "Authorization: Basic $AUTH" \
-H "Content-Type: application/json" \
-d '{
"symbol": "AAPL",
"side": "sell",
"type": "market",
"time_in_force": "day",
"quantity": "10"
}'
Wait for the sell order to reach filled before withdrawing — proceeds settle into the wallet on fill.
Step 2 — Withdraw
funding_source_id is required for withdrawals.
curl -X POST "$BASE_URL/investors/$INVESTOR_ID/withdrawals" \
-H "Authorization: Basic $AUTH" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: wd-$(uuidgen)" \
-d '{
"amount": "1000.00",
"currency": "USD",
"method": "ach",
"description": "Withdrawal to checking account",
"funding_source_id": "'"$FUNDING_SOURCE_ID"'"
}'
Response
{
"id": "wd_9i8h7g6f5e4d3c2b",
"object": "withdrawal",
"amount": "1000.00",
"currency": "USD",
"method": "ach",
"status": "pending",
"funding_source_id": "fs_7h8g9f0e1d2c3b4a",
"created_at": "2026-07-01T15:00:00Z"
}
Withdrawal status progresses pending → processing → completed, or ends cancelled / failed. Cancel a still-processing withdrawal with POST /v1/investors/{id}/withdrawals/{wd_id}/cancel.
Send an Idempotency-Key header on every withdrawal. It prevents a retry after a timeout from moving the money twice.
For settlement timing and supported methods (ach, wire, international_wire, manual_bank_transfer), see Funding.