---
title: "Save a memory to the memory bank. Body: { content: string (required); tags?: string[]; contexts?: Array<{ snippet: string (required); conversation_id?: string; message_id?: string; origin?: \"active_conversation\" | \"searched_conversation\" }> }."
method: POST
path: "/v1/memory"
tags: ["Memory"]
---

# Save a memory to the memory bank. Body: { content: string (required); tags?: string[]; contexts?: Array<{ snippet: string (required); conversation_id?: string; message_id?: string; origin?: "active_conversation" | "searched_conversation" }> }.

`POST /v1/memory`

Persists a human-confirmed memory for the calling user. The server sets the source and always stores it as a personal ('user') memory regardless of any scope sent by the client.

## Request body

- SaveMemoryRequest
  - `content` string, required
  - `tags` string[]
  - `contexts` object[]
    - `snippet` string, required
    - `conversation_id` string
    - `message_id` string
    - `origin` 'active_conversation' | 'searched_conversation'

## Response `201`

Memory saved successfully.

- SaveMemoryResponse
  - `memory` Memory, required
    - `id` string, typeid, required — Den TypeID with 'mem_' prefix and a 26-character base32 suffix.
    - `content` string, required
    - `tags` string[], nullable, required
    - `source` string, required
    - `scope` string, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `400` — The save payload was invalid.
- `401` — The caller must be signed in to save a memory.
- `404` — The caller has no active organization they are a member of to save the memory to.

---

[API](https://skmtc.net/openworklabs/apis/den-api.md) · [All operations](https://skmtc.net/openworklabs/apis/den-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openworklabs/den-api/versions/55ba7d5c7a7b/schema)
