Rate limits & quotas
Cached reads are effectively unlimited; live acquisition is paced by our own pool and queued.
The honest version: served-from-cache reads are cheap and fast; a live, uncached pull is paced.
We don't advertise a big live requests-per-minute number, because a live rate depends on our acquisition pool. What we guarantee is: repeated queries hit our corpus in milliseconds, and bursty work is queued rather than failed.
Two limits
- Per-minute — protects the pool when a key goes live-heavy. Free 10/min, Developer 30/min, Pro 60/min, Scale 120/min.
- Monthly — total requests per calendar month on the plan (Free 100, Developer 2,000, Pro 10,000, Scale 50,000).
Failed requests are not charged. Check remaining quota any time via GET /v1/usage or the X-Usage-Remaining header.
Caching
Identical queries are served from our corpus for a short TTL (default 15 min). Responses carry cache: { served, source, ttlSec } so you always know whether you hit cache or went live.
When you exceed a limit
You get 429 with {"error":"quota_exceeded"}. For bursts, use the async queue instead of retrying in a loop.
Response headers
You never have to guess your remaining allowance — every metered call returns it:
| Header | Meaning |
|---|---|
X-Usage-Limit | Monthly allowance on your plan. |
X-Usage-Remaining | Requests left this calendar month. |
X-RateLimit-Limit | Per-minute allowance (or “unlimited”). |
X-RateLimit-Remaining | Requests left in this minute window. |
X-RateLimit-Reset | Seconds until the minute window resets. |
Credits & rollover
- Failed requests are never charged — a 4xx/5xx does not consume quota.
- Cache hits cost you a request but are billed at the same metered unit as live pulls, so pricing stays predictable.
- Monthly reset, no rollover — your allowance refreshes at the start of each calendar month. Unused requests do not carry forward.
- Need more mid-cycle? Upgrade — the new allowance applies immediately, and overage credits can be arranged on high-volume plans.