Auto-generated from uteke-server route registry and type schemas. Do not edit manually — run cargo run -p docgen to regenerate.
Base URL: http://localhost:8767 (default)
Auth: Set --auth-token <TOKEN> to require Authorization: Bearer <TOKEN> header.
List all tags in a namespace. Accepts ?namespace=X query param.
Rename a tag across all memories.
Request body: TagRenameRequest
Delete a tag from all memories.
Request body: TagDeleteRequest
Pin a memory by ID (legacy — prefer /memory/pin).
Request body: PinRequest
Unpin a memory by ID (legacy — prefer /memory/pin with pin=false).
Request body: PinRequest
Returns the agent-facing memory tools guide for system prompt injection (#1010).
Response: GuideResponse
Related: #1010
Identity of the store this server serves: {"id": "<16 hex digits>"}, the SHA-256 prefix of the store's canonical path (uteke_core::store_identity). The CLI compares it with the store it resolved before routing a command here, so UTEKE_HOME pointing elsewhere is not sent to this server (#1445). The path itself is never returned. Needs the usual token when auth is on.
Related: #1445
List all namespaces in the memory store. ?with_counts=true adds count (total) plus active/deprecated breakdown fields (#1181).
Related: 1181
Rename a namespace ({from, to}). When to already exists this is a merge; the old name vanishes (derived view). Returns {from, to, moved, target_existed} (#1181).
Request body: NamespaceRenameRequest
Related: 1181
Delete a namespace with an explicit strategy for its memories ({name, strategy, target?}): refuse (default — 409 while any memory references the name), merge (move all memories to target), or deprecate (soft-delete — restorable, never hard-deleted) (#1181).
Request body: NamespaceDeleteRequest
Related: 1181
Get memory statistics (count, etc.) for a namespace. Accepts ?namespace=X query param.
Get memory statistics via POST body. Accepts {"namespace": "..."}.
Request body: JSON object (see handler source for fields)
Related: #786
Get a single memory by ID. Accepts ?id=... query param.
Response: Memory
Update an existing memory's content and/or metadata.
Request body: MemoryUpdateRequest
Check vector-index/SQLite consistency: row vs vector counts, mismatch flag (#1266).
Response: VerifyReport
Rebuild the vector index from stored embeddings to fix recall desync (#1266). SQLite data is untouched.
Response: RepairReport
Memory graph for visualisation: live memories as nodes, memory_edges (auto-links, supersession) plus explicit graph edges as edges, keyed by memory id. Accepts ?namespace=..., ?node_id=<memory id> (that memory's neighbourhood) and ?limit= (edges, default 500, max 5000); response carries truncated. Derived referenced_by backlinks are omitted.
Full provenance report for a memory (#1172): author/source fields, trust tier, source hash at write vs live-recomputed content hash (tamper evidence), and the full timeline event chain with actor + evidence. Accepts ?id=... query param.
Related: 1172
List superseded-but-not-restored memories (#1172) — the auditable contradiction resolution ledger (deprecated rows carrying a live superseded_by edge). Accepts ?namespace=...&limit=....
Related: 1172
Undo a contradiction resolution (#1172): restore the retired memory to active, remove the supersession pair, and record supersession_undone provenance events. Body: {id}.
Request body: ContradictionUndoRequest
Related: 1172
Queue one raw conversation turn for deferred, budgeted fact extraction. Refused (409) unless [capture] enabled is on.
Request body: CaptureRequest
Related: #1466
Capture queue counts: pending, extracting, done, failed turns and pending sessions.
Related: #1466
Run lifecycle aging cycle: deprecate old memories, optionally prune expired ones.
Related: #935
Restore a deprecated memory back to active status.
Related: #935
Get lifecycle status: active/deprecated counts and current configuration.
Related: #935
List deprecated memories with TTL metadata.
Related: #1007
Import memories from JSONL (or a JSON array) in content. Each row keeps its id, type, importance, pinned flag and slug; the response counts imported, skipped, duplicates_skipped, id_conflicts_skipped and soft_deleted_skipped. A Uteke Cloud export imports whole: type: "document" rows become documents (parent by slug), type: "room" rows become rooms with their doc_slugs linked, both before the memories' rooms, and the manifest line is skipped; the response then adds documents_imported, documents_updated, documents_unchanged, parent_unresolved, rooms_imported, rooms_existing, room_documents_linked and room_documents_missing (each only when non-zero). The body limit of this route is 64 MiB (UTEKE_MAX_IMPORT_SIZE, bytes; other routes keep 10 MB); a larger body gets a 413 that names the limit. Bulk runbook: send defer_embedding: true (rows are stored without a vector and the call returns in seconds; split a large file into several calls under the body limit), then run uteke repair --reembed (add --limit N to spread the work) so /recall finds them.
Request body: ImportRequest
Export all memories as JSON. Accepts ?namespace=... query param.
Recompute importance scores for all memories.
Request body: ImportanceRequest
Remove orphaned memories (no room, no graph edges).
Request body: PruneRequest
Merge similar/duplicate memories automatically.
Request body: ConsolidateRequest
Consolidate a single caller-chosen duplicate pair: keep id_keep, deprecate (or hard-delete) id_remove.
Request body: ConsolidatePairRequest
Related: 1076
Run aging cleanup — deprioritize or remove old/stale memories.
Request body: AgingRequest
List orphaned memories (not in any room, no edges).
Request body: OrphansRequest
Extract entities and relationships from memory content.
Request body: ExtractRequest
Rebuild backlink indices for memory graph.
Health check — tokenless requests get {status} only; a valid bearer token (or auth-disabled server) returns status, version, memory counts, and update info
Response: HealthResponse
Machine-readable API route introspection: returns this registry (method, path, tier, description, request/response types) as JSON — the same source of truth that generates docs/api-reference.md (#1289).
Related: #1289
Create a new document with slug, title, content, tags.
Request body: DocCreateRequest
Get a document by slug.
Request body: DocGetRequest
List documents with optional namespace/limit/roots_only/parent filters.
Request body: DocListParams
Search documents by query with optional mode/namespace/limit.
Request body: DocSearchRequest
Update an existing document (content, title, tags, parent).
Request body: DocUpdateRequest
Move a document to a different parent.
Request body: DocMoveRequest
Delete a document by slug or ID.
Get memories that reference a specific document.
Request body: JSON object (see handler source for fields)
Add a directed edge between two memories. Accepts memory IDs (a linked graph node is ensured automatically, #1180) or existing graph node IDs. Returns {ok, source_node, target_node}.
Request body: GraphEdgeRequest
Related: 1180
Remove an edge between two nodes. Accepts memory IDs or graph node IDs via ?source=...&target=... query params (#1180).
Related: 1180
List all memory_edges of one memory (outgoing and incoming, including derived backlinks). Not an alias of /graph. Accepts ?id=... query param.
Get timeline of memory events for a memory. Accepts ?id=... query param.
Store a new memory. Accepts content, tags, namespace, type, metadata. Explicit type is honored as-is (no silent normalization, #1302); unknown types are rejected with 400 listing the valid vocabulary. Omit type to auto-infer.
Request body: RememberRequest
Response: Memory
Semantic search — recall memories by meaning. Returns ranked results. Set explain: true (#1160) to include per-result ranking signals (vector similarity/rank, RRF contributions, boosts); memory-only recall.
Excludes deprecated memories from results.
Request body: RecallRequest
Keyword search — find memories by matching words in content/tags.
Excludes deprecated memories from results.
Request body: SearchRequest
List memories with optional filters (namespace, tags, sort, limit, offset). Set include_meta: true (#1188) for a pagination envelope {memories, total, has_more, next_offset} instead of the bare array (not supported with at).
Excludes deprecated memories from results.
Request body: ListParams
Deprecate a memory by ID. Returns 404 if ID doesn't exist.
Get recently added memories. Accepts ?limit=N&namespace=X query params.
Excludes deprecated memories from results.
Create a new memory room. Accepts {"name": "..."}.
Request body: JSON object (see handler source for fields)
Store a memory linked to a room. Accepts room_id, content, tags, type, author.
Request body: RoomRememberRequest
Response: Memory
Related: #789
Semantic search within a room. Empty query returns all memories chronologically.
Excludes deprecated memories from results.
Request body: RoomRecallRequest
Related: #785
Get room summary with memory clusters and statistics.
Excludes deprecated memories from results.
Request body: JSON object (see handler source for fields)
Get room summary focused on document-type memories.
Excludes deprecated memories from results.
Request body: JSON object (see handler source for fields)
List all rooms.
Plan or execute segment-level LLM consolidation of room memories (#1088). Dry-run by default; apply: true executes with a hard budget cap. Write op — blocked for read-only tokens.
Request body: JSON object (see handler source for fields)
Related: #1088
Get memory count for a room. Includes deprecated memories (known discrepancy vs /room/summary).
Request body: JSON object (see handler source for fields)
Related: #784
List all memories in a room (chronological). Accepts ?room_id=... query param; optional ?author=... and ?namespace=... filters (#1288). Without namespace, returns ALL namespaces that contributed to the room.
Excludes deprecated memories from results.
Delete a room (unlink-only): room links are removed, memories and documents are preserved. Response: { deleted, unlinked_memories }. Accepts ?room_id=... query param.
Rename a room: the registry row and every member/document link move in one transaction; title, description, and namespace are preserved (#1202). Accepts { from, to }. Write op — blocked for read-only tokens.
Request body: JSON object (see handler source for fields)
Related: #1202
Update a room's title and/or description; omitted fields stay unchanged (#1202). Accepts { room_id, title?, description? }; 404 when the room is missing. Write op — blocked for read-only tokens.
Request body: JSON object (see handler source for fields)
Related: #1202
Add an existing memory to a room without copying it (#1589). Accepts { memory_id, room, author? } (memory_id is a full id or an unambiguous prefix; author defaults to anonymous). Idempotent: linking twice returns already_linked: true and keeps the first link. 404 when the room or the memory does not exist. Write op — blocked for read-only tokens.
Request body: JSON object (see handler source for fields)
Related: #1589
Move a memory from one room to another, preserving the link's author/role/joined_at provenance (#1202). Accepts { memory_id, from_room, to_room }; 404 when the memory has no link in from_room. Write op — blocked for read-only tokens.
Request body: JSON object (see handler source for fields)
Related: #1202
Store a reference document in a room (large content >500 chars).
Request body: JSON object (see handler source for fields)
List documents in a room.
Request body: JSON object (see handler source for fields)
Add a reference to an existing document in a room.
Request body: JSON object (see handler source for fields)
Remove a document reference from a room.
Request body: JSON object (see handler source for fields)
List rooms that reference a specific document.
Request body: JSON object (see handler source for fields)
Pin a memory so it won't be removed by aging/cleanup operations.
Request body: MemoryPinRequest
Get or set the importance score of a memory.
Request body: MemoryImportanceRequest
Submit positive/negative feedback on a memory for ranking signals.
Request body: MemoryFeedbackRequest
Get documents that reference a specific memory.
Request body: JSON object (see handler source for fields)
Get context window for a query (for LLM prompt enrichment).
Request body: JSON object (see handler source for fields)
Generate new memories/insights from existing memory corpus.
Request body: JSON object (see handler source for fields)
MCP (Model Context Protocol) bridge endpoint for AI agent tool calls.
Request body: JSON object (see handler source for fields)
Detailed field definitions for each request type.
| Field | Type | Required | Description |
|---|---|---|---|
action |
string |
No | |
dry_run |
boolean |
No | |
max_access_count |
any | No | Max access count threshold for preview/cleanup (default: 1). |
namespace |
any | No | |
older_than_days |
any | No | Days threshold for preview/cleanup (default: warm_days from config, fallback 90). |
One turn for the capture queue (POST /capture, LAB).
| Field | Type | Required | Description |
|---|---|---|---|
content |
string |
Yes | |
namespace |
any | No | Namespace the extracted facts are stored in. |
role |
string |
Yes | user, assistant or tool (a tool output keeps its first 2000 characters). |
session_id |
string |
Yes | Conversation the turn belongs to; its turns are extracted together. |
source |
any | No | Optional source label (e.g. the client name). |
| Field | Type | Required | Description |
|---|---|---|---|
dry_run |
boolean |
No | |
namespace |
any | No | |
threshold |
number |
No |
| Field | Type | Required | Description |
|---|---|---|---|
content |
string |
Yes | |
parent |
any | No | |
slug |
string |
Yes | |
tags |
string[] |
No | |
title |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
id |
any | No | |
slug |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
id |
any | No | |
new_parent |
any | No | |
new_sort_order |
any | No | Optional sort order for the moved document (#sort-order). |
slug |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
error |
string |
Yes |
| Field | Type | Required | Description |
|---|---|---|---|
content |
string |
Yes | |
max_facts |
any | No | Override max facts per document. |
model |
any | No | Override extraction model (else config default). |
namespace |
any | No | |
tags |
string[] |
No | |
type |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
edge_type |
any | No | |
source |
string |
Yes | |
target |
string |
Yes | |
weight |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
api_latest |
any | No | Latest API version (#737). |
api_versions |
any | No | Supported API versions (#737). |
memories |
integer |
Yes | |
namespaces |
integer |
Yes | |
status |
string |
Yes | |
update_available |
any | No | Latest version available on GitHub, if newer than current. Populated from cache (24h TTL) — may be None if cache is stale. |
version |
string |
Yes | Server version (uteke-server crate version), so HTTP clients can gate features on the actual server capability rather than a local CLI probe. |
| Field | Type | Required | Description |
|---|---|---|---|
content |
string |
Yes | JSONL content to import. |
defer_embedding |
boolean |
No | Store the rows without a vector and return at once (#1634, default false). The rows are keyword-searchable (/search) immediately and found by /recall after uteke repair --reembed adds the vectors. Duplicates are caught by exact content only, not by the cosine check. The response then carries deferred_embedding: the rows waiting for a vector. Use it for bulk imports, which otherwise embed every row before the request returns. |
namespace |
any | No | |
tags |
string[] |
No |
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
at |
any | No | Time-travel: list memories that existed at this RFC3339 timestamp. |
include_meta |
boolean |
No | Pagination metadata (#1188): when true, respond with an envelope {memories, total, has_more, next_offset} instead of the bare array. Default false — the bare-array shape is unchanged for existing clients. Not supported with at (point-in-time listing returns the bare array regardless). |
limit |
integer |
No | |
namespace |
any | No | |
offset |
integer |
No | |
tag |
any | No |
Request for memory feedback / trust scoring (#718).
| Field | Type | Required | Description |
|---|---|---|---|
feedback |
string |
Yes | "helpful" or "unhelpful" |
id |
string |
Yes |
| Field | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | |
importance |
number |
Yes |
| Field | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | |
pinned |
boolean |
Yes |
| Field | Type | Required | Description |
|---|---|---|---|
content |
any | No | New content. Triggers embedding regeneration. |
id |
string |
Yes | UUID of the memory to update (required). |
importance |
any | No | Set importance score (0.0–1.0). |
memory_type |
any | No | Set memory type (fact, procedure, preference, decision, context, note, insight, reference, event). |
metadata |
any | No | Replace metadata entirely with this object. |
namespace |
any | No | Move the memory to this namespace (#1181). Plain column update — no re-embed. |
pinned |
any | No | Set pinned state. |
tags |
any | No | Replace tags entirely with this list. |
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer |
No | |
namespace |
any | No | |
threshold |
number |
No |
| Field | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes |
| Field | Type | Required | Description |
|---|---|---|---|
dry_run |
boolean |
No | |
namespace |
any | No | |
ttl_days |
integer |
No |
| Field | Type | Required | Description |
|---|---|---|---|
after |
any | No | Temporal range filter: only return memories created at or after this RFC3339 timestamp (#902). |
at |
any | No | Time-travel: query memories that existed at this RFC3339 timestamp. |
before |
any | No | Temporal range filter: only return memories created at or before this RFC3339 timestamp (#902). |
budget_chars |
any | No | Character budget for pack (default 4000). |
category |
any | No | Filter by category metadata. |
enrich |
boolean |
No | Enrich results with cross-entity links (doc↔memory) (#689). When true, populates linked_doc_slugs on memory results and linked_memory_ids on document results. |
entity |
any | No | Filter by entity metadata. |
exclude_ids |
any | No | Memory IDs already injected this turn; excluded from pack results (reported as skipped with reason excluded). |
explain |
boolean |
No | Explain mode (#1160): return per-result ranking signals alongside each memory. Memory-only recall — rejected (400) together with search_type/unified, at, before/after. |
limit |
integer |
No | |
min_score |
any | No | Minimum similarity score (0.0-1.0). Results below are filtered. Default: 0.0 (no filtering). Use strict=true for 0.5 default (#995). |
namespace |
any | No | |
pack |
boolean |
No | Budgeted context pack (#1281 Phase 1): return a ContextPack (selected/skipped/budget_used) instead of a bare ranked list. Deterministic, LLM-free, rank-order preserving. |
query |
string |
Yes | |
search_type |
any | No | Search type filter: "all" (default, unified), "memory", or "doc" (#531). |
strategy |
any | No | Recall strategy: "fusion" (default since 0.16.0), "vector", "fts5", "hybrid", or "graph" (#900, #1034, #1123). When absent, the server falls back to [recall] default_strategy from uteke.toml, then to "fusion" — matching the CLI default. Invalid values return HTTP 400. |
strict |
boolean |
No | Use strict threshold (defaults to 0.5 if min_score not set). |
tags |
string[] |
No |
| Field | Type | Required | Description |
|---|---|---|---|
author |
any | No | Who wrote the memory (#1427 phase 2): free text, trimmed, 1 to 128 characters. Optional, with or without a room; returned on the memory. |
author_type |
any | No | Author type: "human" |
category |
any | No | Category — stored as metadata key "category". |
content |
string |
Yes | |
detect_contradiction |
boolean |
No | |
entity |
any | No | Entity name — stored as metadata key "entity". |
metadata |
any | No | Extra metadata key=value pairs, merged into the metadata map. Accepts an object (e.g. {"project": "uteke"}). |
namespace |
any | No | |
source |
any | No | Source provenance — set via set_source() after storage. |
source_type |
any | No | Source type (defaults to "user"). |
tags |
string[] |
No | |
type |
any | No | Memory type — validated against the MemoryType vocabulary and stored as-is (no silent normalization, #1302). Unknown values are rejected with 400 listing the valid types. Omit to let auto-inference decide. |
valid_from |
any | No | |
valid_until |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
at |
any | No | Time-travel: recall room state as of this RFC3339 timestamp (#1082). Memories created after at (or invalidated before it) are excluded. |
author |
any | No | |
limit |
integer |
No | |
min_score |
any | No | |
query |
any | No | Semantic search query. When None or empty, falls back to chronological recall (equivalent to GET /room/memories) (#785). |
room_id |
string |
Yes |
| Field | Type | Required | Description |
|---|---|---|---|
author |
any | No | Author — stored as participant role in room link. |
content |
string |
Yes | |
metadata |
any | No | |
namespace |
any | No | |
room_id |
string |
Yes | |
tags |
string[] |
No | |
type |
any | No |
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer |
No | |
namespace |
any | No | |
query |
string |
Yes | |
tags |
string[] |
No |
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
any | No | |
tag |
string |
Yes |
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
any | No | |
new |
string |
Yes | |
old |
string |
Yes |