Rate Limits
Default Limits
- 1,000 requests per hour per API key
- Rate limits reset every hour based on your first request
Rate Limit Headers
Rate limit information is included in all API responses:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per hour |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when limit resets |
Handling Rate Limits
When rate limited, you'll receive a 429 Too Many Requests response:
{
"error": "Rate limit exceeded. Try again in 1234 seconds."
}
The response includes a Retry-After header indicating how many seconds to wait.
Best Practices
- Cache responses when possible to reduce API calls
- Implement exponential backoff when retrying failed requests
- Monitor your usage using the rate limit headers
- Batch operations where the API supports it
Example: Handling Rate Limits
Python:
import requests
import time
def make_request(url, headers):
response = requests.get(url, headers=headers)
if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
print(f"Rate limited. Waiting {retry_after} seconds...")
time.sleep(retry_after)
return make_request(url, headers)
return response
JavaScript:
async function makeRequest(url, headers) {
const response = await fetch(url, { headers });
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get('Retry-After') || '60');
console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
await new Promise(r => setTimeout(r, retryAfter * 1000));
return makeRequest(url, headers);
}
return response;
}