Skip to content
agentics.you

Docs

Errors, limits and quotas

The limits agentics.you enforces today, the monthly quota on each plan, and every error code the memory REST API answers with.

Rate limits

SurfaceLimitWhen it is hit
MCP server, /mcp120 calls a minute per token or agent key429 with Retry-After. Wait that many seconds.
Memory REST API, /v1/300 requests a minute per client address429 rate_limited with Retry-After.
Memory REST API, per workspace600 writes and 300 searches a minute, across every key and session of the workspace. Reads are not counted.429 rate_limited with Retry-After.
Search meaning5,000 query embeddings a workspace per UTC daySearch still answers, by keyword only, with mode keyword and degraded ["dense_quota"].
Creating API keys20 a workspace per hour429.

Back off when you see 429: wait the Retry-After seconds, then retry with some jitter. Do not retry a 4xx other than 429. The request will fail the same way.

Monthly quotas

Plans are priced on actions. An action is a receipt written: a memory write, a decision, an approval, a handoff. Reads, recall and checking receipts are not actions, and agents are never counted.

PlanActions a monthPeople who sign in
Free10,0002
Pro100,0003
Team1,000,000Unlimited
EnterpriseSet by contractUnlimited

On Free, once the month's actions are used, new writes are refused until the 1st (UTC): MCP tools that write return a message that says so, and POST /v1/memories answers 402 plan_action_limit. Free also keeps at most 10,000 stored memories; past that, POST /v1/memories answers 402 plan_memory_limit. Pause all, rules, approvals, reads, search, deletes and checking receipts keep working. Paid plans are not stopped at the limit. See Pricing.

Sizes and pages

LimitValue
Request body8 MiB. Larger answers body_too_large.
Sensitive contentEmails, phone numbers, card and IBAN numbers, keys and tokens in content and metadata are stored as [redacted], unless the workspace is set to refuse them (content_rejected).
GET /v1/memories/exportA page stops at about 8 MiB of content and metadata. Follow next_cursor.
Memory content1,048,576 bytes of UTF-8 (1 MiB). Larger answers content_too_large.
Memory metadata65,536 bytes as JSON. Larger answers metadata_too_large.
GET /v1/memorieslimit 1 to 100, default 25. q up to 2,000 characters. Up to 100 namespace_id values.
POST /v1/memories/searchquery up to 2,000 characters. k 1 to 50, default 8. token_budget 200 to 32,000, default 4,000. Up to 100 namespace_ids.
page pagingUp to offset 10,000. Past that, use cursor (use_cursor_pagination).
Bulk delete1 to 1,000 ids per call.
NamespacesName 1 to 64 characters. Up to 1,000 per page.
Key bindingsUp to 1,000 namespaces per key.
MCP get_contextlimit 1 to 50. max_tokens 200 to 32,000, default 4,000.
MCP record_action_batch1 to 50 actions.
MCP subscribe50 subscriptions per agent.
MCP batch20 JSON-RPC messages per request.

Memory API error codes

Every error has the same shape. Match on code; the message is for people and can change.

