user_alex lives in its own isolated space, completely separate from memories tagged user_jordan. This is what makes Supermemory safe to use in multi-tenant applications — one user can never see another user’s memories unless you explicitly query across both tags.
Group
Bucket memories by user, project, agent, workspace, or any boundary that makes sense for your app.
Isolate
Each container tag maps to its own vector namespace, so search and retrieval never leak across boundaries.
How it works
When you add a memory with a container tag, Supermemory automatically creates a space for that tag (scoped to your organization) if one doesn’t already exist. You don’t need to provision anything ahead of time — the first write with a new tag creates the container, and subsequent writes reuse it.A container tag is an opaque identifier you choose. Supermemory does not parse meaning out of it —
user_123, project_mobile, and org:acme:team:growth are all equally valid. Pick a convention that mirrors the access boundaries in your own application.Naming rules
Container tags are validated on every request. A tag must:- Be 100 characters or less
- Contain only alphanumeric characters, hyphens (
-), underscores (_), and colons (:)
^[a-zA-Z0-9_:-]+$
org:acme:user:john) that encode several levels of structure in a single identifier.
containerTag vs containerTags
Supermemory’s current API uses a single containerTag string per request.
| API field | Type | Status |
|---|---|---|
containerTag | string | ✅ Current — use this |
containerTags | string[] | ⚠️ Deprecated |
Where container tags are used
The same tag flows through the entire lifecycle of a memory. Pass it consistently and your data stays neatly partitioned.| Operation | Behavior |
|---|---|
| Add | Writes the memory into the tag’s container (auto-creating the space). |
| Search | Restricts retrieval to the given tag’s namespace. |
| List | Returns only memories belonging to the tag(s). |
| Update / Delete | Targets the memory inside the specified tag’s container. |
Access control
Container tags are also an authorization boundary, not just an organizational one. Two mechanisms can restrict which tags a given caller may touch:- API key scopes — an API key can be limited to a specific set of container tags, with read or write permission per tag.
- Member restrictions — an organization member can be granted access to only certain container tags.
- Requesting a tag outside the allowed set returns
403 Forbidden. - A write (add/update/delete) to a read-only tag returns
403 Forbidden. - If no tag is supplied by a restricted caller, the request is automatically scoped to their allowed tag(s).
Per-container settings
Each container tag can carry its own configuration, independent of other tags in the same organization:| Setting | Purpose |
|---|---|
name | A human-friendly display name for the container. |
entityContext | A custom context prompt applied when processing documents in this container — useful for steering extraction and summarization per project or tenant. |
Choosing a convention
Pick a tagging scheme that maps onto the isolation boundaries your application actually needs.| Pattern | Example | Use case |
|---|---|---|
| User isolation | user_{userId} | Per-user memory in a consumer app |
| Project grouping | project_{projectId} | Project- or workspace-scoped content |
| Agent scoping | agent_{agentId} | Separate long-term memory per AI agent |
| Hierarchical | org:{orgId}:user:{userId} | Multi-level, multi-tenant SaaS |
Next steps
Organizing & Filtering
Combine container tags with metadata filters for precise retrieval.
Adding Memories
See container tags in action across the add API.