GET /api/boot | Everything the page needs at load: language, theme, features, providers, tools, skills, commands, resources, sessions, status and the live history |
POST /api/turn | Run a turn; the response is a stream of server-sent events (run, chunk, thought, message, tool_start, tool_end, plan, permission, done, error) |
POST /api/runs/{id}/permission | Answer a permission dialog: allow_once, allow_always, deny_once, deny_always |
POST /api/runs/{id}/cancel | Cancel the running turn |
GET /api/sessions, GET /api/sessions/{name}/messages, POST /api/session | The session catalog, a saved session’s messages, and the attach/save/fork/clear actions |
GET /api/tools, POST /api/tools/{name} | The tool catalog and a direct tool call |
GET /api/skills, GET /api/skills/{name}, GET /api/commands, POST /api/command | Skills (with pinned and manual_only), their content, the slash commands the surface may run, and running one |
POST /api/mcp/{name}, POST /api/skills/{name} | Start or stop an MCP server ({"on": true}), pin or unpin a skill ({"pinned": true}); 501 unsupported from a backend without the switches |
GET /api/complete?line= | Completions for the last word of a slash command line: {"items": [{"text", "description"}]} |
GET /api/resources, GET /api/resource?uri= | Memory and context resources (chatcli://memory/...) |
GET /api/status, POST /api/defaults | Route, cost, budget and MCP status; changing the default provider and model |
POST /api/tts, POST /api/stt, POST /api/image | Speak a text ({text}; Markdown and code are stripped first, AIFF is converted to WAV), transcribe an audio body (any container the engine decodes; the page sends 16 kHz mono WAV, ?lang= hints the language), generate an image. 409 voice_install means the offline engine is on offer and not installed yet |
GET /api/voice/status, POST /api/voice/install, POST /api/voice/cancel | The engine serving each direction (stt, tts), whether the embedded install is on offer and its download size, and the running install’s progress; start the install ({targets: ["stt","tts"]}) or cancel it |