Rate Limits

API rate limits and how to handle them.

Rate Limits

Rate limits vary by plan tier. When you exceed your limit, the API returns HTTP 429 with a Retry-After header.

Limits by plan

PlanRequests/minuteRequests/day
Free301,000
Pro12050,000
EnterpriseCustomCustom

Rate limit headers

Every response includes these headers:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1714567890

Handling 429 responses

import time
import requests

def fetch_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        if response.status_code == 429:
            wait = int(response.headers.get("Retry-After", 60))
            time.sleep(wait)
            continue
        return response
    raise Exception("Rate limit exceeded after retries")

Best practices

  • Cache responses locally when possible
  • Use bulk endpoints (export bundle, library) instead of per-series calls
  • Spread requests evenly rather than bursting