Rate Limits
The API allows a fixed number of requests per 10-minute window, per API key. The window slides continuously — it doesn’t reset on a fixed clock interval.
In practice: if you make 100 requests in the first minute on the Free plan, you must wait ~9 minutes before your first request exits the window and you can send another.
Limits by plan
Section titled “Limits by plan”| Plan | Requests | Window |
|---|---|---|
| Free | 100 | 10 minutes |
| Pro | 1,000 | 10 minutes |
Response headers
Section titled “Response headers”Every API response includes rate limit headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Max requests allowed in the window |
X-RateLimit-Remaining | Requests remaining in the current window |
Retry-After | Seconds to wait before retrying (only present on 429 responses) |
Rate limit exceeded
Section titled “Rate limit exceeded”When the limit is exceeded, the API returns 429 Too Many Requests:
{ "error": "rate_limit_exceeded", "message": "Rate limit exceeded", "code": "rate_limit_exceeded"}Unauthenticated requests (missing X-API-Key) are not counted — they return 401 directly.
Handling 429 in code
Section titled “Handling 429 in code”Read the Retry-After header and pause before retrying. Use exponential backoff for repeated 429s:
import time, requests
def api_call_with_retry(url, headers, max_retries=3): for attempt in range(max_retries): resp = requests.get(url, headers=headers) if resp.status_code == 429: retry_after = int(resp.headers.get("Retry-After", 60)) time.sleep(retry_after * (2 ** attempt)) # exponential backoff continue return resp raise Exception("Rate limit retries exhausted")Upgrade
Section titled “Upgrade”Upgrade to Pro from your dashboard to get 10× the rate limit.