rate_limit. Spending POSTs (creates, turns, refreshes,
estimates) are limited per key — 60/minute on a new account. You’ve exceeded that
rate. Nothing was charged.
Two things are deliberately not limited this way:
- Reads (GET) are not rate-limited at all — polling is never the thing we throttle.
- Expensive work is limited by concurrency, not rate — that’s the separate
concurrency_cap.
The shape
Retry-After, plus x-ratelimit-limit,
x-ratelimit-remaining, and x-ratelimit-reset.
How to fix
- Honor
Retry-After(orretry_after_s) with backoff. Retrying a spending POST is safe when you send the sameIdempotency-Key— a replay never bills twice. - Watch
x-ratelimit-remainingand pace proactively instead of bouncing off the limit. - If you’re burning the bucket on
POST /v1/sessions/estimate(it’s free but sits in the spending-POST bucket as its only guard), batch or debounce your quoting. - Sustained legitimate volume above the default? Ask us to raise the key’s limit.
Reproduce it
Hammer the free estimate endpoint past 60/min on anfn_test_ key ($0):