Rate limits
Request and in-progress task limits, and how to stay within them.
Limits
All limits are per user: your API keys share the same allowance.
| Limit | Default | When exceeded |
|---|---|---|
| Create requests (creating tasks) | 60 per minute | 429 rate_limited |
Read requests (every GET) | 1 per second | 429 rate_limited |
| In-progress tasks (queued + running) | 10 at a time | 429 too_many_inflight_tasks |
Rate limit headers
| Header | Description |
|---|---|
X-RateLimit-Limit | Total requests allowed in the current window. |
X-RateLimit-Remaining | Requests left in the current window. |
X-RateLimit-Reset | When the window resets, in Unix seconds. |
Retry-After | Only on 429 responses. Seconds to wait before retrying. |
On 429 rate_limited, retry after Retry-After seconds. On 429 too_many_inflight_tasks (details.limit holds the limit), create the next task once one of your queued or running tasks finishes.
Checking on tasks efficiently
- Prefer webhooks. The task object in
task.succeededortask.failedis complete; there's no need to fetch it again. See Webhooks. - Poll each task at most once every 15 seconds. Responses for in-progress tasks include
Retry-After: 15. - Check several tasks in one request with
GET /v1/tasks?ids=…(up to 20 IDs), not one request per task.
curl "https://api.nanoapi.ai/v1/tasks?ids=tk_01jb8z5q4w3e2r1t0y9u8i7o6p,tk_01jb8z7c2d4f6g8h0j2k4m6n8p" \
-H "Authorization: Bearer $NANOAPI_API_KEY"List and batch options: Tasks.