Rate limits

Rate limits

Requests are throttled per API key. Use response headers to monitor remaining quota and implement backoff on 429.

Last updated: April 2026

Default limits

PlanRequests / minuteConcurrent jobs
Starter305
Growth12020
EnterpriseCustomCustom
Need higher limits? Contact business@number7ai.com to discuss an enterprise plan.

Rate limit headers

Every response includes these headers so you can monitor quota in real time:

HTTP
X-RateLimit-Limit:     120      # max requests per window
X-RateLimit-Remaining: 48      # remaining in current window
X-RateLimit-Reset:     1713784800  # Unix timestamp when window resets

Handling 429 — Too Many Requests

When you receive a 429, wait before retrying. Use truncated exponential backoff:

TypeScript
async function withRetry<T>(fn: () => Promise<T>, maxAttempts = 4): Promise<T> {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    try {
      return await fn();
    } catch (err: any) {
      if (err?.status !== 429 || attempt === maxAttempts - 1) throw err;
      const waitMs = Math.min(30_000, 1_000 * 2 ** attempt);
      await new Promise((r) => setTimeout(r, waitMs));
    }
  }
  throw new Error("Max retries exceeded");
}
Python
import time, requests

def call_with_retry(fn, max_attempts=4):
    for attempt in range(max_attempts):
        res = fn()
        if res.status_code != 429:
            return res
        if attempt == max_attempts - 1:
            res.raise_for_status()
        wait = min(30, 1 * (2 ** attempt))
        time.sleep(wait)
    raise RuntimeError("Max retries exceeded")