Skip to main content
Buckets are custom topical categories for a profile — an axis that sits alongside static and dynamic. Where static/dynamic split facts by how long-lived they are, buckets group them by subject (e.g. preferences, goals, work). As content is ingested, a classifier assigns each memory to the buckets it matches, so you can pull just the slice of context a given surface needs.
New to buckets? Read the conceptual overview first — this page is the API reference for reading, creating, and managing them.
Every org starts with a built-in preferences bucket that is always present — buckets you define at the organization level, or add per namespace (what v3/v4 called a container tag), are added alongside it. All covered below.

Reading buckets

Requesting bucketed profiles

supermemory.profile returns buckets next to static and dynamic. Omit buckets in the request to get every effective bucket, or pass up to 50 names to narrow only the bucket section.
Response:
Summaries vs. individual memories. To keep profiles dense, once a bucket grows large enough its older memories are periodically aggregated into a short synthesis. Synthesized entries have an id starting with aggregated_ and don’t map to a single memory; entries with a regular memory ID were ingested since the last aggregation and aren’t summarized yet. v5 returns plain text — the [Recent]/[Summary] prefixes from v4 are not included, so use the aggregated_ ID prefix to tell summaries apart. Individual dynamic entries still start with a [YYYY-MM-DD] date.

List bucket definitions

To see which buckets are configured for a namespace (org buckets merged with any namespace-level additions), call profiles.getBuckets:
Response:

Creating and configuring buckets

Bucket definitions live at two levels: organization (the default set every namespace gets) and namespace (per-namespace additions). Namespace buckets are managed through profiles.setBuckets and profiles.deleteBuckets.

Namespace buckets

setBuckets sends 1 to 50 name-to-description entries. Existing namespace names are updated, new names are added, and omitted namespace buckets remain unchanged. These are add-only on top of org buckets — a namespace always keeps every org bucket. Sending a name the org already defines returns 409, and if an org bucket is added later with the same name as a namespace bucket, the org’s definition wins in the merged, effective set used at ingestion and read time.

Delete namespace buckets

Organization-owned buckets appear in the effective getBuckets response but cannot be changed or removed through namespace setBuckets or deleteBuckets calls. Organization-level buckets are managed in the console, not through the v5 API.

Starter presets

If you’d rather start from a template than write descriptions from scratch, these are the same presets available in the console UI:

Default bucket

Every namespace has a built-in preferences bucket, scoped tightly to explicit first-person statements (“prefers X over Y”, “always uses W”) — not inferred traits or general observations. It is always part of the effective set: configuring your own buckets adds to it rather than replacing it, and deleteBuckets can’t remove it. Defining a bucket named preferences only overrides its description; an empty description falls back to the built-in one.

Validation & limits

Bucket descriptions steer classification. A precise description (“Explicit first-person preferences only — exclude inferred traits”) yields cleaner buckets than a vague one.

Configure

Instructions

Bucket descriptions only steer classification within a bucket — they don’t tell the model anything about the namespace itself. For that, set supportingContext on the namespace: a free-text field that’s appended alongside the org-level organizationalContext into the same prompt the extraction/classification step uses, so it shapes bucket assignment too, not just fact extraction.
supportingContext is per-namespace, so use it for context specific to that user/namespace (who they are, what the namespace is for) — use org-level organizationalContext for guidance that should apply everywhere. Both are combined into the same prompt, so keep them complementary rather than redundant.
You can also set supportingContext inline when adding content, via supportingContext in the body of supermemory.add — useful if you don’t want a separate namespace call.

Model selection

The model behind extraction and bucket classification isn’t configurable through the API on supermemory Cloud — it’s managed for you. If you’re self-hosting, you choose the provider and model yourself via environment variables (OPENAI_MODEL and related) — see Self-hosting Configuration.

Next steps