API Server

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

Overview

The cagent 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
$ cagent api agent.yaml

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

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

# Auto-refresh from OCI registry every 10 minutes
$ cagent 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

cagent 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 cagent 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.