Log in Create workspace
Skip to content

API reference

Eval Suites

Manage workspace evaluation definitions, rubrics, schedules, canary settings, and workflow-target links.

Jump to 6 endpoints
On this page

Overview

An evaluation suite groups the test cases and scoring rules used to judge a workflow. Define a suite once, then run it repeatedly as your prompts, models, or workflow versions change. This machine API manages the suite's configuration; add its test cases and workflow versions in the operator console before starting a run.

Suite policy is separate from cases
The suite stores its target association, rubric type, schedule, and canary controls. Create does not accept cases, and clone copies suite fields only. A clone starts without the source cases, disables its schedule and canary, and clears last_scheduled_at, while preserving the source interval and maximum-regression values for later re-enablement.
The request has an `eval_suite` wrapper
Create and patch attributes belong under eval_suite. The response is the suite object itself; list is the one response wrapped under the eval_suites key.
Deletion is destructive
DELETE returns 204 and cascades to the suite's cases, eval runs, and related review history. Prefer a deliberate operator workflow when historical evaluation evidence must be preserved.

Before you begin

  • The command-line examples require curl and jq; any exception is identified in its introduction.
  • A workflow target in the same workspace before creating a suite.
  • A credential with eval_suites:read for list/show or eval_suites:write for mutations.
  • Operator access to /app/evals/suites/:id when test cases must be added or edited.

How it works

  1. Select the target and rubric

    Choose a workspace workflow-target ID and one supported rubric: composite, exact match, status code, or LLM judge. Set an explicit pass threshold if the default 80 percent is unsuitable.

  2. Create the suite, then its cases

    POST the wrapped suite fields, retain its ID, and use the operator console to add enabled cases and workflow versions. If omitted, the schedule interval defaults to 1440 minutes and maximum canary regression to 5 percent. Set them explicitly to suit your workflow.

  3. Read before update, clone, or delete

    GET the suite to inspect its target and case summaries. Remember that cloning is a configuration starting point, not a full test corpus copy.

Examples

These examples are illustrative. Replace the sample values with your own. Keep credentials in environment variables or a secret manager, never in client-side code.

Create a scheduled suite

The target must already belong to the authenticated workspace.

bash
export AGENTOPS_BASE_URL="https://robotscenter.net"
export AGENT_TOKEN="machine_token_with_eval_suite_write"
export WORKFLOW_TARGET_ID="f92da274-a794-49ee-bd4d-b13022a6041a"

jq -n --arg target "$WORKFLOW_TARGET_ID" \
  '{eval_suite: {name: "Support answer quality", slug: "support-answer-quality", workflow_target_id: $target, description: "Hourly regression checks", rubric_type: "composite", pass_threshold: 90.0, schedule_enabled: true, schedule_interval_minutes: 60}}' |
  curl --fail-with-body --silent --show-error \
    -X POST -H 'content-type: application/json' \
    -H "Authorization: Bearer $AGENT_TOKEN" \
    --data-binary @- "$AGENTOPS_BASE_URL/api/v1/eval_suites" | jq .
What to expect

HTTP 201 returns the suite directly with status, schedule and canary fields, target summary, timestamps, and eval_cases.

Troubleshooting

Create returns 400 or 422
A missing eval_suite wrapper returns 400 before field validation. With the wrapper present, an invalid name, target, rubric, nonpositive schedule interval, or negative canary regression returns 422. Omitted interval/regression fields receive defaults. Add test cases through the operator console, not a cases array in this request.
The clone has no test cases
That is the shipped contract: clone copies suite fields but not cases. It disables schedule_enabled and canary_enabled and clears last_scheduled_at; it retains schedule_interval_minutes and canary_max_regression. Add the new corpus explicitly in the operator UI.
A suite ID returns 404
IDs are workspace-scoped. Verify the credential belongs to the suite's workspace and that the suite was not deleted by another operator.

Endpoint reference

Ready to integrate? Open an endpoint for its required permissions, request fields, response format, and status codes. The examples above explain the workflow; these details define each individual request.

GET
/api/v1/eval_suites API key / access token

List eval suites

eval_suites:read

Description

Returns all eval suites for the authenticated workspace, including their eval cases and associated workflow targets.

Auth

API key / access token

Required Scopes

eval_suites:read
Parameters
Name In Type Required Description
filter[workflow_target_id] query string No Filter by workflow target UUID
Responses
200

List of eval suites

Returns: EvalSuiteList

Example
{
  "eval_suites": [
    {
      "archived_at": null,
      "canary_enabled": false,
      "canary_max_regression": null,
      "description": "Evals for payment processing correctness",
      "eval_cases": [],
      "id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699",
      "inserted_at": "2026-02-10T08:00:00Z",
      "last_scheduled_at": null,
      "name": "Payment accuracy suite",
      "rubric_type": "llm_judge",
      "schedule_enabled": false,
      "schedule_interval_minutes": null,
      "status": "active",
      "updated_at": "2026-03-20T14:00:00Z",
      "workflow_target": null
    }
  ]
}
401

Invalid or missing token

403

Missing required scope

POST
/api/v1/eval_suites API key / access token

Create an eval suite

eval_suites:write

Description

Creates a new eval suite linked to a workflow target. The suite stores rubrics and scheduling. Eval cases and workflow versions have no API create/update/archive/baseline routes — operators manage them on /app/evals/suites/:id and /app/evals/targets/:id. This request does not accept a cases payload.

Auth

