--- title: "HTTP API" description: "Endpoint reference for the sandbox agent daemon." --- All endpoints are under `/v1`. Authentication uses the daemon-level token via `Authorization: Bearer ` or `x-sandbox-token`. ## Sessions
POST /v1/sessions/{sessionId} - Create session Request: ```json { "agent": "claude", "agentMode": "build", "permissionMode": "default", "model": "claude-3-5-sonnet", "variant": "high", "agentVersion": "latest" } ``` Response: ```json { "healthy": true, "agentSessionId": "..." } ```
POST /v1/sessions/{sessionId}/messages - Send message Request: ```json { "message": "Describe the repository." } ```
GET /v1/sessions/{sessionId}/events - Fetch events Query params: - `offset`: last-seen event id (exclusive) - `limit`: max number of events Response: ```json { "events": [ { "id": 1, "timestamp": "2026-01-25T10:00:00Z", "sessionId": "my-session", "agent": "claude", "agentSessionId": "...", "data": { "message": { "role": "assistant", "parts": [{ "type": "text", "text": "..." }] } } } ], "hasMore": false } ```
GET /v1/sessions/{sessionId}/events/sse - Stream events (SSE) Query params: - `offset`: last-seen event id (exclusive) SSE payloads are `UniversalEvent` JSON.
POST /v1/sessions/{sessionId}/questions/{questionId}/reply Request: ```json { "answers": [["Option A"], ["Option B", "Option C"]] } ```
POST /v1/sessions/{sessionId}/questions/{questionId}/reject Request: ```json {} ```
POST /v1/sessions/{sessionId}/permissions/{permissionId}/reply Request: ```json { "reply": "once" } ```
## Agents
GET /v1/agents - List agents Response: ```json { "agents": [ { "id": "claude", "installed": true, "version": "...", "path": "/usr/local/bin/claude" } ] } ```
POST /v1/agents/{agentId}/install - Install agent Request: ```json { "reinstall": false } ```
GET /v1/agents/{agentId}/modes - List modes Response: ```json { "modes": [ { "id": "build", "name": "Build", "description": "Default coding mode" } ] } ```
## Error handling All errors use RFC 7807 Problem Details and stable `type` strings (e.g. `urn:sandbox-agent:error:session_not_found`).