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.