Server
API routes
HTTP surface exposed by the server. The /observability/* routes are inbound (SDKs call them); the /api/* routes power the dashboard and anything else that needs to read back captured data.
Inbound (SDKs)
| Method / Path | Purpose |
|---|---|
POST /observability/recordings/v0 | Multipart session report from an agent-transport SDK: JSON header, chat history, and optional OGG audio. Parsed, stored in Postgres, and optionally uploaded to S3. |
POST /observability/evals/v0 | Eval run payload from the pytest / vitest plugins: run metadata, per-case results, judgments, failures, and captured events. |
Dashboard API
| Method / Path | Purpose |
|---|---|
GET /api/sessions | Paginated list of sessions. Supports limit (1–20), offset, and filters like account_id, transport, started_from, started_to. |
GET /api/sessions/:id | Full session detail: chat history, computed per-turn metrics, raw report, events, and options. |
GET /api/evals | Paginated list of eval runs with the same pagination contract as sessions. |
GET /api/evals/:run_id | Single eval run with aggregate pass rate, CI metadata, and its list of cases. |
GET /api/evals/:run_id/cases/:case_id | One case with its transcript, judgments, and failure block. |
Ops
| Method / Path | Purpose |
|---|---|
GET /health | Always open (never behind basic auth). Returns 200 OK when the server is up. |
Environment
Configuration comes from environment variables. Only DATABASE_URL is required; basic auth, LiveKit Bearer auth, and S3 are opt-in and enable themselves when both vars in their pair are set.
Alerts
Windowed metric-threshold rules evaluated by a background sweeper. When a metric exceeds its threshold over the trailing window, the server fires a webhook — with HMAC signing, retries, and a full delivery audit trail.