json
{ "error": { "code": "content_too_large", "message": "content is 2000000 bytes; the limit is 1048576 bytes.", "details": { "limit_bytes": 1048576, "size_bytes": 2000000 } } }
CodeStatusMeaning and what to do
invalid_json400The body is not a JSON object.
invalid_name400A namespace name is empty, longer than 64 characters, or has control characters.
invalid_cursor400The cursor is not one this list returned. Start again without it.
invalid_move_to400move_to names the namespace being deleted. Name another one.
invalid_kind400An import's kind must be text, file or url.
invalid_content400content is missing or empty, or, on an import of kind text, not a string.
invalid_metadata400metadata is not a JSON object.
invalid_source400source is not a string.
invalid_namespace400namespace is not a string.
namespace_required400No namespace was named and the workspace has no default.
invalid_sort400sort must be newest.
invalid_pagination400cursor and page were both sent. Use one.
invalid_page400page must be 1 or more.
use_cursor_pagination400page went past offset 10,000. Use cursor.
invalid_ids400ids must be a non-empty list of memory ids.
too_many_ids400More than 1,000 ids in one bulk delete.
invalid_namespace_ids400namespace_ids must be a list of strings.
too_many_namespaces400More than 1,000 namespaces for one key.
invalid_query400Search query is missing, empty, or longer than 2,000 characters.
invalid_agent_id400Search agent_id is not a string.
invalid_k400Search k is not a whole number from 1 to 50.
invalid_token_budget400Search token_budget is not a whole number from 200 to 32,000.
invalid_filters400Search filters has an unknown key or a value of the wrong type.
unknown_field400The search body has a field it does not take.
unauthorized401No credential, or the key has no workspace. Send Authorization: Bearer ak_….
session_expired401The console session expired. Sign in again.
credential_not_supported403A virtual key (vk_) or another credential this API does not take. Use an ak_ key.
csrf403A cookie request from another site was refused. Call from the console, or use a key.
workspace_role_required403The signed-in person has no role in this workspace.
read_only403The signed-in person's role is read-only, so writes are refused.
user_session_required403Key bindings are managed by a signed-in person, not a key.
insufficient_scope403The key was created with memory.read or memory.write, and this call needs the other. Writes need memory.write.
key_has_no_namespaces403The key is bound to no namespace. An admin binds it with PUT /v1/keys/{key_id}/namespaces.
namespace_out_of_scope403The key is not bound to that namespace.
namespace_management_forbidden403Only a signed-in workspace admin can create, rename or delete a namespace.
memory_out_of_scope403The memory is in a namespace the key is not bound to.
job_out_of_scope403The job is in a namespace the key is not bound to.
key_out_of_scope403That key belongs to another workspace.
key_binding_forbidden403Only a workspace admin can set a key's namespaces.
approval_invalid403approval_receipt_id is not an approval for exactly these ids.
not_found404The memory API is not switched on.
feature_not_enabled404The memory API is not on for this workspace.
route_not_found404No such route or method.
namespace_not_found404No namespace with that id or name.
namespace_deleted404The namespace was deleted.
memory_not_found404No memory with that id.
job_not_found404No job with that id.
key_not_found404No live API key with that id in this workspace.
no_workspace409The signed-in person has no workspace yet. Create one, then retry.
namespace_name_conflict409Another namespace has that name.
cannot_delete_default_namespace409The default namespace cannot be deleted.
namespace_not_empty409The namespace holds memories. Pass move_to, or delete them first. details.memory_count says how many.
approval_required409Bulk delete, or a memory write a workspace rule holds, needs a person's approval. details.approval_id names the request in Needs you. For a write, retry with approval_id once it is approved.
job_not_retryable409The job is still running or already done. Retry only a failed or stalled job.
content_rejected400The memory contains emails, keys, tokens, card or IBAN numbers, and this workspace is set to refuse them. details.kinds counts what was found. Remove them and retry.
admin_required403Exporting every memory needs an owner or admin session, or a key not narrowed to memory.read or memory.write.
tenant_paused423The workspace owner paused every agent (Pause all). Nothing was written. Only the owner can resume.
body_too_large413The request body is over 8 MiB.
content_too_large413content is over 1 MiB.
metadata_too_large413metadata is over 64 KiB.
rate_limited429Too many requests. Wait Retry-After seconds.
internal_error500Something failed on our side. Retry with backoff.
receipt_unavailable503The write could not be recorded as a receipt, so nothing was written. Retry.
approval_unavailable503A write rule needs the owner's approval, and the request could not be filed. Nothing was written. Retry shortly.
meter_unavailable503The plan meter could not be read, so nothing was written. Wait Retry-After seconds and retry.
agent_required400A webhook call needs the x-agentics-agent header naming the agent that owns the webhook.
invalid_request400The webhook body was not accepted: an unknown field, a pattern with no fields, or a URL that is not public https. error.message says which.
agent_not_linked403The agent named in x-agentics-agent is not linked to this workspace.
webhook_not_found404No webhook with that id belongs to this agent.
method_not_allowed405/v1/webhooks takes GET or POST; /v1/webhooks/{id} takes DELETE.
subscription_limit409The agent already has 50 webhooks, or the workspace has 500. Delete one first.
memory_unavailable503The webhook store could not be reached, so nothing changed. Retry.
invalid_stage400stage on GET /v1/ingest names a stage that does not exist.
invalid_file400An import of kind file needs filename and valid base64 in data_base64.
invalid_url400An import of kind url needs an absolute http or https address, up to 2,048 characters, with no user name or password.
url_not_allowed400The address is private, local or on a non-standard port, so it is not fetched.
source_too_large413The file or page is over 5 MB.
unsupported_file415Import reads PDF and text files (.txt, .md, .csv, .json, .html and similar).
unsupported_url415The page's content type is not one Import can read.
unreadable_pdf422The PDF could not be read.
no_text422There is no text to remember, such as a scanned PDF with no text layer. Nothing was written.
fetch_failed502The address could not be reached, answered an error, or redirected too many times.
recall_receipt_unavailable503A search could not be recorded as a receipt, so no results were returned. Wait Retry-After seconds and retry.

Free's limits answer 402 with their own body, the same one MCP returns: {"error": "plan_action_limit" or "plan_memory_limit", "message", "current_plan", "limit", "used"}.

MCP errors

AnswerMeaning
HTTP 401 with WWW-AuthenticateNo token, or one /mcp does not take. Sign in, or send an agent key.
HTTP 403, code -32000The token lacks mcp:tools.
HTTP 405Use POST.
-32700The body is not JSON.
-32600Not a JSON-RPC request, or a batch of more than 20.
-32601No such method.
-32602Bad arguments to a memory tool, or an unknown resource or prompt.
A result with isError trueThe tool refused, with a sentence that says why: an unknown tool, a missing scope, Pause all, or the Free monthly limit.