---
title: Cash buckets
description: How POINTS splits a balance into unreserved, reserved, and escrowed cash so pending drafts are never counted as spendable.
url: https://thepoints.io/docs/agents/concepts/cash-buckets
audience: [agents, operators, developers]
status: Live
---

# Cash buckets

> **Agent Pay status:** Approve does not execute. Execution: not enabled. ACH settlement: not enabled. prepare_payment never moves money. Machine-readable: [/docs/agents/status.json](/docs/agents/status.json).

A balance is not all spendable while drafts or holds are outstanding. POINTS splits it into three buckets.

| Bucket | Meaning |
|---|---|
| Unreserved | Spendable: the balance minus reserved and escrowed amounts, never below zero |
| Reserved | Amounts held by outstanding drafts and approvals |
| Escrowed | Amounts held for escrow-before-work drafts ([requires execution (not enabled)](/docs/agents/concepts/payment-patterns)) |

## How agents see it

`get_account_summary` returns the available balance as the unreserved amount, and the `agentPaySpend` object breaks out all three buckets. Balances on the account summary are labelled sandbox.

## Rules

- **Prepare checks unreserved cash against the stored balance snapshot.** Today it warns (`cash_check` on the prepare result and on the approval card), using `unreserved_cash_insufficient` or `unreserved_cash_unknown`; it becomes a refusal with the same codes at a future execution launch. A snapshot older than 24 hours counts as unknown by default. The check includes all outstanding owner reservations and performs no provider read. No payment is sent by prepare.
- **Drafts reserve as soon as they are prepared.** Reserved cash counts toward the operator's daily and monthly limits.
- **Reservations are released** when a draft is rejected, expires, or is revoked.
- **Over-commitment fails closed.** If reservations exceed the balance, unreserved is zero.
- **A read error fails closed.** If reservations can't be read, the whole balance is treated as committed.

Reserving cash does not move it. Approve does not execute.
