Skip to content
LogoLogo

A memory is what you store. memory_id is a UUID: omit it and the client generates one, or pass your own to make the write idempotent and safe to retry.

Store text

curl -X POST "https://api.zeroset.com/v2/collections/$COLLECTION/memories" \
  -H "Authorization: Bearer $NEBULA_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "memory_id": "018f3c2a-7e19-7f04-b3d6-2a9c5e81f742",
    "content": { "kind": "text", "text": "Customer reported slow exports." },
    "metadata": { "source": "zendesk", "priority": 2 }
  }'

202 with an operation. The memory is searchable when that operation reports search_ready, not when the call returns.

Store a conversation

Conversations are a first-class content kind, not a separate endpoint:

{
  "memory_id": "018f3c2a-7e19-7f04-b3d6-2a9c5e81f742",
  "content": {
    "kind": "conversation",
    "messages": [
      { "role": "user", "content": "How do I rotate an API key?" },
      { "role": "assistant", "content": "Open the organization's API keys page." }
    ]
  }
}

Each message requires role and content, and may carry name, tool_call_id and tool_calls — so tool-calling transcripts round-trip without reshaping.

Read

memory.get returns one Memory; memory.list returns a MemoryPage.

A Memory carries memory_id, collection_id, kind, metadata, created_at, updated_at, and content when the memory has materialised. kind is an open enumeration — text, conversation and file are known today, so keep a default branch.

Delete

curl -X DELETE "https://api.zeroset.com/v2/collections/$COLLECTION/memories/018f3c2a-7e19-7f04-b3d6-2a9c5e81f742" \
  -H "Authorization: Bearer $NEBULA_ACCESS_TOKEN"

202 with an operation of kind memory_delete.