Evals

HTTP API routes for evals and held-out evidence.

RouteUseCLI equivalent
GET /evalsList evals.ax evals list
GET /evals/{eval_id}Get an eval.ax evals show
GET /evals/{eval_id}/trendRead grader trends.ax evals trend
GET /evals/{eval_id}/resultsList eval results.ax evals results
GET /evals/{eval_id}/results/{run_id}/{case_key}Read a case result.MCP: eval_result_get
GET /evals/{eval_id}/results/{run_id}/{case_key}/detailRead result assertions and events.MCP: eval_result_detail
GET /evals/{eval_id}/runsList eval runs.MCP: eval_runs
GET /evals/runs/{run_id}Read an eval run.MCP: eval_run_get

All routes require a bearer API key and organization access with agent evals enabled. Supply org_id when the key belongs to several organizations. GET parameters use snake_case. Write envelope fields use lowerCamelCase; fields inside values keep snake_case (case_key, split_ratio). Records retain their original snake_case fields. Arguments are optional unless marked required. List routes return {rows, nextPageToken}. Pass page_size (default 50, maximum 200) and page_token to continue. Single-record routes return {record}.

Test-split results and snapshot cases stay redacted until your user explicitly records a reveal for that exact dataset version. The response preserves redacted_held_out: true. Detail reads return HTTP 412 with error: "failed_precondition" and a message naming RecordReveal when a reveal is required. No GET records a reveal.

GET /api/v1/evals

List evals.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals?agent_id=$AGENT_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.

GET /api/v1/evals/{eval_id}

Get an eval.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals/${EVAL_ID}?agent_id=$AGENT_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.

GET /api/v1/evals/{eval_id}/trend

Read grader trends.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals/${EVAL_ID}/trend?agent_id=$AGENT_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.

GET /api/v1/evals/{eval_id}/results

List eval results.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals/${EVAL_ID}/results?agent_id=$AGENT_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.
splitOptional train, validation or test filter.

GET /api/v1/evals/{eval_id}/results/{run_id}/{case_key}

Read a case result.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals/${EVAL_ID}/results/${RUN_ID}/${CASE_KEY}?agent_id=$AGENT_ID&dataset_id=$DATASET_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.
dataset_idRequired. Parent dataset UUID.

GET /api/v1/evals/{eval_id}/results/{run_id}/{case_key}/detail

Read result assertions and events.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals/${EVAL_ID}/results/${RUN_ID}/${CASE_KEY}/detail?agent_id=$AGENT_ID&dataset_id=$DATASET_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.
dataset_idRequired. Parent dataset UUID.
assertions_page_tokenOptional assertions cursor.
events_page_tokenOptional events cursor.

Returns {result, assertions, events, assertionsNextPageToken, eventsNextPageToken}. Each evidence list has an independent cursor; page_size bounds each.

GET /api/v1/evals/{eval_id}/runs

List eval runs.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals/${EVAL_ID}/runs?agent_id=$AGENT_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.

GET /api/v1/evals/runs/{run_id}

Read an eval run.

curl -H "Authorization: Bearer $AX_API_KEY" \
  "https://app.514.ax/api/v1/evals/runs/${RUN_ID}?agent_id=$AGENT_ID"
ParameterWhat it does
agent_idRequired. Context agent UUID.