Skip to content

Rate Limits

The API enforces rate limits per API key to ensure fair usage and platform stability.


Limits

WindowLimit
Per second10 requests
Per minute200 requests

Both limits are enforced simultaneously. If either is exceeded, the request returns 429 Too Many Requests.


Rate Limit Headers

When a request is rate-limited, the response includes headers to help you retry:

HeaderDescription
Retry-AfterSeconds to wait before retrying
X-RateLimit-Limit-MinutePer-minute limit (200)
X-RateLimit-Limit-SecondPer-second limit (10)

Example 429 Response

HTTP/1.1 429 Too Many Requests
Retry-After: 3
X-RateLimit-Limit-Minute: 200
X-RateLimit-Limit-Second: 10
Content-Type: application/json
{"detail": "Rate limit exceeded. Please slow down."}

Retry Strategy

Use exponential backoff with the Retry-After header:

import time
import requests
def api_request(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code != 429:
return response
retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
print(f"Rate limited. Retrying in {retry_after}s...")
time.sleep(retry_after)
return response # Return last response if all retries exhausted

Best Practices

  • Use pagination with high limits — fetch 200 items per page instead of making 200 individual requests.
  • Add delays when paginating — a small delay (100-200ms) between page requests helps stay within limits.
  • Cache responses — if you fetch the same data repeatedly, cache it locally to reduce API calls.
  • Use backoff, not tight loops — when rate-limited, always respect the Retry-After header instead of retrying immediately.