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

# INSUFFICIENT_FUNDS_AT_SETTLE error

> Settlement failed because the source balance was insufficient at the time of settlement, even though funds were available at reservation

## What happened

Funds were available when the transaction was created and reserved, but by the time settlement was attempted the source balance had dropped below the required amount. No funds were moved. The transaction is in a terminal failed state with `failureCode: insufficient_funds_at_settle`.

This is distinct from the `INSUFFICIENT_FUNDS` error at submission time: that error fires immediately when there is not enough balance to reserve. This error fires later, at settlement, after the reservation was already accepted.

```json theme={null}
{
  "type": "INSUFFICIENT_FUNDS_AT_SETTLE",
  "title": "Insufficient funds at settlement",
  "status": 422,
  "detail": "Funds were available at reservation but not at settlement. No money was moved.",
  "resolution": "Top up the funding source and submit a new transaction.",
  "docs": "/errors#insufficient-funds-at-settle",
  "instance": "/v2/transactions/txn_abc123",
  "correlationId": "corr_xyz789",
  "timestamp": "2026-01-15T09:30:00.000Z"
}
```

## Common causes

* **Concurrent withdrawals** -- multiple transactions consumed the available balance between reservation and settlement
* **Fee adjustment** -- the final settlement fee was higher than estimated, leaving the source short at the settlement boundary
* **Balance consumed by a competing operation** -- another API call or system event reduced the source balance before settlement ran

## Recovery

**1. Confirm the terminal state**

```bash theme={null}
curl -X GET https://api.conduit.financial/v2/transactions/txn_abc123 \
  -H "x-api-key: YOUR_API_KEY"
```

**2. Check the current balance**

Retrieve the source to confirm its current available balance:

```bash theme={null}
curl -X GET https://api.conduit.financial/v2/customers/cus_abc123/wallets/wlt_abc123 \
  -H "x-api-key: YOUR_API_KEY"
```

**3. Top up the source and resubmit**

Once the source balance is replenished to at least the required amount plus fee, submit a new transaction:

```bash theme={null}
curl -X POST https://api.conduit.financial/v2/payouts \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Idempotency-Key: idem_NEW_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cus_abc123",
    "virtualAccountId": "vac_abc123",
    "assetAmount": {"code": "USD", "amount": "500.00"},
    "destination": {
      "recipient": {
        "rail": "us",
        "type": "individual",
        "firstName": "Jane",
        "lastName": "Doe",
        "accountNumber": "...",
        "routingNumber": "...",
        "accountType": "checking"
      }
    }
  }'
```

## Prevention

* **Serialize high-value transactions** -- avoid submitting concurrent transactions from the same source unless you track the total reserved amount
* **Check balance before submitting** -- read the source's available balance and compare it against the intended amount plus an estimated fee buffer before submitting
* **Handle `transaction.failed` with this code** -- branch on `failureCode === 'insufficient_funds_at_settle'` to surface a "please top up your balance and try again" message

## Related webhooks

The `transaction.failed` event fires when settlement fails:

```json theme={null}
{
  "type": "transaction.failed",
  "data": {
    "transactionId": "txn_abc123",
    "failureCode": "insufficient_funds_at_settle"
  }
}
```

## Related endpoints

* [GET /v2/transactions/:id](/api-reference/transactions/get-a-transaction-by-id) -- read transaction state
* [GET /v2/customers/:customerId/wallets/:walletId](/concepts/crypto-wallets#reading-wallets) -- read current wallet balance
* [POST /v2/payouts](/api-reference/payouts/create-a-payout) -- submit a new payout
