Skip to main content
Requests authenticated with an API key (the /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 returns 429 with a Retry-After header:
We recommend:
  • 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.