At a glance
Memory space
A space is where the memories for a specific application or context live. Your organization can hold many spaces, and each is fully isolated from the others. You create a space with aname, and that name is its permanent space_id, the
identifier every other call takes. Nothing separate is generated, and space_id is not
a field you can send on create.
Scope
A space is the coarse boundary. Scope partitions it, so a single space serves many end users without their memories mixing:user_id is the pattern.
Scoping is strict: a scoped search returns only memories written under that same scope,
never another user’s, and never unscoped ones. Consolidated memories are built per user,
so a synthesis cannot mix two users’ facts.
Reference: Scoping
Record
Storing a memory is not a plain insert. The content is analyzed, its durable facts are extracted, and the result is embedded and indexed for semantic search.Retrieve
Retrieve finds memories by meaning rather than keyword overlap, and returns them ranked by relevance with their entities and event time attached.Reason
Reason runs an agentic pass over the space, connecting related facts and weighing recency, and returns one synthesized answer instead of a ranked list.
Reference: Reason API
API key
Every request carriesAuthorization: Bearer <key>. Keys are created and revoked from
the dashboard under API keys, or through the
API Keys endpoints. The full key is shown once at creation;
afterwards only its prefix is visible.
Reference: Authentication
Tenant isolation
Each organization’s memories live in a dedicated database schema, with no shared tables. Aspace_id belonging to one organization is both meaningless and inaccessible to
another. The boundary is enforced twice: as an authorization check at the gateway, and
again at the database layer.
Next steps
API overview
The full endpoint surface in one table.
Python SDK
Client library reference.