Datasets
HTTP API routes for datasets and held-out evidence.
| Route | Use | CLI equivalent |
|---|---|---|
GET /datasets | List datasets. | ax datasets list |
GET /datasets/{dataset_id} | Get a dataset. | ax datasets show |
GET /datasets/{dataset_id}/cases | List draft cases. | MCP: dataset_cases |
GET /datasets/{dataset_id}/cases/{id} | Get a draft case. | MCP: dataset_case_get |
GET /datasets/{dataset_id}/versions | List published versions. | MCP: dataset_versions |
GET /datasets/{dataset_id}/versions/{id} | Get published version metadata. | MCP: dataset_version_get |
GET /datasets/{dataset_id}/versions/{id}/cases | Read immutable version cases. | ax datasets pull |
POST /datasets/{dataset_id}/reveals | Record a held-out reveal. | MCP: dataset_reveal |
POST /datasets | Dataset create. | MCP: dataset_create |
PATCH /datasets/{dataset_id} | Dataset update. | MCP: dataset_update |
POST /datasets/{dataset_id}/cases | Dataset case create. | MCP: dataset_case_create |
PATCH /datasets/{dataset_id}/cases/{id} | Dataset case update. | MCP: dataset_case_update |
POST /datasets/{dataset_id}/versions | Dataset publish. | ax datasets push |
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/datasets
List datasets.
curl -H "Authorization: Bearer $AX_API_KEY" \
"https://app.514.ax/api/v1/datasets?agent_id=$AGENT_ID&eval_id=$EVAL_ID"| Parameter | What it does |
|---|---|
agent_id | Required. Context agent UUID. |
eval_id | Required. Parent eval UUID. |
GET /api/v1/datasets/{dataset_id}
Get a dataset.
curl -H "Authorization: Bearer $AX_API_KEY" \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}?agent_id=$AGENT_ID&eval_id=$EVAL_ID"| Parameter | What it does |
|---|---|
agent_id | Required. Context agent UUID. |
eval_id | Required. Parent eval UUID. |
GET /api/v1/datasets/{dataset_id}/cases
List draft cases.
curl -H "Authorization: Bearer $AX_API_KEY" \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/cases?agent_id=$AGENT_ID&eval_id=$EVAL_ID"| Parameter | What it does |
|---|---|
agent_id | Required. Context agent UUID. |
eval_id | Required. Parent eval UUID. |
split | Optional train, validation or test filter. |
GET /api/v1/datasets/{dataset_id}/cases/{id}
Get a draft case.
curl -H "Authorization: Bearer $AX_API_KEY" \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/cases/${ID}?agent_id=$AGENT_ID&eval_id=$EVAL_ID"| Parameter | What it does |
|---|---|
agent_id | Required. Context agent UUID. |
eval_id | Required. Parent eval UUID. |
GET /api/v1/datasets/{dataset_id}/versions
List published versions.
curl -H "Authorization: Bearer $AX_API_KEY" \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/versions?agent_id=$AGENT_ID&eval_id=$EVAL_ID"| Parameter | What it does |
|---|---|
agent_id | Required. Context agent UUID. |
eval_id | Required. Parent eval UUID. |
GET /api/v1/datasets/{dataset_id}/versions/{id}
Get published version metadata.
curl -H "Authorization: Bearer $AX_API_KEY" \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/versions/${ID}?agent_id=$AGENT_ID&eval_id=$EVAL_ID"| Parameter | What it does |
|---|---|
agent_id | Required. Context agent UUID. |
eval_id | Required. Parent eval UUID. |
Here {id} is the version metadata row UUID from the versions list.
GET /api/v1/datasets/{dataset_id}/versions/{id}/cases
Read immutable version cases.
curl -H "Authorization: Bearer $AX_API_KEY" \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/versions/${ID}/cases?agent_id=$AGENT_ID&eval_id=$EVAL_ID"| Parameter | What it does |
|---|---|
agent_id | Required. Context agent UUID. |
eval_id | Required. Parent eval UUID. |
Here {id} is the integer version, not the metadata row UUID. Returns
{rows, nextPageToken, contentHash}. The server hash covers the full snapshot,
including redacted cases. Metadata-only legacy versions return HTTP 412.
POST /api/v1/datasets/{dataset_id}/reveals
Record a held-out reveal.
curl -X POST -H "Authorization: Bearer $AX_API_KEY" \
-H "Content-Type: application/json" --data @request.json \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/reveals"Put the fields below in request.json.
| Parameter | What it does |
|---|---|
agentId | Required. Context agent UUID. |
evalId | Required. Parent eval UUID. |
version | Required. Positive published version number. |
This POST writes an audit record before held-out input, expected values or result details become readable to your user. Another user's reveal grants you no access.
POST /api/v1/datasets
Dataset create.
curl -X POST -H "Authorization: Bearer $AX_API_KEY" \
-H "Content-Type: application/json" --data @request.json \
"https://app.514.ax/api/v1/datasets"Put the fields below in request.json.
| Parameter | What it does |
|---|---|
agentId | Required. Context agent UUID. |
evalId | Required. Parent eval UUID. |
values | Required. Object of case or dataset fields to write. |
Set values.name. Optional fields are description, owner and
split_ratio (train, validation, test percentages totaling 100).
PATCH /api/v1/datasets/{dataset_id}
Dataset update.
curl -X PATCH -H "Authorization: Bearer $AX_API_KEY" \
-H "Content-Type: application/json" --data @request.json \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}"Put the fields below in request.json.
| Parameter | What it does |
|---|---|
agentId | Required. Context agent UUID. |
evalId | Required. Parent eval UUID. |
expectedUpdatedAt | Required. Last observed updated_at; stale writes fail. |
values | Required. Object of case or dataset fields to write. |
POST /api/v1/datasets/{dataset_id}/cases
Dataset case create.
curl -X POST -H "Authorization: Bearer $AX_API_KEY" \
-H "Content-Type: application/json" --data @request.json \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/cases"Put the fields below in request.json.
| Parameter | What it does |
|---|---|
agentId | Required. Context agent UUID. |
evalId | Required. Parent eval UUID. |
values | Required. Object of case or dataset fields to write. |
Case values include case_key, split, split_override, input, expected,
tags, added_in_version and retired_in_version. Creating a case requires
case_key and split. Updates preserve unspecified fields.
PATCH /api/v1/datasets/{dataset_id}/cases/{id}
Dataset case update.
curl -X PATCH -H "Authorization: Bearer $AX_API_KEY" \
-H "Content-Type: application/json" --data @request.json \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/cases/${ID}"Put the fields below in request.json.
| Parameter | What it does |
|---|---|
agentId | Required. Context agent UUID. |
evalId | Required. Parent eval UUID. |
expectedUpdatedAt | Required. Last observed updated_at; stale writes fail. |
values | Required. Object of case or dataset fields to write. |
Case values include case_key, split, split_override, input, expected,
tags, added_in_version and retired_in_version. Creating a case requires
case_key and split. Updates preserve unspecified fields.
POST /api/v1/datasets/{dataset_id}/versions
Dataset publish.
curl -X POST -H "Authorization: Bearer $AX_API_KEY" \
-H "Content-Type: application/json" --data @request.json \
"https://app.514.ax/api/v1/datasets/${DATASET_ID}/versions"Put the fields below in request.json.
| Parameter | What it does |
|---|---|
agentId | Required. Context agent UUID. |
evalId | Required. Parent eval UUID. |
values | Required. Object of case or dataset fields to write. |
Set values.version to a new positive integer and optionally provide
values.changelog. Publication snapshots active cases atomically. The server
computes content_hash; client hashes are ignored. Reusing a version returns
HTTP 409.