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:
stream_started/stream_stopped— Agent execution lifecycleagent_choice— Streamed text content (partial responses)tool_call— Agent requesting tool executiontool_call_confirmation— Tool call waiting for user approvaltool_call_response— Tool execution resulterror— Error during execution
Typical Workflow
- List agents —
GET /api/agentsto discover available agents - Create session —
POST /api/sessionsto start a conversation - Send message —
POST /api/sessions/:id/agent/:agentwith user messages - Stream response — Read SSE events as the agent processes
- Handle confirmations — If a tool call needs approval,
POST /api/sessions/:id/resume - 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 |
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:
- Sessions survive server restarts
- Multiple server instances can share a database
- Use
--session-dbto specify a custom path
Tool Call Approval
By default, tool calls require approval. In the API workflow:
- Agent makes a tool call → server emits a
tool_call_confirmationevent - Client reviews and sends
POST /api/sessions/:id/resumewith the decision - Execution continues based on approval/denial
Toggle auto-approve with POST /api/sessions/:id/tools/toggle for automated workflows.
For interactive use, see the Terminal UI. For agent-to-agent communication, see A2A Protocol and ACP. For MCP integration, see MCP Mode.