payment. Every spending run reserves its full max_spend_usd
against your balance before the engine dispatches anything. This request’s
reservation exceeded the available balance — which is credits minus open
reserves (other runs currently in flight hold their ceilings too). Nothing ran and
nothing was charged.
The shape
balance_usd is what’s available, open_reserves_usd is what
in-flight runs are holding. top_up_url is where to add credit.
How to fix
- Top up at
top_up_url. Credits never expire. - Or lower
max_spend_usd— the reservation is the ceiling you asked for, not a price; runs settle at measured actuals and release the rest. A smaller honest budget often fits. - If
open_reserves_usdis the culprit, wait for in-flight runs to settle (their unspent reservation releases at terminal) — or stop one. - To get ahead of this error, subscribe a webhook to
balance.low— it fires when your balance crosses your threshold, before the 402.
Reproduce it
Deterministic on anfn_test_ key with the
FN_TEST_402 sentinel — same envelope, $0: