Your current limits are in the
plan object of GET /v1/account:
Rate limit headers
Authenticated responses carry the state of the current minute window:
Every
429, and every 503 service_unavailable, also carries Retry-After: the number of seconds to wait before you retry.
Concurrent tasks
The concurrency cap counts the tasks of your account that arequeued or processing right now. A task stops counting as soon as it reaches completed, failed or cancelled. When you hit the cap:
- wait for running tasks to finish (
Retry-Aftersuggests a delay), or - cancel tasks you no longer need. Cancelling frees the slot and releases the credits at once.
Polling
GET /v1/tasks/{task_id} counts against the request limit like any other call, so a tight polling loop is the easiest way to hit 429 rate_limit_exceeded. On the standard plan (300 requests per minute):
Poll each task every 5–10 seconds and back off to 30 seconds for long generations; a
429 tells you to wait Retry-After seconds. To follow more tasks, call GET /v1/tasks?status=processing (one request returns up to 100 tasks) or use webhooks, which need no polling at all.
Stay within the limits
- Poll gently. Polling counts like any other request: poll each task every 5–10 seconds with backoff (see Polling), or let webhooks tell you.
- Queue on your side. Keep your own queue of pending jobs and submit only while queued + processing tasks are below
plan.max_concurrent_tasks. - Honor
Retry-Afteron every429and503, and retry with the sameIdempotency-Key. - Watch
X-RateLimit-Remainingand slow down before it reaches zero.