> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bluumfinance.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Withdraw

> Sell to raise cash, then withdraw proceeds to the linked bank.

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](/get-started/journey/fund-wallet).

## Step 1 — Sell to raise cash

Sell requires `quantity`.

```bash theme={null}
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.

<CodeGroup>
  ```bash cURL theme={null}
  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"'"
    }'
  ```

  ```javascript Node.js theme={null}
  import { randomUUID } from "node:crypto";

  const res = await fetch(`${BASE_URL}/investors/${INVESTOR_ID}/withdrawals`, {
    method: "POST",
    headers: {
      Authorization: `Basic ${auth}`,
      "Content-Type": "application/json",
      "Idempotency-Key": `wd-${randomUUID()}`,
    },
    body: JSON.stringify({
      amount: "1000.00",
      currency: "USD",
      method: "ach",
      description: "Withdrawal to checking account",
      funding_source_id: FUNDING_SOURCE_ID,
    }),
  });

  const withdrawal = await res.json();
  console.log(withdrawal.id, withdrawal.status); // wd_..., pending
  ```

  ```python Python theme={null}
  import uuid

  res = requests.post(
      f"{BASE_URL}/investors/{INVESTOR_ID}/withdrawals",
      headers={
          "Authorization": f"Basic {auth}",
          "Content-Type": "application/json",
          "Idempotency-Key": f"wd-{uuid.uuid4()}",
      },
      json={
          "amount": "1000.00",
          "currency": "USD",
          "method": "ach",
          "description": "Withdrawal to checking account",
          "funding_source_id": FUNDING_SOURCE_ID,
      },
  )

  withdrawal = res.json()
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "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`.

<Warning>
  Send an `Idempotency-Key` header on every withdrawal. It prevents a retry after a timeout from moving the money twice.
</Warning>

For settlement timing and supported methods (`ach`, `wire`, `international_wire`, `manual_bank_transfer`), see [Funding](/concepts/funding).

<Tip>
  Next → [Webhooks](/get-started/journey/webhooks).
</Tip>
