What counts
An API request is any request made with one of the organization’s API keys: from your sites and apps, scripts, the CLI, the SDKs, and AI agents through the MCP server. Each counts once, whatever it returns, unless it was rate limited or refused because the month’s requests were used. These don’t count:- Working in the web app: editing, publishing, uploading, managing the team.
- Loading an asset’s file through its
image_url,file_urlormedia_url, including resized images. - Public search, which runs with a search token instead of an API key.
When the month’s requests are used
On Free
Requests made with the organization’s API keys are refused until the first of the next month. The API answers429 rate_limited, with a plan_limit detail and Retry-After set to the seconds until then:
The SDKs don’t wait that long: they raise (or throw)
RateLimitError at once, as for any Retry-After over 60 seconds.On paid plans
Nothing is refused. Responses carry aNohead-Usage-Warning header with the month’s usage and the plan’s limit, api_requests=2000312/2000000, until the month ends.
Going over now and then, for a launch, a traffic spike or a big import, is fine. If it happens most months, upgrade the plan, or on Business get in touch for limits that fit your traffic.
Emails to owners
The organization’s owners get an email on Free when 80% of the month’s requests are used and when they all are, and on paid plans when the plan’s included requests are used. Each goes out at most once a month.Making the most of your API requests
Most sites need far fewer requests than they make. In rough order of impact:- Fetch content when your site builds, or cache it. A page that calls the API on every view makes a request for every visitor. Fetch at build time, or cache responses on your server or CDN, and refresh them when content changes.
- Refresh on webhooks, not on a timer. A webhook tells you when a record is published or changed, so you fetch only then. Polling every minute is over 40,000 requests a month for each thing you poll, changed or not.
- Keep API calls out of apps people run. With a published-only key in a mobile app, every user’s requests count. Fetch through your server and cache instead. For search as you type, use public search, which doesn’t count.
- Get more from each request. List up to 100 records a page (
limit=100) instead of fetching them one by one, and embed related records and assets withexpandinstead of fetching them separately. - Change many records at once. Change many records (
POST /v1/collections/{collection_id}/record-batches) publishes, updates or deletes up to 100 records in one request. - Watch for loops. A script or agent that retries without stopping can use a month’s requests in hours. The Usage page shows the month so far, and
RateLimit-Remainingon every response shows the current minute’s.