/v1/worlds, /v1/characters
CRUD, vision, editing, versions, and /v1/sessions/token routes) are
rate-limited per key on a rolling 60-second window. Limits protect shared
capacity. They’re separate from your daily quota.
The browser runtime routes that authenticate with a session token instead
(/v1/sessions/connect, /track, /end, /refresh, and the character
/say, /tts, /image turns) are not on this per-minute limiter. They’re
bounded by your daily quota and the live-session concurrency cap
(which returns 429 on /sessions/connect). Per-IP caps apply on some of
those surfaces, not as a blanket limit on these routes.
Reading the headers
API-key-authenticated responses carry your remaining budget for the current window:Handling 429
When you exceed the limit the API returns429 with a Retry-After header:
- Pause before retrying. If the response includes
Retry-After, wait at least that long. - Retry with exponential backoff and jitter.
- Reduce concurrency if you keep hitting the limit.
A request that returns
429 was not accepted. Nothing was created or
charged, so it’s always safe to retry.
