Skip to main content
HTTP 402 · type 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

The figures are live: 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_usd is 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 an fn_test_ key with the FN_TEST_402 sentinel — same envelope, $0: