{"ok":true,"guide":{"name":"memory HTTP API","version":"1","base_url":"https://llmcontext.duckdns.org","description":"Global searchable memory for LLMs. Content lives in Cloudflare R2 (.md files); MongoDB Atlas provides full-text search. Clients authenticate with a Bearer API token issued in the admin UI.","auth":{"type":"http","scheme":"bearer","header":"Authorization: Bearer <token>","token_format":"mem_tok_<id>_<secret>","how_to_get_token":"Sign in to the web UI as admin → API Tokens tab → Create token (choose scopes; secret is shown once).","scopes":[{"scope":"memory:read","allows":["GET /api/memories","GET /api/memories/{id}","GET /api/stats","GET /api/guide","GET /api/skill-prompt"]},{"scope":"memory:write","allows":["POST /api/memories"]},{"scope":"memory:delete","allows":["DELETE /api/memories/{id}"]}],"errors":{"401":"Missing/invalid/expired/revoked token","403":"Valid token but missing required scope, or admin-only route"},"admin_only":["/api/config*","/api/test","/api/tokens*","/api/schema","/api/derive-endpoint"],"public_no_auth":["/api/health","/api/login","/api/me","/api/guide","/api/skill-prompt","/openapi.json","/docs","/redoc"]},"envelope":{"success":{"ok":true,"...":"endpoint-specific fields"},"error":{"ok":false,"error":"human-readable message"}},"memory_types":["note","fact","decision","task","preference","reference","code","conversation"],"memory_scopes":["global","project","agent","user"],"openapi":"https://llmcontext.duckdns.org/openapi.json","swagger_ui":"https://llmcontext.duckdns.org/docs","redoc":"https://llmcontext.duckdns.org/redoc","endpoints":[{"method":"GET","path":"/api/health","auth":null,"use":"Liveness probe.","request":{"query":{},"body":null},"response_ok":{"ok":true,"status":"ok"}},{"method":"GET","path":"/api/guide","auth":null,"use":"This document — full API usage guide as JSON.","request":{"query":{},"body":null},"response_ok":{"ok":true,"guide":{"...":"..."}}},{"method":"GET","path":"/api/skill-prompt","auth":null,"use":"Returns a paste-ready prompt for teaching an LLM to use this memory API.","request":{"query":{"token_placeholder":"optional; default MEMORY_API_TOKEN env name"},"body":null},"response_ok":{"ok":true,"prompt":"...markdown skill prompt...","base_url":"https://llmcontext.duckdns.org"}},{"method":"GET","path":"/api/memories","auth":"memory:read","use":"List or full-text search memories. Empty q = recent list; non-empty q = search. Paginated.","request":{"query":{"q":"string (optional) search text","type":"optional one of ['note', 'fact', 'decision', 'task', 'preference', 'reference', 'code', 'conversation']","scope":"optional one of ['global', 'project', 'agent', 'user']","limit":"page size 1–200 (default 20)","page":"1-based page number (default 1)","skip":"optional absolute offset (overrides page)"},"headers":{"Authorization":"Bearer <token>"},"body":null},"response_ok":{"ok":true,"rows":[{"id":"hex","title":"...","type":"decision","tags":["auth"],"scope":"global","snippet":"preview…","created_at":"ISO-8601","updated_at":"ISO-8601"}],"count":2,"total":42,"page":1,"page_size":20,"total_pages":3,"has_prev":false,"has_next":true},"example":"GET https://llmcontext.duckdns.org/api/memories?q=auth&limit=10&page=1"},{"method":"POST","path":"/api/memories","auth":"memory:write","use":"Store a new memory (writes R2 .md + Mongo index).","request":{"headers":{"Authorization":"Bearer <token>","Content-Type":"application/json"},"body":{"content":"string, required — markdown body","title":"string, optional","type":"optional, default note; one of ['note', 'fact', 'decision', 'task', 'preference', 'reference', 'code', 'conversation']","scope":"optional, default global; one of ['global', 'project', 'agent', 'user']","tags":["optional","string array"]}},"response_ok":{"ok":true,"memory":{"id":"hex","title":"...","type":"decision","content":"...","tags":["auth"],"scope":"global"}},"example_body":{"title":"Use JWT for auth","type":"decision","tags":["auth","backend"],"scope":"global","content":"Decided on JWT (RS256). Access 15m, refresh 30d."}},{"method":"GET","path":"/api/memories/{memory_id}","auth":"memory:read","use":"Fetch one memory including full content from R2.","request":{"path_params":{"memory_id":"memory id from list/search"},"headers":{"Authorization":"Bearer <token>"},"body":null},"response_ok":{"ok":true,"memory":{"id":"hex","title":"...","type":"note","content":"full markdown body…","tags":[],"scope":"global"}}},{"method":"DELETE","path":"/api/memories/{memory_id}","auth":"memory:delete","use":"Delete memory from Mongo + R2.","request":{"path_params":{"memory_id":"hex id"},"headers":{"Authorization":"Bearer <token>"},"body":null},"response_ok":{"ok":true,"deleted":true,"id":"hex"}},{"method":"GET","path":"/api/stats","auth":"memory:read","use":"Aggregate counts by type / scope / project.","request":{"headers":{"Authorization":"Bearer <token>"},"body":null},"response_ok":{"ok":true,"stats":{"total":42,"by_type":{"note":10,"decision":5},"by_scope":{"global":40},"by_project":{}}}}],"quickstart":{"env":{"MEMORY_API_BASE":"https://llmcontext.duckdns.org","MEMORY_API_TOKEN":"mem_tok_… (from API Tokens tab)"},"search":"curl -sS -H \"Authorization: Bearer $MEMORY_API_TOKEN\" \"https://llmcontext.duckdns.org/api/memories?q=authentication&limit=10&page=1\"","store":"curl -sS -X POST -H \"Authorization: Bearer $MEMORY_API_TOKEN\" -H 'Content-Type: application/json' -d '{\"title\":\"Use JWT\",\"type\":\"decision\",\"content\":\"RS256 for APIs\",\"tags\":[\"auth\"]}' \"https://llmcontext.duckdns.org/api/memories\""}}}