Skip to content

Using the API

Rate limits

Requests per minute by plan and kind of request, and how to back off.

API keys share limits per organization: every key of every project in it draws from the same pools. Each pool counts requests per minute.

Kind of requestFreeProScaleEnterprise
Standard: tables, columns, rows, batches, webhooks603001,2001,200
AI: extraction and schema suggestions1030100200
Bulk row writes103060120
Downloads and exports103060120

Which pool an endpoint draws from:

When you hit a limit

The request fails with 429 and error_key: "too_many_requests". Wait and retry with exponential backoff and jitter:

async function withRetry<T>(call: () => Promise<{ data: T | null; status: number }>): Promise<T | null> {  for (let attempt = 0; ; attempt++) {    const result = await call()    if (result.status !== 429 || attempt === 5) return result.data    const delay = Math.min(30_000, 500 * 2 ** attempt) * (0.5 + Math.random())    await new Promise((resolve) => setTimeout(resolve, delay))  }}
Tip

Many writes at once? One bulk request counts once against its pool, however many rows it carries.

Plans also cap totals per month (API requests, extraction credits, exported rows) and sizes (files per batch, file size, rows per table). Going past one returns 402 with the limit in vars; see Pricing (opens in a new tab).