InkBotDocs

Workspace and tools

Search, usage, export and import, skills, team memory, background tasks, terminals, computers and local models.

Search and usage

Method Path Returns
GET /search?q=invoice&limit=60 SearchHit[]: messages in every chat containing q, newest first, with an excerpt and where the match is
GET /usage?days=30 UsageRow[]: tokens, requests and cost by day, bot and model (1–366 days)

Export and import

Method Path Body Returns
POST /export { "botIds": null, "chats": true, "settings": true } { "data": "<base64 .inkbot file>" }
POST /import { "data": "<base64>", "bots": true, "chats": true, "settings": true, "preview": true } ImportResult: what was (or with preview, would be) added and updated, and what's left to do

botIds: null exports every bot. Exports never contain passwords, keys or sign-ins.

Skills

Method Path Body Returns
GET /skills SkillInfo[]
GET /skills/{name} SkillDetail: the SKILL.md content, its files and requirements, or 404
GET /skills/{name}/file?path=scripts/run.py { path, base64 }, or 404
PUT /skills { "name", "content", "enabled", "source", "bots", "fileChanges" } SkillDetail. content is the whole SKILL.md; bots sets which bots have it ticked.
DELETE /skills/{name} 204
POST /skills/fetch { "url": "https://github.com/…" } The skill's files from a link, for review. Nothing is saved.
GET /skill-drafts SkillDraft[]: skills bots drafted from their work
POST /skill-drafts/resolve { "id", "approve": true, "scope": "team" } SkillDraft. scope is bot or team; send name, description or body to approve an edited version.

In fileChanges, each { path, base64 } adds or replaces a file, and base64: null removes it.

Team memory

Method Path Body Returns
GET /team-memory BotMemory
PUT /team-memory MemoryEntry[] BotMemory. Replaces every fact.

Background tasks and terminals

Method Path Body Returns
GET /background-tasks?botId=scout BackgroundTaskInfo[], newest first (all bots without botId)
GET /background-tasks/{id}/output?since=0 { task, text, next, trimmed }. Pass next as since to read only new output.
POST /background-tasks/{id}/stop 204
DELETE /background-tasks/{id} 204. Removes a finished task from the list.
GET /terminals/shells ShellProfile[]: the shells this server can open
POST /terminals { "shell": "bash", "cols": 120, "rows": 30 } BackgroundTaskInfo for the new shell. Read its output like a task's.
POST /terminals/{id}/input { "text": "ls -la\r" } 204. Keys typed in, including control characters (\u0003 is Ctrl+C).
POST /terminals/{id}/size { "cols": 160, "rows": 40 } 204
DELETE /terminals/{id} 204. Ends the shell and everything running in it.

The terminal endpoints also work with a bot's task id, to type into it.

Computers

Method Path Returns
GET /computers { dockerReady, dockerProblem, imageReady, computers, freeMemoryMb, totalMemoryMb }
GET /computers/{botId} { botId, state, note, userHasControl, handoverReason }; state is None, Off, Starting, Waiting or Running
POST /computers/{botId}/open { "url": "…" }: starts it if needed and returns a link to watch it (valid for 12 hours)
POST /computers/{botId}/stop 204
POST /computers/{botId}/reset 204. Deletes its apps, browser data and sign-ins.
POST /computers/{botId}/take 204. You take control, and the bot waits.
POST /computers/{botId}/handback 204

Local models

Method Path Body Returns
GET /local-models?updates=true The runtime, GPU, downloaded models and downloads in progress
POST /local-models/runtime/install 204. Installs or updates llama.cpp in the background.
GET /local-models/hub?q=qwen&sort=best GGUF models on Hugging Face. sort: best, trending, downloads, likes, updated, newest.
GET /local-models/hub/repo?id=owner/name A model's quants, each with whether it fits
POST /local-models/downloads { "repo", "quant", "files" } The download's state. It carries on in the background.
POST /local-models/downloads/cancel { "id": "<download id>" } 204
POST /local-models/model { "id", "settings", "load": true } 204. Saves settings and/or loads (true) or unloads (false).
POST /local-models/preview { "id", "settings" } Where the model's memory would go with those settings
POST /local-models/model/delete { "id" } 204
GET /local-models/log?id=… { "text": "…" }: what llama-server printed
PUT /local-models/options { "idleMinutes", "useLmStudioModels", "useAllGpus", "huggingFaceToken", "folder" } 204. Fields left out stay as they are.

Model ids contain slashes, so they go in the body rather than the path.