Rate Limits
Rate limits protect the API from abuse and ensure fair usage across all customers. Limits are applied per API key and vary by subscription tier.
Limits by Tier
| Tier | Requests / Minute | Requests / Day | Scopes |
|---|---|---|---|
| Free | 10 | 100 | Read-only |
| Starter | 60 | 5,000 | All |
| Pro | 120 | 50,000 | All |
| Enterprise | 300 | Unlimited | All |
Rate Limit Headers
Every API response includes rate limit information in the response headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute for your tier |
X-RateLimit-Remaining | Remaining requests in the current minute window |
X-RateLimit-Reset | Unix timestamp when the minute window resets |
X-RateLimit-Daily-Remaining | Remaining requests for the current day |
Retry-After | Seconds to wait before retrying (only on 429 responses) |
Handling Rate Limits
When you exceed the rate limit, the API returns a 429 Too Many Requests response:
429 Response
{
"error": "Rate limit exceeded",
"detail": "Maximum 60 requests per minute for starter tier",
"retry_after": 12
}Retry Strategy
Implement exponential backoff with the Retry-After header:
Python
import time
import requests
def api_request(url, headers, max_retries=3):
for attempt in range(max_retries):
resp = requests.get(url, headers=headers)
if resp.status_code != 429:
return resp
retry_after = int(resp.headers.get("Retry-After", 5))
time.sleep(retry_after * (2 ** attempt))
return respBest Practices
- Cache responses when possible to reduce API calls.
- Monitor the
X-RateLimit-Remainingheader to preemptively throttle requests. - Use exponential backoff when retrying after a 429 response.
- Batch operations where possible instead of making many individual requests.
- Contact us if you consistently need higher limits — we offer custom enterprise plans.