Rate Limits
Limits by tier
| Tier | Requests/min | Burst |
|---|---|---|
| Trial (100 free credits) | 60 | 10 |
| Credit Packs (paid) | 300 | 50 |
| Metered (pay-as-you-go) | 300 | 50 |
| Enterprise | Custom | Custom |
Burst is the maximum number of concurrent requests in a single second.
Rate limit headers
Every response includes these headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute for your tier |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Handling 429 responses
When you exceed the rate limit, the API returns a 429 status with a RATE_LIMITED error code. The X-RateLimit-Reset header tells you when you can retry.
const res = await fetch(url, options);
if (res.status === 429) {
const resetAt = parseInt(res.headers.get("X-RateLimit-Reset"));
const waitMs = (resetAt * 1000) - Date.now();
console.log(`Rate limited. Retrying in ${Math.ceil(waitMs / 1000)}s`);
await new Promise(r => setTimeout(r, waitMs));
// Retry the request
}Best practices
- Cache responses client-side. Image responses are cached server-side for 24 hours, so identical requests within that window are free.
- Use geographic filters (
country,state,city) to reduce response size and improve latency. - For bulk operations, space requests evenly rather than bursting. A 200ms delay between calls keeps you well under all tier limits.