CortexDB Docs
Docs for CortexDB 0.12.8, the version running on CortexDB Cloud (api.cortexdb.ai).
CortexDB Cloud

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.

FreeStarterProEnterprise
Memories10,000100,0001,000,000Custom
Recalls a month1,00025,000150,000Custom
Answers a month1002,50015,000Custom
Tenants1520Custom
Requests60 a minute300 a minuteabout 1,000 a minuteabout 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's transcript, 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/recall and /v1/recall/stream requests, one each however many passes they make (and a /v1/answer sent with skip_answer_llm, which never reaches the model).
  • Answers are POST /v1/answer and POST /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_42 or org: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.limitRefusedWhat to do
memoriesA 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_monthA recall past the month's recalls. resets_at says when the count starts again.Wait for resets_at, or upgrade.
answers_monthAn answer or compose past the month's answers, with resets_at. Plain recalls keep working.Recall instead, wait for resets_at, or upgrade.
tenantsThe 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.

On this page