Skip to main content
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 pendingprocessingcompleted, 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.
Next → Webhooks.