Skip to content

REST API — Workflow Evals

Method Path What it does
GET /api/workflows/{workflow_id}/evals/cases List a workflow’s test cases. Any member can view.
POST /api/workflows/{workflow_id}/evals/cases Create a test case. Members and owners.
DELETE /api/workflows/{workflow_id}/evals/cases/{case_id} Delete a test case. Members and owners. Past runs keep their snapshot (eval_results.eval_test_case_id goes NULL).
PATCH /api/workflows/{workflow_id}/evals/cases/{case_id} Update a test case. Members and owners. Past runs are unaffected (they graded against their snapshot).
GET /api/workflows/{workflow_id}/evals/compare Run-vs-run comparison — the version FK makes this a pure query; no schema, no new state. VIEWER, like the other reads.
GET /api/workflows/{workflow_id}/evals/runs List recent eval runs (denormalized summaries — single query).
POST /api/workflows/{workflow_id}/evals/runs Start a batch eval run. Members and owners.
GET /api/workflows/{workflow_id}/evals/runs/{run_id} One run with its per-case results (execution_id deep-links).
POST /api/workflows/{workflow_id}/evals/runs/{run_id}/cancel Request cancellation of an in-flight eval run. Members and owners.
GET /api/workflows/{workflow_id}/evals/settings Suite-level settings: schedule + gate. Any member can view.
PATCH /api/workflows/{workflow_id}/evals/settings Update schedule (MEMBER), fixture dataset (MEMBER, #670) and/or gate config (OWNER — disabling the gate is equivalent to overriding it, so it needs the same authority).
POST /auth/eval-run-ticket/{run_id} Short-lived ticket for the live-progress WebSocket.