Rate Limits

Understand how rate limiting works, plan-based data access, and how to handle 429 responses.

Rate limits vary by plan. Use the GET /api/v1/limits endpoint to check your current tier and limits programmatically.
Per-Key Rate Limits
TierRequests / minBurst / sec
Free302
Builder25012
Pro75040
EnterpriseCustomCustom

Per-minute uses a sliding window. Burst uses a token bucket.

Plan-Based Data Access

Free and Builder tier users have restricted access to the most recent markets. Pro and Enterprise tiers have unlimited access to all markets and snapshots.

Market TypeFreeBuilderPro / Enterprise
5m204,100Unlimited
15m101,400Unlimited
1hr0350Unlimited
4hr085Unlimited
24hr014Unlimited

When a list query exceeds your tier's cap, the response limit is clamped and a warning field is included.

API Key Limits

The number of active API keys you can hold depends on your plan. Revoked or expired keys do not count toward the limit.

1
Free
3
Builder
10
Pro
Unlimited
Enterprise
Rate Limit Headers

Every response includes rate limit headers so you can track your usage in real-time.

X-RateLimit-Limit: 250
X-RateLimit-Remaining: 237
X-RateLimit-Reset: 1740800060

Handling 429 Responses

When you exceed your rate limit, the API returns a 429 status code with a Retry-After header indicating how many seconds to wait. The response body includes error, message, and retry_after fields.

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", 2 ** attempt))
            time.sleep(wait)
            continue
        return response
    raise Exception("Rate limit exceeded after retries")
403 Forbidden — Data Access

If you attempt to access a market or its snapshots that falls outside your tier's data window, the API returns 403 Forbidden. Upgrade your plan or access a more recent market.

{
  "error": "Forbidden",
  "message": "Your free plan only includes the most recent markets for this type. Upgrade for full access.",
  "tier": "free"
}