Skip to main content

Ingest

Endpoints for writing new conversations into the memory store. The full pipeline runs LLM fact extraction, embedding, dedup, entity graph, and link discovery. The quick path is optimized for low latency using lightweight extraction.

Base URL: http://localhost:3050

All request bodies are JSON (Content-Type: application/json). Field names on the raw HTTP prototype surface use snake_case.

POST /v1/memories/ingest

Full ingest pipeline: LLM fact extraction, embedding, dedup, entity graph, link discovery.

Request:

{
"user_id": "user-123",
"conversation": "User: I prefer dark mode.\nAssistant: Noted.",
"source_site": "chatgpt",
"source_url": "https://chat.openai.com/c/abc"
}
FieldTypeRequiredNotes
user_idstringyesUser identifier
conversationstringyesConversation text, max 100,000 chars
source_sitestringyesPlatform identifier (e.g. chatgpt, claude)
source_urlstringnoURL where the conversation took place

Response (captured from running prototype):

{
"episodeId": "e0727aba-000b-4c38-84dc-c023e23b8298",
"factsExtracted": 1,
"memoriesStored": 1,
"memoriesUpdated": 0,
"memoriesDeleted": 0,
"memoriesSkipped": 0,
"memoryIds": [
"7a52eec6-ede8-4904-8bfd-e393bf83f279"
],
"linksCreated": 0,
"compositesCreated": 0
}

Example:

curl -X POST http://localhost:3050/v1/memories/ingest \
-H 'Content-Type: application/json' \
-d '{
"user_id": "docs-demo",
"conversation": "User: I am allergic to peanuts and avoid all tree nuts.\nAssistant: Important — peanut allergy recorded, avoiding all tree nuts.",
"source_site": "chatgpt",
"source_url": "https://chat.openai.com/c/example-123"
}'

POST /v1/memories/ingest/quick

Fast-path ingest optimized for low latency. Uses lightweight extraction without the full LLM pipeline.

Request: Same as /v1/memories/ingest.

Response (captured from running prototype):

{
"episodeId": "6fa13017-8193-482c-84d2-5a7ad9e61a9e",
"factsExtracted": 1,
"memoriesStored": 1,
"memoriesUpdated": 0,
"memoriesDeleted": 0,
"memoriesSkipped": 0,
"memoryIds": [
"3fa330cb-ee9e-4614-825c-1ce27539d24d"
],
"linksCreated": 0,
"compositesCreated": 0
}

When the fact is a duplicate, the response shows zero extractions:

{
"episodeId": "dca0ce91-cd52-468f-bc82-738fa7e2bbba",
"factsExtracted": 0,
"memoriesStored": 0,
"memoriesUpdated": 0,
"memoriesDeleted": 0,
"memoriesSkipped": 0,
"memoryIds": [],
"linksCreated": 0,
"compositesCreated": 0
}

Example:

curl -X POST http://localhost:3050/v1/memories/ingest/quick \
-H 'Content-Type: application/json' \
-d '{
"user_id": "docs-demo",
"conversation": "User: Our production stack is TypeScript, React, PostgreSQL with pgvector, and we deploy on Fly.io.\nAssistant: Got it — TS/React frontend, PostgreSQL+pgvector backend, Fly.io deploys.",
"source_site": "claude"
}'