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

# Withdraw from the balance

> POST /v1/balance/withdrawals sends money from the Cleo Pay balance to the linked bank or a verified bank account. Requires an Idempotency-Key.

```
POST /v1/balance/withdrawals
```

**Scope:** `balance:transfer`  ·  **Idempotency-Key:** required

<ParamField body="amountCents" type="integer" required>At least 1, up to \$50,000 (`5000000`).</ParamField>

<ParamField body="destination" type="string" required>
  `"linked_bank"` for the bank linked to the balance, or the id of a verified bank account from `GET /v1/bank-accounts` that has full account and routing numbers on file. Raw account numbers are not accepted. New destinations are added in the Cleo web app.
</ParamField>

```bash theme={null}
curl -X POST https://api.stg.cleo-pay.com/v1/balance/withdrawals \
  --header "Authorization: Bearer $CLEO_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: 5d6e7f80-91a2-4b3c-8d4e-5f6a7b8c9d0e" \
  --data '{ "amountCents": 250000, "destination": "linked_bank" }'
```

## Response

`201`:

<ResponseField name="id" type="string" />

<ResponseField name="amountCents" type="integer" />

<ResponseField name="status" type="string">`processing`, `posted`, `failed`, `canceled` or `returned`.</ResponseField>
<ResponseField name="speed" type="string | null">Withdrawals run `standard` ACH.</ResponseField>

<ResponseField name="destination" type="object">
  `type` (`linked_bank` or `bank_account`), `bankAccountId` (with `bank_account`), `bankName` and `last4`.
</ResponseField>

<ResponseField name="expectedArrivalDate" type="string | null">When the money should reach the bank.</ResponseField>

## Errors

| Code | When |
| - | - |
| `validation_error` | `destination` is not `"linked_bank"` or a bank id; the bank is not verified or has no full numbers on file; the amount is out of range. |
| `not_found` | The bank account is not the business's. |
| `insufficient_balance` | The balance does not cover the amount. `details` has `availableCents` and `reservedCents`. |
| `setup_required` | No Cleo Pay account, or `"linked_bank"` with no linked bank. |
| `feature_unavailable` | The business has no Cleo Pay balance. |
| `payments_locked`, `setup_incomplete` | The business cannot move money yet. |
| `payment_unconfirmed` | The withdrawal may have started. Every retry with this key answers `409 payment_unconfirmed`. Check `GET /v1/balance/transactions` before you use a new key. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.