Limits and allowances
This page lists each plan’s allowances, what counts against them and the size limits that apply to every request. Rate limits set how fast you can send requests.
Allowances by plan
Section titled “Allowances by plan”| Plan | Price per month | Reads per month | Writes per month | Stored memories | Projects |
|---|---|---|---|---|---|
| Free | $0 | 10,000 | 1,000 | 500 | 3 |
| Starter | $20 | 50,000 | 5,000 | 5,000 | 10 |
| Growth | $99 | 300,000 | 30,000 | 50,000 | Unlimited |
| Scale | $499 | 3,000,000 | 250,000 | 500,000 | Unlimited |
Allowances apply to the whole account, across all its projects. Monthly allowances reset at 00:00 UTC on the first day of each month. Custom plans have allowances set for your workloads.
What counts
Section titled “What counts”| Request | Reads used |
|---|---|
Context: POST /v1/memories/context |
5 |
Inspect: GET /v1/memories/{memory_id}/inspect |
3 |
| Recall, search and get | 1 |
Each page of a list: GET /v1/memories |
1 |
MCP context and inspect_memory |
5 and 3 |
Other MCP read tools and the alvia://memory/{memory_id} resource |
1 |
A read counts when it completes, whatever it returns: a context or inspect 404 uses its
reads too. A read refused with 400 for bad input, or that fails with a 5xx, uses none. A
read is refused when fewer reads are left than it costs, so a context call needs five.
Writes
Section titled “Writes”| Request | Writes used |
|---|---|
POST /v1/memories with infer: false |
1 |
POST /v1/memories with infer: true (the default) |
1, plus 1 for each fact formed from the passage |
POST /v1/memories/import |
1 for each chunk of the conversation, plus 1 for each fact formed from it |
MCP remember |
The same as POST /v1/memories |
| Forget and feedback | 0 |
| A repeat sent while the first copy is still forming | 0 |
Every accepted write counts, whether it forms new memories, matches existing ones or forms none, except a repeat sent while the first copy is still forming.
Stored memories
Section titled “Stored memories”Each active memory counts once, however many versions it has. A forgotten memory stops counting. The stored-memory limit does not reset each month.
Demo Project and Playground
Section titled “Demo Project and Playground”Every new account starts with a Demo Project of sample memories. It does not count toward the project limit, and its sample memories do not count toward the stored-memory limit. Memories you add to it count as usual.
Calls you run from a project’s Playground in the dashboard count like any other call: List, Search, Recall and Context use reads, and Create uses writes.
When you reach an allowance
Section titled “When you reach an allowance”| Error | Cause |
|---|---|
429 rate_limit_exceededmonthly_read_quota_reached |
The monthly read allowance is used up. Reads are refused until the allowance resets or you upgrade. |
429 rate_limit_exceededmonthly_write_quota_reached |
The monthly write allowance is used up. Writes are refused until the allowance resets or you upgrade. |
409 conflictmemory_limit_reached |
The account holds its plan’s stored-memory limit. New writes are refused until you forget memories or upgrade. |
This applies on every plan. There are no overage charges.
A monthly 429 refusal carries limit, used and resets_at, and a Retry-After header with
the seconds until the reset:
{ "type": "https://alvia.ai/docs/errors/#rate_limit_exceeded", "title": "Rate limit exceeded", "status": 429, "detail": "This account has used its monthly write allowance.", "instance": "/v1/memories", "code": "rate_limit_exceeded", "reason": "monthly_write_quota_reached", "limit": 1000, "used": 1000, "resets_at": "2026-11-01T00:00:00Z"}- A passage or import that reaches the write allowance partway forms what fits in the remaining
allowance, in order, and returns
202. The response does not say what was left out. Check the remaining allowance in the dashboard before a large import. See Cost in Import conversations. - Forget and feedback are never refused by an allowance, so you can always free stored memories.
Size limits
Section titled “Size limits”| Item | Limit |
|---|---|
| Request body | 5 MiB |
content on POST /v1/memories |
1 to 32,000 characters |
content with infer: false |
1 to 1,000 characters |
query on context, recall and search |
1 to 1,000 characters |
limit on search |
1 to 50, default 25; values outside are clamped |
limit on list |
1 to 20, default 10 |
| Each scope field | 128 characters |
| Messages in one import | 1 to 500 |
| Each imported message | 16,000 characters |
| All messages in one import | 320,000 characters |
| Characters without a space in a message | 2,000 |
speaker on an imported message |
128 characters |
Character counts are UTF-16 code units, as in JavaScript’s string.length. Some characters, such
as emoji, count as two.
Search’s limit is clamped to its range. A request over another size limit gets a 400 response
with code validation_error, a 400 with code invalid_argument for a conversation too large to
process, or a 413 response when the body is over 5 MiB.