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
| Plan | Requests / minute | Concurrent jobs |
|---|---|---|
| Starter | 30 | 5 |
| Growth | 120 | 20 |
| Enterprise | Custom | Custom |
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 resetsHandling 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")