---
title: "Append content to an engram"
method: POST
path: "/v1/memories/{id}/append"
tags: ["Memories"]
---

# Append content to an engram

`POST /v1/memories/{id}/append`

Append content to an existing engram.

**For conversation engrams:**
- Provide `messages` array with content, role, and optional metadata
- Works like `/conversations/{id}/messages` endpoint

**For document engrams:**
- Provide either `raw_text` or `chunks` to append additional content
- Content will be processed and added to the engram

## Path parameters

- `id` string, uuid, required — The unique identifier of the engram

## Request body

- AppendMemoryRequest
  - `chunks` string[], nullable — Pre-processed text chunks to append for document memories.
  - `collection_id` string, uuid, required — Target collection ID for the appended content.
  - `ingestion_config` IngestionConfig — Public ingestion config accepted by memory-ingestion endpoints. This mirrors the supported request payload shape while staying independent from the runtime provider config, which also carries internal-only fields such as ``app`` and ``extra_fields``.
    - `audio_transcription_model` string, nullable
    - `automatic_extraction` boolean
    - `chunk_enrichment_settings` ChunkEnrichmentSettings — Settings for chunk enrichment. Model selection for the enrichment LLM call lives in ``app.task_llms.chunk_enrichment``; the legacy ``generation_config`` field was removed in the per-task LLM cleanup pass.
      - `chunk_enrichment_prompt` string, nullable — The prompt to use for chunk enrichment
      - `enable_chunk_enrichment` boolean — Whether to enable chunk enrichment or not
      - `n_chunks` integer — The number of preceding and succeeding chunks to include. Defaults to 2.
    - `chunk_overlap` integer
    - `chunk_size` integer
    - `chunking_strategy` string
    - `excluded_parsers` string[]
    - `extra_parsers` object
    - `max_concurrent_vlm_tasks` integer
    - `parser_overrides` object
    - `provider` string
    - `vlm` string, nullable
    - `vlm_batch_size` integer
    - `vlm_max_tokens_to_sample` integer
    - `vlm_ocr_one_page_per_chunk` boolean
  - `ingestion_mode` 'hi-res' | 'ocr' | 'fast' | 'custom'
  - `messages` AppendConversationMessage[], nullable — Messages to append for conversation memories. Each message has content, role, and optional metadata.
    - `authority` number, nullable — Optional authority score
    - `content` union, required — Message content. Use a string for text-only messages or a list of content parts for multimodal content.
      - string
      - union[]
        - union
          - TextContentRequest — Text content block.
            - `text` string, required — Text content
            - `type` 'text'
          - FileContentRequest — Unified file content for multimodal messages.
            - `data` string, required — Base64 encoded file data
            - `duration_seconds` number, nullable — Duration in seconds (for audio)
            - `filename` string, nullable — Original filename
            - `media_type` string — MIME type
            - `type` 'file' | 'image' | 'audio' | 'document' — Content kind: file, image, audio, or document.
          - S3FileReferenceRequest — Reference to a file uploaded to S3 (for large files).
            - `bucket` string, nullable — S3 bucket (uses default if not specified)
            - `filename` string, nullable — Original filename
            - `media_type` string — MIME type
            - `s3_key` string, required — S3 object key
            - `size_bytes` integer, nullable — File size in bytes
            - `type` 's3_ref'
    - `metadata` object, nullable — Optional message-level metadata
    - `parent_id` string, uuid, nullable — Optional parent message ID
    - `role` 'user' | 'assistant' | 'system', required — Role: 'user', 'assistant', or 'system'
    - `source_role_id` string, uuid, nullable — Optional SourceRole entity ID
    - `timestamp` string, date-time, nullable — Semantic timestamp for when the message was authored. Drives chunk timestamps, the extraction LLM's temporal anchor, and episodic grouping. Without it, relative phrases ('this morning') resolve against ingestion wall-clock and episodes collapse.
  - `metadata` object, nullable — Additional metadata for the appended content.
  - `raw_text` string, nullable — Raw text content to append for document memories.

## Response `200`

Successful Response

- union
  - NebulaResultsAppendMemoryResponse
    - `results` AppendMemoryResponse, required
      - `appended_messages` AppendedMessageResponse[]
        - `chunk_ids` string[]
        - `message_id` string, required
      - `id` string, uuid, required
      - `message` Message, required
        - `content` unknown
        - `function_call` object, nullable
        - `image_data` object, nullable
        - `image_url` string, nullable
        - `metadata` object, nullable
        - `name` string, nullable
        - `role` union, required
          - 'system' | 'user' | 'assistant' | 'function' | 'tool'
          - string
        - `structured_content` object[], nullable
        - `tool_call_id` string, nullable
        - `tool_calls` object[], nullable
      - `metadata` object
  - NebulaResultsIngestionResponse
    - `results` IngestionResponse, required
      - `engram_id` string, uuid, required — The ID of the engram that was ingested.
      - `message` string, required — A message describing the result of the ingestion request.
      - `task_id` string, uuid, nullable — The task ID of the ingestion request.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/zeroset-inc/apis/nebula-api.md) · [All operations](https://skmtc.net/zeroset-inc/apis/nebula-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zeroset-inc/nebula-api/revisions/b1da2c0bb1ae/schema)
