The API is versioned under /api/v1. A complete OpenAPI 3.1 document,
with a typed request schema for every tool, is generated from the live
catalog:
GET /api/v1/openapi.json on a running server (also linked from Admin →
API and Settings → About );
dogubako api openapi > openapi.json offline.
Feed it to your favorite client generator, or to an HTTP client like
Bruno, Insomnia or Postman.
Scripts and agents: Authorization: Bearer dgb_… (the scheme name is
case-insensitive). Create a token in
Account → API tokens , or with dogubako tokens create. See
API tokens .
Browsers: a session cookie from POST /api/v1/auth/login. Every
non-GET request with a session must send the returned csrf_token as the
X-CSRF-Token header.
Discovery endpoints only return what the caller is permitted to use, and
every run is checked against the caller’s policy.
H = " Authorization: Bearer $TOKEN "
# 1. Upload: multipart (any field name, many files) or a raw body
curl -H " $H " -F file=@photo.jpg https://host/api/v1/files
curl -H " $H " -T photo.jpg " https://host/api/v1/files/raw?name=photo.jpg " # → {"id":"f_…", …}
# 2. Run: waits up to wait_seconds (default 30); 200 when finished, 202 with the job if still running
curl -H " $H " -H ' Content-Type: application/json ' \
-d ' {"params":{"input":["f_…"],"format":"webp","quality":80},"wait_seconds":60} ' \
https://host/api/v1/tools/image.convert/run
# 3. Poll, stream or cancel
curl -H " $H " " https://host/api/v1/jobs/j_…?wait_seconds=30 "
curl -N -H " $H " https://host/api/v1/jobs/j_…/events # server-sent events
curl -X POST -H " $H " https://host/api/v1/jobs/j_…/cancel
curl -H " $H " -o out.webp https://host/api/v1/files/f_…/content
curl -H " $H " -o all.zip https://host/api/v1/jobs/j_…/artifacts.zip
File parameters take file ids (f_…). A parameter that accepts several
files takes an array of ids.
POST /api/v1/tools/{id}/run
"params" : { "input" : [ " f_… " ], "format" : " webp " },
Field
Meaning
params
The tool’s parameters. The tool catalog and the OpenAPI document list them
wait_seconds
How long to wait for the result before returning 202 with the running job. 0 returns immediately
ephemeral
true for throwaway runs (such as live previews): executed and audited, but hidden from history
"tool_id" : " image.convert " ,
"params" : { "input" : [ " f_… " ], "format" : " webp " },
{ "id" : " f_… " , "name" : " photo.webp " , "mime" : " image/webp " , "size" : 48213 , "url" : " /api/v1/files/f_…/content " }
"created_at" : 1767225600 ,
"finished_at" : 1767225601
status is queued, running, succeeded, failed or cancelled.
progress runs from 0 to 1 when the tool reports it. A failed job carries a
tagged error in error.
GET /api/v1/jobs/{id}/events is a server-sent event stream. Each event is
named job and its data is the job object as JSON. The stream ends after a
terminal status. A common pattern is to run with wait_seconds: 0 and then
follow the events.
"message" : " invalid input for 'quality': must be at most 100 " ,
"detail" : { "code" : " invalid_input " , "param" : " quality " , "message" : " must be at most 100 " }
All codes and HTTP statuses are in Errors .
Method and path
Purpose
GET /status
Instance name, version, auth mode, whether setup is required, whether MCP is on, tool count, max upload
POST /setup
First-run owner creation with the setup token: {setup_token, username, password}
GET /healthz
Liveness (outside /api/v1)
Method and path
Purpose
POST /auth/login
{username, password} → sets the session cookie, returns {csrf_token, user}
POST /auth/logout
End the session
GET /auth/me
The current user, permissions, policy, storage use and CSRF token
POST /auth/password
{current_password, new_password}
Method and path
Purpose
GET /tools[?q=&category=]
Permitted tools with their specs, availability and input schemas
GET /tools/{id}
One tool
GET /categories
Categories with tool counts
POST /tools/{id}/run
Run a tool (see above)
Method and path
Purpose
GET /jobs[?limit=]
Your job history
GET /jobs/{id}[?wait_seconds=]
One job, optionally long-polling until it finishes
GET /jobs/{id}/events
Server-sent events for one job
POST /jobs/{id}/cancel
Cancel
DELETE /jobs/{id}
Delete the job and its outputs
GET /jobs/{id}/artifacts.zip
All outputs as a zip
Method and path
Purpose
GET /files
Your files, with storage used and quota
POST /files
Multipart upload, any field name, many files → {files: [...]}
PUT /files/raw?name=
Raw-body upload of one file → the file object
GET /files/{id}
File metadata
GET /files/{id}/content[?inline=1]
Download. Supports Range. inline=1 previews passive types (images, audio, video, PDF, plain text) in a sandbox
DELETE /files/{id}
Delete
Method and path
Purpose
GET /tokens
Your tokens
POST /tokens
{name, expires_days?, scope?} → {id, token, prefix}; the token is shown once
DELETE /tokens/{id}
Revoke
Method and path
Purpose
GET /deps
Engine status with install commands for each package manager
POST /deps/refresh
Detect engines again
GET /models
Models and download progress
POST /models/{id}/download
Download a model (admin)
DELETE /models/{id}
Remove a model (admin)
GET /extensions
Extension status (admin)
The relay for plain words . People only: agent accounts
get 403. Session requests need the CSRF token, and each user may have at most
4 requests in flight.
Method and path
Purpose
GET /assistant/config
Whether plain words is enabled for the caller, the shared “This server” model if any, and whether private addresses are allowed
POST /assistant/models
List the models of an endpoint (the base URL and key come in the body, or use “This server”)
POST /assistant/chat
Relay one OpenAI-style chat-completions request to the chosen endpoint
Method and path
Purpose
GET /admin/users, POST /admin/users
List, or create {username, password?, role, policy?, description}. Agents have no password
PATCH /admin/users/{id}
Change {role?, policy?, disabled?, description?}
DELETE /admin/users/{id}
Delete
POST /admin/users/{id}/password
Set a password
GET /admin/tokens, POST /admin/tokens
Everyone’s tokens; create one for any account: {user_id, name, expires_days?, scope?}
GET /admin/audit?limit=&before=
Audit log, newest first
GET /admin/config
Effective configuration, running jobs, uptime and the permission list
Method and path
Purpose
GET /openapi.json
The OpenAPI document
POST /mcp, DELETE /mcp
MCP Streamable HTTP, outside /api/v1. See MCP
A scope or policy object has the shape described in
Permissions and policies .