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"
}
| Field | Type | Required | Notes |
|---|---|---|---|
user_id | string | yes | User identifier |
conversation | string | yes | Conversation text, max 100,000 chars |
source_site | string | yes | Platform identifier (e.g. chatgpt, claude) |
source_url | string | no | URL 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"
}'