Guides
Rate Limits
Request limits per plan and how to handle 429 responses.
Limits by plan
Rate limits apply per organization across all API keys.
| Plan | Requests / minute | Monthly credits |
|---|---|---|
| Free | 10 | 100,000 |
| Starter | 60 | 1,000,000 |
| Pro | 300 | 10,000,000 |
| Enterprise | 1,000+ | 100,000,000+ |
Response headers
Every response includes rate limit headers:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1718841660
Handling 429
When the rate limit is exceeded, the API returns 429 Too Many Requests:
{
"error": "rate_limit_exceeded",
"message": "Too many requests. Retry after 12 seconds.",
"retry_after": 12
}
Implement exponential backoff:
async function fetchWithRetry(url: string, key: string, retries = 3) {
for (let i = 0; i < retries; i++) {
const res = await fetch(url, {
headers: { Authorization: `Bearer ${key}` },
});
if (res.status !== 429) return res;
const retryAfter = Number(res.headers.get("Retry-After") ?? 5);
await new Promise((r) => setTimeout(r, retryAfter * 1000 * (i + 1)));
}
throw new Error("Max retries exceeded");
}
Upgrade
If you consistently hit rate limits, upgrade your plan.