| Plane | What it covers | Authentication |
|---|---|---|
| Data plane | The memory operations your agent calls at runtime. Metered in credits. | API key: Authorization: Bearer anona_live_... |
| Control plane | Account, workspace, key, and billing management. Backs the dashboard, and is callable programmatically. | Session token, or an API key where noted |
https://api.anonalabs.com
https://memory.anonalabs.com also works and always will — including the remote
MCP endpoint and its OAuth flow, which are served on both hostnames. If that is
what your code already uses, nothing needs to change. api.anonalabs.com is
simply the recommended host for new integrations.Data plane
Runtime memory operations. See Authentication for how to pass your API key.| Method and path | What it does | Reference |
|---|---|---|
POST /v1/record | Stores a memory. Anona extracts the durable facts and files them in the space. Pass "async": true to queue the write and get a job_id back immediately. | Memories |
POST /v1/record/batch | Bulk-ingests up to 100 memories in one call. Always async, returns a job_id. | Memories |
GET /v1/spaces/{space_id}/jobs/{job_id} | Status of an async ingestion job. Free, consumes no credits. | Memories |
DELETE /v1/spaces/{space_id}/jobs/{job_id} | Cancels the queued parts of an async ingestion job. Free, consumes no credits. | Memories |
POST /v1/retrieve | Semantic and keyword search over a space. Returns ranked memories with entities and event time. | Retrieve |
POST /v1/reason | Cross-memory synthesis: asks a question and reasons over everything in the space. | Reason |
GET /v1/spaces/{space_id}/memories | Lists stored memories, filtered by type, state, scope, or text q, with pagination. | Memories |
GET /v1/spaces/{space_id}/memories/{memory_id}/history | Change history for a memory: what it said before, and when it changed. | Memories |
PATCH /v1/spaces/{space_id}/memories/{memory_id} | Edits a memory, or reversibly retires and restores it (state). | Memories |
DELETE /v1/spaces/{space_id}/memories/{memory_id} | Deletes a memory. | Memories |
POST /v1/spaces/{space_id}/documents | Uploads files. Their content is parsed, chunked, and made searchable. | Documents |
GET /v1/spaces/{space_id}/documents · GET DELETE .../documents/{document_id} | Lists, inspects, and deletes ingested documents. | Documents |
GET /v1/spaces/{space_id}/graph | The entity graph built from the space, as nodes and co-occurrence edges. | Graph |
GET /v1/spaces/{space_id}/entities · GET .../entities/{entity_id} | Lists entities, and one entity with its observations. | Graph |
GET /v1/receipts/{request_id} | The context receipt a retrieve or proxy call built, for audit. | Context receipts |
GET /v1/models | The LLM catalog: every selectable model with its credit rates. | Model selection |
GET POST /v1/spaces/{space_id}/models and GET PATCH DELETE .../models/{model_id}, plus /refresh, /clear, /history | Memory models: standing syntheses the space keeps up to date. | Memory models |
GET PUT DELETE /v1/spaces/{space_id}/profile | The space’s mission and disposition dials: what it is for, and how it weighs what it is told. Write is owner-only. Free. | Memory models |
GET /v1/spaces/{space_id}/users/{user_id}/profile · POST .../users/{user_id}/ask | A per-user profile, and questions about one user. | User profiles |
POST /v1/chat/completions | OpenAI-compatible chat that auto-retrieves relevant memories into the prompt, and stores the turn back. Supports streaming. | Chat |
POST /v1/responses | The same memory wrapper in the OpenAI Responses API shape. | Responses |
POST /v1/messages | The same memory wrapper in the Anthropic Messages shape. | Messages |
GET PUT DELETE /v1/spaces/{space_id}/chat-settings | Per-space defaults for the proxy: how many memories to inject, the injected token budget, whether to auto-record. Free. | Chat |
GET PUT DELETE /v1/spaces/{space_id}/extraction-settings | Per-space extraction overrides: how much detail a write keeps (mode), plus guidance added to the standard rules and a custom_prompt that replaces them. Free. | Extraction settings |
GET PUT DELETE /v1/spaces/{space_id}/reason-settings | Per-space defaults for reason: which model answers, and how deeply it looks. Free. | Model selection |
GET POST /v1/spaces/{space_id}/rules · PATCH DELETE .../rules/{rule_id} | Rules every answer from the space must follow: standing instructions that override what the memories say. Owner-only. Free. | Spaces |
POST /mcp | Remote MCP endpoint. Tools: record, retrieve, list_spaces, reason, get_profile, get_model, get_user_profile. | MCP |
GET /v1/usage/me | Credits and rate limit remaining for the calling API key. | Usage |
POST GET PATCH DELETE /v1/spaces/{space_id}/webhooks | Registers an HTTPS endpoint Anona calls when memories are stored or consolidated, instead of polling. | Webhooks |
Try it out: record and retrieve a memory
Try it out: record and retrieve a memory
curl -X POST https://api.anonalabs.com/v1/record \
-H "Authorization: Bearer anona_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"space_id": "demo-space",
"content": "The user prefers dark mode and replies in Spanish."
}'
curl -X POST https://api.anonalabs.com/v1/retrieve \
-H "Authorization: Bearer anona_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"space_id": "demo-space",
"query": "What language does the user prefer?"
}'
from anona import AnonaClient
client = AnonaClient(api_key="anona_live_YOUR_KEY")
client.record(
space_id="demo-space",
content="The user prefers dark mode and replies in Spanish.",
)
results = client.retrieve(
space_id="demo-space",
query="What language does the user prefer?",
)
import { Anona } from "@anona-labs/memory";
const anona = new Anona({ apiKey: "anona_live_YOUR_KEY" });
await anona.record({
spaceId: "demo-space",
content: "The user prefers dark mode and replies in Spanish.",
});
const results = await anona.retrieve({
spaceId: "demo-space",
query: "What language does the user prefer?",
});
Control plane
Account and workspace management. Most of these back the dashboard; the workspace, key, and usage endpoints are also useful programmatically.| Method and path | What it does | Reference |
|---|---|---|
GET /v1/orgs/me | Your organization: plan, status, limits. | Organization |
GET /v1/spaces · POST /v1/spaces | Lists and creates memory spaces. POST takes an optional space_type that starts the space off with a mission, extraction guidance and two memory models. | Spaces |
GET /v1/space-types | The space types POST /v1/spaces accepts, and what each one sets up. Needs no API key, and is free. | Spaces |
GET /v1/spaces/{id} · DELETE /v1/spaces/{id} | Fetches and deletes a space. | Spaces |
GET /v1/spaces/{id}/members · POST .../members/invite · DELETE .../members/{member_id} | Space membership. | Spaces |
GET /v1/api-keys · POST /v1/api-keys · DELETE /v1/api-keys/{id} | Manages API keys. | API Keys |
GET /v1/projects · POST /v1/projects | Manages projects. | Organization |
GET /v1/members/me · GET /v1/members · POST /v1/members/invite · DELETE /v1/members/{id} | The signed-in member, and organization member management. | Organization |
GET /v1/invitations/pending · POST /v1/invitations/accept · POST /v1/invitations/decline | Space invitations waiting on the signed-in person. | Organization |
POST /v1/spaces/{id}/exports · GET .../exports · GET .../exports/{job_id}/download | Exports everything a space holds as a downloadable bundle. Session-only, owner-gated. | Export |
GET /v1/usage · GET /v1/usage/breakdown | Organization usage, and a per-operation breakdown. | Usage |
GET /v1/billing · POST /v1/billing/upgrade | Views the plan, and changes to a free tier. | Billing |
POST /v1/billing/checkout · POST /v1/billing/portal · POST /v1/billing/cancel | Stripe checkout, billing portal, and cancellation. | Billing |
Try it out: list spaces and check usage
Try it out: list spaces and check usage
curl https://api.anonalabs.com/v1/spaces \
-H "Authorization: Bearer anona_live_YOUR_KEY"
curl https://api.anonalabs.com/v1/usage/me \
-H "Authorization: Bearer anona_live_YOUR_KEY"
from anona import AnonaClient
client = AnonaClient(api_key="anona_live_YOUR_KEY")
spaces = client.list_spaces()
usage = client.get_usage()
import { Anona } from "@anona-labs/memory";
const anona = new Anona({ apiKey: "anona_live_YOUR_KEY" });
const spaces = await anona.listSpaces();
const usage = await anona.getUsage();
Account sign-in (
/auth/...) and MCP OAuth (/oauth/...) are browser flows used by the
dashboard and by MCP clients. See Authentication and
MCP rather than calling them directly.