Base URL: http://localhost:8765
Interactive docs: http://localhost:8765/docs (Swagger UI)
No authentication required. The API binds to 127.0.0.1 and is only accessible locally.
Returns server status and configuration.
Response:
{
"status": "ok",
"version": "1.0.0",
"database": "ok",
"data_dir": "/home/user/.memoryos",
"embedding_provider": "local",
"summarizer_provider": "ollama"
}List memories with optional filtering.
Query params:
| Param | Type | Default | Description |
|---|---|---|---|
skip |
int | 0 | Pagination offset |
limit |
int | 50 | Max results (≤200) |
source |
string | — | Filter by source |
pinned |
bool | false | Pinned only |
Response: Memory[]
Add a memory.
Body:
{
"content": "Decided to use PostgreSQL over MySQL",
"source": "manual",
"session_id": null,
"tags": ["database", "architecture"],
"metadata": {}
}Response: Memory (201)
Bulk add memories (used by browser extension).
Body: Memory[]
Response: Memory[] (201)
Get a specific memory. Increments access_count.
Update a memory.
Body:
{
"content": "Updated content",
"summary": "Updated summary",
"tags": ["new-tag"],
"is_pinned": true,
"importance_score": 0.9
}Soft-delete (forget) a memory. Removes from ChromaDB vectors.
Response: { "ok": true, "id": "..." }
Toggle pin status.
Hybrid semantic + keyword search.
Query params:
| Param | Type | Description |
|---|---|---|
q |
string | Search query (required) |
limit |
int | Max results (default 10, max 50) |
source |
string | Filter by source |
tags |
string | Comma-separated tag names |
Response:
[
{
"memory": { ...Memory },
"score": 0.87
}
]Find memories semantically similar to any text.
Body:
{
"text": "PostgreSQL replication strategy",
"limit": 10,
"source": "chatgpt"
}Get a prompt-ready context string from top memories.
Query params:
| Param | Default | Description |
|---|---|---|
q |
required | Query |
max_tokens |
2000 | Approximate word limit |
Response:
{
"context": "[chatgpt | 2026-03-14] Decided to use PostgreSQL...\n\n[claude | 2026-03-12] ...",
"query": "database choice"
}List all sessions. Params: skip, limit.
{ "source": "chatgpt", "title": "FastAPI discussion", "url": "https://chat.openai.com/..." }Session detail including all memories.
AI-generated session summary.
List all tags ordered by memory count.
List memories with a specific tag.
Response:
{
"total_memories": 1247,
"pinned_memories": 43,
"by_source": {
"chatgpt": 512,
"claude": 380,
"manual": 99
},
"storage_bytes": 15728640,
"storage_mb": 15.0
}Query params:
| Param | Options | Description |
|---|---|---|
format |
json | markdown | csv | obsidian |
Export format |
source |
any source name | Optional filter |
Returns a downloadable file.
{ "text": "Long text to summarize..." }Response: { "summary": "..." }
Trigger background summarization for all unsummarized memories.
Response: { "updated": 12 }
{
"id": "uuid-string",
"content": "Full text content",
"summary": "AI-generated summary or null",
"source": "chatgpt | claude | gemini | cursor | manual | api | cli",
"session_id": "uuid or null",
"entities": {
"people": [],
"projects": [],
"technologies": ["FastAPI", "PostgreSQL"],
"decisions": ["Decided to use PostgreSQL."],
"todos": []
},
"importance_score": 0.75,
"is_pinned": false,
"is_forgotten": false,
"created_at": "2026-03-15T04:30:00Z",
"accessed_at": "2026-03-15T04:32:00Z",
"access_count": 3,
"tags": [
{ "id": "uuid", "name": "database", "color": "#6366f1" }
]
}