Skip to main content

Limits by plan

PlanRequests / monthRequests / minuteOverage
Starter500,000100$0.50 / 1K requests
Pro3,000,000500$0.30 / 1K requests
BusinessUnlimited2,000N/A

Response headers

Every response includes rate limit headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1711641600
HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining before the limit is reached
X-RateLimit-ResetUnix timestamp (seconds) when the window resets

Handling 429 errors

When you exceed the rate limit, the API returns 429 Too Many Requests:
{
  "success": false,
  "error": "Rate limit exceeded. Try again in 32 seconds.",
  "statusCode": 429
}

Backoff strategy

  1. Read the X-RateLimit-Reset header
  2. Wait until the reset timestamp
  3. Retry the request
For burst-heavy workloads, implement exponential backoff:
async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const res = await fetch(url, options);

    if (res.status !== 429) return res;

    const reset = res.headers.get('X-RateLimit-Reset');
    const waitMs = reset
      ? (parseInt(reset) * 1000) - Date.now()
      : Math.pow(2, i) * 1000;

    await new Promise(r => setTimeout(r, Math.max(waitMs, 1000)));
  }
  throw new Error('Rate limit exceeded after retries');
}

Monthly quota

Monthly request quotas reset on the 1st of each month (UTC). You can monitor usage in the Dashboard. When approaching the monthly limit, the API returns a warning header:
X-RateLimit-Monthly-Remaining: 12500