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.