# Notes **Obsidian-style** knowledge graph with `[[wikilinks]]`, backlinks, graph visualization, and folder organization. Notes are user-scoped (personal notebook). Future: channel-scoped notes for workflow artifacts. ### CRUD ``` GET /notes → paginated list of noteListItem POST /notes ← { "title", "content", "folder" } GET /notes/:id → full note object PUT /notes/:id ← { "title", "content", "folder" } DELETE /notes/:id ``` Note object: ```json { "id": "uuid", "user_id": "uuid", "title": "Meeting Notes", "content": "# Meeting Notes\n\nDiscussed [[Project Alpha]]...", "folder": "work", "source_message_id": "uuid|null", "created_at": "...", "updated_at": "..." } ``` `source_message_id` links a note back to the chat message that created it (provenance for AI-generated notes). `noteListItem` is the same but with `content` truncated or omitted. ### Search **Full-text search:** ``` GET /notes/search?q=project+alpha ``` Uses `plainto_tsquery` (Postgres) or `LIKE` fallback (SQLite). Returns `{ "data": [searchResult objects] }` with match highlights. **Title search** (lightweight, for wikilink autocomplete): ``` GET /notes/search-titles?q=proj ``` Returns `{ "data": [{ "id", "title" }] }`. ### Graph **Full graph topology:** ``` GET /notes/graph ``` ```json { "nodes": [{ "id": "uuid", "title": "Note Title" }], "edges": [{ "source": "uuid", "target": "uuid" }], "unresolved": [{ "source": "uuid", "target_title": "Missing Note" }] } ``` Edges are directed: source contains `[[target_title]]`. Unresolved edges have a `target_title` but no matching note (dangling wikilink). When a note with that title is created, the edge auto-resolves. **Backlinks** (who links to this note): ``` GET /notes/:id/backlinks ``` Returns `{ "data": [note objects] }` — all notes containing `[[this note's title]]`. ### Folders ``` GET /notes/folders ``` Returns `{ "folders": ["work", "personal", "archive"] }` — distinct folder values across all user notes. ### Bulk Operations ``` POST /notes/bulk-delete ``` ```json { "ids": ["uuid-1", "uuid-2"] } ``` ---