Rate Limits¶
API requests are rate-limited based on your subscription plan. Limits are enforced per API key, per toolkit.
How Limits Work¶
Rate limits are applied using a sliding window. When you exceed your limit, the API returns a 429 Too Many Requests response:
{
"detail": "Rate limit exceeded. Please try again later."
}
Rate Limit Headers¶
Every response includes headers to help you track your usage:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Maximum requests allowed in the current window |
X-RateLimit-Remaining |
Requests remaining in the current window |
X-RateLimit-Reset |
Unix timestamp when the window resets |
Typical Limits by Plan¶
Note
Exact limits vary by toolkit. Check each toolkit's pricing page for specific numbers.
| Plan | Requests | Window |
|---|---|---|
| Free | 100 – 500 | Per day |
| Basic / Pro | 10,000 – 50,000 | Per month |
| Ultra | 100,000+ | Per month |
Handling Rate Limits¶
Best practices for dealing with rate limits in production:
import httpx
import time
def call_api(url, payload, api_key, max_retries=3):
"""Call an API endpoint with exponential backoff on rate limits."""
for attempt in range(max_retries):
r = httpx.post(
url,
headers={"X-API-Key": api_key},
json=payload,
)
if r.status_code == 429:
wait = 2 ** attempt
time.sleep(wait)
continue
r.raise_for_status()
return r.json()
raise Exception("Rate limit exceeded after retries")
Tip
If you consistently hit rate limits, consider upgrading your plan or implementing request queuing.