API Server

Expose your agents via an HTTP API for programmatic access, web frontends, and integrations.

Overview

The docker agent serve api command starts an HTTP server that exposes your agents through a REST-style API with Server-Sent Events (SSE) streaming. Use it to build web UIs, integrate with CI/CD pipelines, or connect agents to other services.

# Start the API server
$ docker agent api agent.yaml

# Custom listen address
$ docker agent api agent.yaml --listen 0.0.0.0:8080

# With session persistence
$ docker agent api agent.yaml --session-db ./sessions.db

# Auto-refresh from OCI registry every 10 minutes
$ docker agent api agentcatalog/coder --pull-interval 10

Endpoints

All endpoints are under the /api prefix.

Agents

Method Path Description
GET /api/agents List all available agents
GET /api/agents/:id Get an agent’s full configuration

Sessions

Method Path Description
GET /api/sessions List all sessions
POST /api/sessions Create a new session
GET /api/sessions/:id Get a session by ID (messages, tokens, permissions)
DELETE /api/sessions/:id Delete a session
PATCH /api/sessions/:id/title Update session title
PATCH /api/sessions/:id/permissions Update session permissions
POST /api/sessions/:id/resume Resume a paused session (after tool confirmation)
POST /api/sessions/:id/tools/toggle Toggle auto-approve (YOLO) mode
POST /api/sessions/:id/thinking/toggle Toggle thinking/reasoning mode
POST /api/sessions/:id/elicitation Respond to an MCP tool elicitation request

Agent Execution

Method Path Description
POST /api/sessions/:id/agent/:agent Run the root agent for a session (SSE stream)
POST /api/sessions/:id/agent/:agent/:name Run a specific named agent (SSE stream)

Health

Method Path Description
GET /api/ping Health check — returns {"status": "ok"}

Streaming Responses

The agent execution endpoints (POST /api/sessions/:id/agent/:agent) return Server-Sent Events (SSE). Each event is a JSON object representing a runtime event:

# Send a message and stream the response
$ curl -N -X POST http://localhost:8080/api/sessions/$SID/agent/my-agent \
  -H "Content-Type: application/json" \
  -d '[{"role": "user", "content": "Hello!"}]'

# Response (SSE stream):
data: {"type":"stream_started","session_id":"...","agent":"root"}
data: {"type":"agent_choice","content":"Hello! How","agent":"root"}
data: {"type":"agent_choice","content":" can I help","agent":"root"}
data: {"type":"agent_choice","content":" you today?","agent":"root"}
data: {"type":"stream_stopped","session_id":"...","agent":"root"}

Event types include:

Typical Workflow

  1. List agentsGET /api/agents to discover available agents
  2. Create sessionPOST /api/sessions to start a conversation
  3. Send messagePOST /api/sessions/:id/agent/:agent with user messages
  4. Stream response — Read SSE events as the agent processes
  5. Handle confirmations — If a tool call needs approval, POST /api/sessions/:id/resume
  6. Continue — Send follow-up messages to the same session
# 1. List available agents
$ curl http://localhost:8080/api/agents
[{"name":"my-agent","multi":false,"description":"A helpful assistant"}]

# 2. Create a session
$ curl -X POST http://localhost:8080/api/sessions \
  -H "Content-Type: application/json" -d '{}'
{"id":"abc-123","title":"","created_at":"..."}

# 3. Run the agent with a message
$ curl -N -X POST http://localhost:8080/api/sessions/abc-123/agent/my-agent \
  -H "Content-Type: application/json" \
  -d '[{"role":"user","content":"What files are in the current directory?"}]'

CLI Flags

docker-agent api <agent-file>|<agents-dir> [flags]
Flag Default Description
-l, --listen 127.0.0.1:8080 Address to listen on
-s, --session-db session.db Path to the SQLite session database
--pull-interval 0 (disabled) Auto-pull OCI reference every N minutes
--connect-rpc false Use Connect-RPC protocol instead of HTTP/JSON
--fake (none) Replay AI responses from cassette file (testing)
--record (none) Record AI API interactions to cassette file
💡 Multi-agent configs

You can point docker agent serve api at a directory containing multiple agent YAML files. Each becomes a separate agent accessible via /api/agents. Combine with --pull-interval to auto-refresh agents from an OCI registry.

Session Persistence

Sessions are stored in a SQLite database (default: session.db in the current directory). This means:

Tool Call Approval

By default, tool calls require approval. In the API workflow:

  1. Agent makes a tool call → server emits a tool_call_confirmation event
  2. Client reviews and sends POST /api/sessions/:id/resume with the decision
  3. Execution continues based on approval/denial

Toggle auto-approve with POST /api/sessions/:id/tools/toggle for automated workflows.

ℹ️ See also

For interactive use, see the Terminal UI. For agent-to-agent communication, see A2A Protocol and ACP. For MCP integration, see MCP Mode.