API requests are rate-limited to ensure fair usage and platform stability.
Rate Limits by Plan
| Plan | Requests/Day | Requests/Minute |
|---|---|---|
| Starter | 10,000 | 60 |
| Growth | 50,000 | 300 |
| Professional | 100,000 | 600 |
| Enterprise | Custom | Custom |
Rate Limit Headers
Every API response includes headers with your current rate limit status:
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9542
X-RateLimit-Reset: 1705334400| Header | Description |
|---|---|
| X-RateLimit-Limit | Your daily request limit |
| X-RateLimit-Remaining | Requests remaining today |
| X-RateLimit-Reset | Unix timestamp when limit resets |
Rate Limit Exceeded
When you exceed the rate limit, you'll receive a 429 Too Many Requests response:
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Retry after 60 seconds.",
"retry_after": 60
}
}Best Practices
Implement Exponential Backoff
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || 60;
await new Promise(r => setTimeout(r, retryAfter * 1000));
continue;
}
return response;
}
throw new Error('Max retries exceeded');
}Cache Responses
Cache API responses when possible to reduce request frequency.
Use Webhooks
Instead of polling, use webhooks for real-time updates.