v5 returns a maintained profile directly and gives profile bucket definitions their own namespace-scoped resource.
### Remove search behavior from profile calls
```bash Legacy
POST /v4/profile
{"containerTag":"user_1","q":"work preferences","threshold":0.6,"include":{}}
```
```bash v5
POST /ns/user_1/profile
{"filter":{"field":"region","operator":"eq","value":"us-west"},"buckets":["work"]}
```
Remove legacy `q`, `threshold`, and `include`. If the caller needs query-ranked results, issue a separate v5 search request. Move `containerTag` to the path and rename `filters` to singular `filter`.
### Read the v5 profile shape
```json
{
"profile": {
"static": [{ "id": "mem_1", "memory": "The user works in design" }],
"dynamic": [{ "id": "mem_2", "memory": "The user is preparing a launch" }],
"buckets": { "work": [{ "id": "mem_3", "memory": "Prefers concise project updates" }] }
}
}
```
`static` and `dynamic` are always returned and cannot be disabled. Omit `buckets` in the request to return every effective custom bucket; pass up to 50 names to narrow only the bucket section.
### Read bucket definitions
```bash Legacy
POST /v4/profile/buckets
{"containerTag":"user_1"}
```
```bash v5
GET /ns/user_1/profile/buckets
```
The response changes from key/description objects to a map:
```json
{"buckets":{"work":"Professional preferences and ongoing work"}}
```
### Add or edit namespace buckets
```bash
PUT /ns/user_1/profile/buckets
{"buckets":{"work":"Professional preferences and ongoing work"}}
```
Send one to 50 name-to-description entries. Existing namespace names are updated, new names are added, and omitted namespace buckets remain unchanged.
### Delete namespace buckets
```bash
DELETE /ns/user_1/profile/buckets
{"buckets":["work"]}
```
Names must be unique. Organization-owned buckets can appear in the effective GET response but cannot be changed or removed through namespace PUT or DELETE calls.
### With the SDK
```ts Legacy
const profile = await client.profile({ containerTag: "user_1", q: "work preferences" })
const buckets = await client.profile.buckets({ containerTag: "user_1" })
```
```ts v5
const { profile } = await supermemory.profile("user_1", {
buckets: ["work"],
})
const buckets = await supermemory.profiles.getBuckets("user_1")
await supermemory.profiles.setBuckets("user_1", {
buckets: { work: "Professional preferences and ongoing work" },
})
await supermemory.profiles.deleteBuckets("user_1", {
buckets: ["work"],
})
```
`supermemory.profile` takes no query. `body` is optional and accepts only `filter` and `buckets`. Read `profile.static`, `profile.dynamic`, and `profile.buckets[name]` as arrays of `{ id, memory }`.
### Verification
- Confirm every profile response contains `static`, `dynamic`, and `buckets`.
- Compare omitted buckets with one-name and multi-name narrowing.
- Add, edit, and delete a namespace bucket without replacing omitted buckets.
- Attempt to mutate an inherited organization bucket and expect the documented error.