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. You can define your own at the organization level, add more at the space (container tag) level, or get AI-generated suggestions — all covered below.

Reading buckets

Requesting bucketed profiles

Pass include: ["buckets"] to /v4/profile to return bucket-organized memories, and optionally buckets to limit the response to specific keys. include also lets you skip sections you don’t need — ["buckets"] alone omits static and dynamic.
Response:
[Recent] and [Summary] labels. To keep profiles dense, an entity’s older memories are periodically aggregated into a short synthesis. Entries prefixed [Summary] are that aggregated context; entries prefixed [Recent] were ingested since the last aggregation and aren’t summarized yet. The dynamic section uses the same [Recent] prefix (plus a [YYYY-MM-DD] date). Strip the prefixes if you only want raw text, or keep them to signal recency to your model.

List bucket definitions

To see which buckets are configured for a container tag (org buckets merged with any space-level additions), call /v4/profile/buckets:
Response:
This endpoint requires only that the caller belongs to the org — any role, and any API key (scoped keys included) can read bucket definitions.

Creating and configuring buckets

Bucket definitions live at two levels: organization (the default set every container tag gets) and space (per-container-tag additions). Both are configured through the settings API — there’s no console-only path; these are regular authenticated endpoints.
Writing buckets requires an admin or owner role in the org, and a full-access API key — project/container-tag-scoped keys cannot call these endpoints and will get a 403. Reading buckets (the endpoints above) has no such restriction.

Organization-level buckets

PATCH /v3/settings sets the org’s bucket list. The profileBuckets array replaces the entire stored list — it’s not a merge, so always send the full set you want.
Response:
GET /v3/settings returns the current org settings, including profileBuckets, without changing anything.

Space (container tag) buckets

PATCH /v3/container-tags/{containerTag} sets a container tag’s own bucket list. These are add-only on top of org buckets — a tag always keeps every org bucket, and if a space bucket’s key collides with an org bucket, the org’s definition wins in the merged, effective set used at ingestion and read time.
Response:
Like the org endpoint, this replaces the tag’s own bucket list, not the merged/effective set — profileBuckets in the response is only what this space added, not the org buckets it inherits. Call /v4/profile/buckets to see the merged, effective list for a tag.

AI-generated suggestions

POST /v3/settings/suggest-buckets returns 3–6 bucket suggestions tailored to your org, generated from the filterPrompt already configured in your org settings. It doesn’t save anything — pass the results into the PATCH /v3/settings call above to apply them.
Requires a filterPrompt already set on your org (via PATCH /v3/settings) — without one, this returns 400 { "error": "No organization context configured..." }, since suggestions are tailored from it.

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

If neither the org nor the space has configured any buckets, ingestion falls back to a single built-in preferences bucket, scoped tightly to explicit first-person statements (“prefers X over Y”, “always uses W”) — not inferred traits or general observations. Configuring your own buckets replaces this default.

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 space itself. For that, set entityContext on the container tag: a free-text field that’s appended alongside filterPrompt into the same prompt the extraction/classification step uses, so it shapes bucket assignment too, not just fact extraction. PATCH /v3/container-tags/{containerTag}:
entityContext is per-container-tag, so use it for context specific to that user/space (who they are, what the space is for) — use org-level filterPrompt for guidance that should apply everywhere. Both are combined into the same prompt, so keep them complementary rather than redundant.
You can also set entityContext inline when adding content, via entityContext on POST /v4/memories — useful if you don’t want a separate settings 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