Skip to main content

Two budgets, both counted

Every request spends from two budgets at once:
  • the key’s own, so one runaway script cannot use up everything;
  • the workspace’s, shared by every key in the workspace and every MCP sign-in connection, so ten keys cannot multiply the workspace’s ceiling.
Both are counted on every request, and a request is refused when either is empty. Each key’s line on Workspace settings → API keys shows its own limit. There is also a ceiling per calling address on the /v1 routes. It sits well above a key’s budget, so a single job meets the key and workspace budgets first.

Report pages weigh more

A page of the brands, domains or URLs report costs about as much to build as several ordinary reads, so it counts as several requests against both budgets. The table above gives the weight. The MCP report tools count the same as their REST routes, and the RateLimit-* headers on the response include the whole weight. An MCP report tool that would go over a budget, or that is refused as busy (below), does not get an HTTP 429 or Retry-After: it answers with an error result whose text starts rate_limited or busy.

One report at a time per workspace

Run report requests one after another, not side by side. While one of your workspace’s report requests is running, a second one gets 503 with the code busy at once. When the API is already building as many reports as it allows for everyone, a new request waits briefly and then gets busy too. busy is not a rate limit: your budgets are untouched, and the Retry-After header says how many seconds to wait before trying again. (A 503 with the code query_timeout is different: the request asked for too much at once, and retrying it unchanged is likely to time out again. See Errors.)

Reading your budget

Every authenticated response carries: A refused request is 429 with the code rate_limited, and a Retry-After header giving the seconds to wait.
Pace yourself from RateLimit-Remaining rather than waiting to be refused. A nightly job that reads one day at a time stays inside every budget: see Pulling data nightly.

Limits only widen

Every limit in the table is a floor. Inside v1 a limit may be raised and is never lowered, so a job that fits today keeps fitting. The weight of a report page is a cost rather than a limit, so it is not part of that promise. See Versioning.

Reports

Budgets in prompt-engine-days, and paging.

Errors

rate_limited, busy and query_timeout.

Pagination

Cursors and page sizes.

Pulling data nightly

A daily job that fits on every plan.