Plans and limits
What each CortexDB Cloud plan allows (memories, recalls, answers, tenants, request rate), what counts against it, and the 402 and 429 answers past a limit.
Every CortexDB Cloud account is on a plan. The server enforces it: past a limit a request is refused and nothing is done, so a limit is never a surprise bill. Prices are on cortexdb.ai/pricing; you change plans from your dashboard.
| Free | Starter | Pro | Enterprise | |
|---|---|---|---|---|
| Memories | 10,000 | 100,000 | 1,000,000 | Custom |
| Recalls a month | 1,000 | 25,000 | 150,000 | Custom |
| Answers a month | 100 | 2,500 | 15,000 | Custom |
| Tenants | 1 | 5 | 20 | Custom |
| Requests | 60 a minute | 300 a minute | about 1,000 a minute | about 5,000 a minute, or custom |
Self-hosted servers have no plan and no limits; everything on this page is about the cloud.
What counts
- Memories are the memories your account stores, each up to 2,000 characters of its text (a
memory's
text, a blob'stranscript, otherwise its serialized content). A longer memory counts once per started 2,000 characters: 5,000 characters count 3. Writes (/v1/experience, each item of/v1/experience/bulk) add to the count; forgetting or erasing memories gives the room back. - Recalls are
POST /v1/recalland/v1/recall/streamrequests, one each however many passes they make (and a/v1/answersent withskip_answer_llm, which never reaches the model). - Answers are
POST /v1/answerandPOST /v1/compose, the requests that reach the answer model. They count against their own allowance, never against recalls. - Tenants are the scopes one level under your account, such as
org:acct_42/user:acct_42ororg:acct_42/app:support(Tenants on the cloud). Your first is the one your account starts with. - Listing memories, reading one by id, and the account's own plan (
GET /v1/plan) count against none.
Recalls and answers count per calendar month in UTC and start again on the first.
Your plan and usage
GET /v1/plan answers your account's plan, its limits (null is unlimited) and what you have used:
curl -sS https://api.cortexdb.ai/v1/plan \
-H "Authorization: Bearer $CORTEXDB_TOKEN" -H "X-Cortex-Actor: $CORTEXDB_ACTOR"{
"subtree": "org:acct_42",
"plan": "free",
"limits": {"max_memories": 10000, "max_recalls_month": 1000, "max_answers_month": 100, "max_tenants": 1,
"read_per_second": 1.0, "read_burst": 20.0, "write_per_second": 1.0, "write_burst": 20.0},
"usage": {"memories": 1234, "recalls_this_month": 56, "answers_this_month": 3, "tenants": 1},
"memory_unit_chars": 2000,
"month": "2026-10",
"resets_at": "2026-11-01T00:00:00+00:00",
"upgrade_url": "https://cortexdb.ai/pricing"
}Your dashboard shows the same numbers. Every response to your token also carries the month's recall
budget: X-RateLimit-Monthly-Limit, X-RateLimit-Monthly-Remaining and X-RateLimit-Monthly-Reset
(none on an unlimited plan).
Past a limit: 402 PLAN_LIMIT_REACHED
A request past a limit is refused before anything is done, with HTTP 402 and this body:
{
"error_code": "PLAN_LIMIT_REACHED",
"message": "the free plan of org:acct_42 allows 10000 stored memories; 10000 used. Upgrade at https://cortexdb.ai/pricing",
"details": {"limit": "memories", "used": 10000, "max": 10000, "plan": "free",
"subtree": "org:acct_42", "upgrade_url": "https://cortexdb.ai/pricing"},
"retriable": false,
"request_id": "req_…"
}details.limit | Refused | What to do |
|---|---|---|
memories | A write that would pass the memory limit. A bulk is refused whole (nothing in it is written). | Forget memories you no longer need, or upgrade. |
recalls_month | A recall past the month's recalls. resets_at says when the count starts again. | Wait for resets_at, or upgrade. |
answers_month | An answer or compose past the month's answers, with resets_at. Plain recalls keep working. | Recall instead, wait for resets_at, or upgrade. |
tenants | The first write to a new tenant past the plan's count. Existing tenants keep working. | Write into an existing tenant, or upgrade. |
retriable is false: the same request succeeds only after an upgrade, room is freed, or the month turns.
Too fast: 429 SUBTREE_RATE_LIMITED
Each plan has a request rate for your whole account, reads and writes counted apart (Free: 1 a second
with bursts of 20; Starter: 5 with 50; Pro: 17 with 100; Enterprise: 83 with 500). Recalls, answers and
compose count as reads; each written memory counts as a write. Past it a request answers
429 SUBTREE_RATE_LIMITED with Retry-After (whole seconds) and retriable: true, and nothing was done:
wait that long and send it again.
Changing plans
Upgrade from your dashboard or cortexdb.ai/pricing; the new limits apply within a minute. A cancelled plan keeps its limits until the paid period ends, then moves to Free, and your data stays. Above Free's limits nothing is deleted: writes and new tenants are refused until there is room again. For limits beyond Pro, talk to us.
CortexDB Cloud Quickstart
Sign up, create an API token and store and recall your first memory on CortexDB Cloud (api.cortexdb.ai), in curl, Python or TypeScript.
Tenants on the cloud
Keep apps, teams and your own customers apart under one CortexDB Cloud account with tenant scopes, and read across them on purpose.