REST API
Rate limits
Per-key limits keep the API healthy. Limits are enforced as rolling windows; clients should retry with backoff on 429s.
Default ceilings
| Window | Default | Notes |
|---|---|---|
| Per minute | 60 requests | Across all endpoints. |
| Per day | 1,000 requests | Across all endpoints. |
These are starting points. Per-key limits are configurable for paid plans — contact support for higher quotas.
When you hit a limit
The API returns:
http
HTTP/1.1 429 Too Many Requests
Retry-After: 12
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Retry after 12 seconds."
}
}
The Retry-After header tells you how long to wait, in seconds.
Recommended retry strategy
js
async function withBackoff(fn, max = 5) {
for (let i = 0; i < max; i++) {
const res = await fn();
if (res.status !== 429) return res;
const wait = Number(res.headers.get("retry-after") ?? 1) * 1000;
await new Promise((r) => setTimeout(r, wait));
}
throw new Error("Rate limit not cleared after retries");
}
Avoid retrying on 4xx other than 429 — those are caller errors.
Bulk operations
Instead of firing many requests in parallel, queue them and pace yourself. The API doesn't reward burstiness.