Rate Limits
Understand rate limits per plan, how headers work, and strategies to stay within limits.
Limits by plan
Every API key is associated with a plan that determines your daily request allowance. Here are the current limits:
Limits reset daily at midnight UTC. Unused requests do not roll over to the next day.
Rate limit headers
Every API response includes headers that tell you where you stand against your limit:
X-RateLimit-Limit— Your daily request limit.X-RateLimit-Remaining— Requests remaining today.X-RateLimit-Reset— UTC timestamp of the next reset.
Example response headers:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 2026-03-12T00:00:00ZYou can read these headers programmatically to monitor your usage:
const res = await fetch(url, { headers: { "X-API-Key": key } });
const remaining = res.headers.get("X-RateLimit-Remaining");
console.log(`${remaining} requests left today`);Rate limit exceeded
When you exceed your daily limit, the API responds with a 429 status code and the following body:
{
"error": "Rate limit exceeded. Upgrade your plan for higher limits.",
"code": "RATE_LIMITED",
"limit": 100,
"resetAt": "2026-03-12T00:00:00Z"
}The resetAt field tells you when your limit will reset and you can resume making requests.
Strategies to stay within limits
Tips to minimize API calls
- Cache responses locally — many endpoints return slow-changing data that does not need to be fetched on every request.
- Use
per_page=100— fetch more data per request to reduce the total number of calls. - Check
X-RateLimit-Remaining— inspect the header before making requests to avoid hitting the limit unexpectedly. - Use conditional requests — when possible, leverage caching headers to avoid re-fetching unchanged data.
GET responses are already cached server-side to reduce load: 60 seconds for programs, 5 minutes for categories, and 2 minutes for reviews and organizations. Take advantage of this by spacing out repeated requests for the same resource.