API key / access token

Required Scopes

eval_suites:write
Request Body
Field Type Required Description
eval_suite object Yes Eval suite attributes
eval_suite.name string Yes Suite name
eval_suite.description string No Suite description
eval_suite.slug string No URL-safe slug (auto-generated from name if omitted)
eval_suite.workflow_target_id string Yes Workflow target UUID to evaluate
eval_suite.canary_enabled boolean No Enable canary gate (default: false)
eval_suite.canary_max_regression number No Nonnegative maximum canary regression percentage; defaults to 5.0 when omitted
eval_suite.pass_threshold number No Pass threshold percentage (default: 80.0)
eval_suite.rubric_type string (composite, exact_match, status_code, llm_judge) No Evaluation rubric type
eval_suite.schedule_enabled boolean No Enable scheduled runs (default: false)
eval_suite.schedule_interval_minutes integer No Positive schedule interval in minutes; defaults to 1440 when omitted
Responses
201

Eval suite created

Returns: EvalSuite

Example
{
  "archived_at": null,
  "canary_enabled": false,
  "canary_max_regression": null,
  "description": "Evals for payment processing correctness",
  "eval_cases": [],
  "id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699",
  "inserted_at": "2026-02-10T08:00:00Z",
  "last_scheduled_at": null,
  "name": "Payment accuracy suite",
  "rubric_type": "llm_judge",
  "schedule_enabled": false,
  "schedule_interval_minutes": null,
  "status": "active",
  "updated_at": "2026-03-20T14:00:00Z",
  "workflow_target": null
}
401

Invalid or missing token

403

Missing required scope

422

Validation error

GET
/api/v1/eval_suites/:id API key / access token

Get eval suite details

eval_suites:read

Description

Returns details of a specific eval suite including all eval cases and workflow target association.

Auth

API key / access token

Required Scopes

eval_suites:read
Parameters
Name In Type Required Description
id path string Yes Eval suite UUID
Responses
200

Eval suite details

Returns: EvalSuite

Example
{
  "archived_at": null,
  "canary_enabled": false,
  "canary_max_regression": null,
  "description": "Evals for payment processing correctness",
  "eval_cases": [],
  "id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699",
  "inserted_at": "2026-02-10T08:00:00Z",
  "last_scheduled_at": null,
  "name": "Payment accuracy suite",
  "rubric_type": "llm_judge",
  "schedule_enabled": false,
  "schedule_interval_minutes": null,
  "status": "active",
  "updated_at": "2026-03-20T14:00:00Z",
  "workflow_target": null
}
401

Invalid or missing token

403

Missing required scope

404

Eval suite not found

PATCH
/api/v1/eval_suites/:id API key / access token

Update an eval suite

eval_suites:write

Description

Updates attributes of an existing eval suite.

Auth

API key / access token

Required Scopes

eval_suites:write
Request Body
Field Type Required Description
eval_suite object Yes Eval suite attributes to update
Parameters
Name In Type Required Description
id path string Yes Eval suite UUID
Responses
200

Eval suite updated

Returns: EvalSuite

Example
{
  "archived_at": null,
  "canary_enabled": false,
  "canary_max_regression": null,
  "description": "Evals for payment processing correctness",
  "eval_cases": [],
  "id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699",
  "inserted_at": "2026-02-10T08:00:00Z",
  "last_scheduled_at": null,
  "name": "Payment accuracy suite",
  "rubric_type": "llm_judge",
  "schedule_enabled": false,
  "schedule_interval_minutes": null,
  "status": "active",
  "updated_at": "2026-03-20T14:00:00Z",
  "workflow_target": null
}
404

Eval suite not found

DELETE
/api/v1/eval_suites/:id API key / access token

Delete an eval suite

eval_suites:write

Description

Deletes an eval suite and cascades to its eval cases, eval runs, and related review history.

Auth

API key / access token

Required Scopes

eval_suites:write
Parameters
Name In Type Required Description
id path string Yes Eval suite UUID
Responses
204

Eval suite deleted

404

Eval suite not found

POST
/api/v1/eval_suites/:id/clone API key / access token

Clone an eval suite

eval_suites:write

Description

Creates a copy of an existing eval suite from suite fields only. Eval cases are not copied. Optionally override the name under the eval_suite wrapper. Schedule interval and canary regression numerics are preserved, while scheduling/canary enabled flags are disabled on the clone.

Auth

API key / access token

Required Scopes

eval_suites:write
Request Body
Field Type Required Description
eval_suite object No Override attributes for the cloned suite
eval_suite.name string No Custom name (default: 'Copy of <original>')
Parameters
Name In Type Required Description
id path string Yes Eval suite UUID to clone
Responses
201

Eval suite cloned

Returns: EvalSuite

Example
{
  "archived_at": null,
  "canary_enabled": false,
  "canary_max_regression": null,
  "description": "Evals for payment processing correctness",
  "eval_cases": [],
  "id": "9e1f1538-ff37-48f0-a2f9-65066d7d6699",
  "inserted_at": "2026-02-10T08:00:00Z",
  "last_scheduled_at": null,
  "name": "Payment accuracy suite",
  "rubric_type": "llm_judge",
  "schedule_enabled": false,
  "schedule_interval_minutes": null,
  "status": "active",
  "updated_at": "2026-03-20T14:00:00Z",
  "workflow_target": null
}
401

Invalid or missing token

403

Missing required scope

404

Source eval suite not found

Where to go next

see also