Getting Started
Rate limits
Two quotas apply per key: per-minute and per-day. Both are checked on every request and reported in response headers so clients can back off gracefully.
Quotas by tier
| Tier | Per minute | Per day | History window |
|---|---|---|---|
| Trial | 10 | 1,000 | 7 days |
| Starter | 60 | 10,000 | 90 days |
| Pro | 300 | 100,000 | 3 years |
| Enterprise | 600 | Unlimited | 10 years |
Both limits are enforced on a rolling window. Exceeding either returns 429 quota_exceeded with a Retry-After header (seconds until the next slot frees up).
Response headers
Every 2xx and 429 response includes:
X-RateLimit-Limit-Minute: 60
X-RateLimit-Remaining-Minute: 58
X-RateLimit-Limit-Day: 10000
X-RateLimit-Remaining-Day: 9842
X-Tier: starter
Retry-After: 12 # only on 429Limitfields are constant for a given tier — useful as a sanity check but you can hard-code them.Remainingfields are the authoritative source of truth. Always read them instead of counting requests client-side.X-Tiertells you which plan billed the request. Helpful in logs when you upgrade and want to confirm the key picked up the new tier.
Handling 429s
Back off based on Retry-After. Exponential backoff with jitter is the safest default:
import time, random, requests
def get(url, key, attempt=0):
r = requests.get(url, headers={"X-API-Key": key}, timeout=10)
if r.status_code == 429 and attempt < 5:
delay = int(r.headers.get("Retry-After", 2 ** attempt))
time.sleep(delay + random.random())
return get(url, key, attempt + 1)
r.raise_for_status()
return r.json()Pre-emptive throttling is cheaper than retrying
Once X-RateLimit-Remaining-Minute drops below ~10% of the limit, pause your worker loop until the next minute boundary instead of pounding through the remaining budget.
Burst behavior
The per-minute limit is a hard ceiling — bursts above it are rejected immediately, not queued. The per-day limit is informational until exhausted, then also hard-rejects.
If you need sustained throughput above your tier's per-minute limit, upgrade to the next tier or contact sales for a bespoke limit.
