Skip to main content
The API enforces two independent rate limits:
LimitScopeWindow
100 req/minPer API keyRolling 60s
200 req/minPer IP addressRolling 60s
The IP limit is applied before API key validation. The key limit is applied after.

Response headers

Every authenticated response includes:
HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets

Handling 429

When you exceed the limit the API returns 429 Too Many Requests:
{
  "http_code": 429,
  "status": "failed",
  "message": "Rate limit exceeded"
}
Use the X-RateLimit-Reset or Retry-After header to determine when to retry.
async function fetchWithRetry(url, options, retries = 3) {
  const res = await fetch(url, options);

  if (res.status === 429 && retries > 0) {
    const reset = res.headers.get('X-RateLimit-Reset');
    const waitMs = reset ? (Number(reset) * 1000 - Date.now()) : 1000;
    await new Promise(r => setTimeout(r, Math.max(waitMs, 0)));
    return fetchWithRetry(url, options, retries - 1);
  }

  return res;
}