- Rate limits — how many requests you can make to certain endpoints within a time window. They reset as the window rolls over.
- Usage quotas — caps on how much a workspace uses: the number of objects it ingests and the size of each one, and the number of questions it asks. These counts don’t reset with time, and deleting data doesn’t lower them; you upgrade.
Flex plan limits
Paid plan limits
Paid workspaces keep generous per-minute caps on the two query endpoints and the shared ingest ceiling. They are sized well above normal usage and exist to stop runaway retry loops, not to meter your traffic. Everything else — usage quotas, shared workspaces, snapshots,refresh — is uncapped.
Rate limits
The per-minute and per-hour endpoints above are request-rate limited per workspace. When you exceed one, the API returns429 Too Many Requests with an
RFC 9457 application/problem+json body and
standard RateLimit-* headers:
Retry-After seconds, then retry — ideally with exponential backoff and jitter for
bursts of calls. RateLimit-Remaining tells you how many requests are left in the
current window, so you can pace ahead of the limit.
Usage quotas
Ingestion is bounded by the object limit and the per-document size cap. These are checked when you push data and when connected sources sync, separately from the ingest rate limit above (which counts requests, not items), and — unlike rate limits — retrying won’t clear them. The object limit counts the distinct objects a workspace has ever ingested. An object is one item from one source — an email, a file, a message, or an item you push with itsexternal_id — and it counts the first time it’s ingested. Sending it again, for example to
update it, doesn’t count it again and is accepted even at the limit. Deleting it doesn’t take
it back: the limit counts what you’ve brought in, not what you hold now.
Because an ingest request can carry many items, the response tells you per item what
happened.
Partial acceptance — some items fit under the cap, some don’t. You get 200,
and the over-cap items are listed in rejected (the rest are ingested normally):
402 Payment Required, and nothing is ingested:
resource identifies which cap it hit — documents for the object
limit, or doc_size — in both the partial (200) and full (402) responses. A file upload is a
single document, so a rejected upload always returns 402.
A
402 is not retryable the way a 429 is — the request didn’t fail
transiently, your workspace is over its quota. Deleting data doesn’t give back object
headroom; upgrade, then retry. An oversized document needs to be made smaller.Asks
The ask allowance counts every question a workspace asks, ever:POST /v1/knowledge/ask, its streaming and async-job
variants, and the MCP ask tools all draw on it. An ask counts when it’s made. One that fails
to produce an answer — an error, or the notice that your data is still being processed —
doesn’t count. Polling an async job is free.
Once the allowance is used up, asks return 402 Payment Required:
Workspace limits
On the Flex plan you can own one shared workspace in addition to your personal workspace (see Workspaces). Creating another returns422 Unprocessable Entity:
Checking your usage
CallGET /v1/usage/current to see where a workspace stands before you hit a limit.
The entitlements block reports your plan, a meter per resource, and your rate-limit
policies:
state is ok, approaching (≥ 80%), or exceeded. Poll this to show usage meters in
your app and to back off before you’re rejected. A null limit means that resource or
policy is uncapped for your plan: paid workspaces report null for the per-resource
limits and a limit only on the ask, search, and ingest rate-limit policies;
grandfathered workspaces carry a limit on ingest alone. The asks meter appears only on
plans that cap asks.
Upgrading
Paid plans remove the usage quotas and workspace caps above and raise the query rate limits to 30ask / 60 search per minute (ingest keeps its 120-per-minute ceiling) — see
Paid plan limits. Upgrade from your workspace settings in
mind.adapter.com.