Datasets

HTTP API routes for datasets and held-out evidence.

RouteUseCLI equivalent
GET /datasetsList datasets.ax datasets list
GET /datasets/{dataset_id}Get a dataset.ax datasets show
GET /datasets/{dataset_id}/casesList draft cases.MCP: dataset_cases
GET /datasets/{dataset_id}/cases/{id}Get a draft case.MCP: dataset_case_get
GET /datasets/{dataset_id}/versionsList 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}/casesRead immutable version cases.ax datasets pull
POST /datasets/{dataset_id}/revealsRecord a held-out reveal.MCP: dataset_reveal
POST /datasetsDataset create.MCP: dataset_create
PATCH /datasets/{dataset_id}Dataset update.MCP: dataset_update
POST /datasets/{dataset_id}/casesDataset case create.MCP: dataset_case_create
PATCH /datasets/{dataset_id}/cases/{id}Dataset case update.MCP: dataset_case_update
POST /datasets/{dataset_id}/versionsDataset 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"
ParameterWhat it does
agent_idRequired. Context agent UUID.
eval_idRequired. 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"
ParameterWhat it does
agent_idRequired. Context agent UUID.
eval_idRequired. 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"
ParameterWhat it does
agent_idRequired. Context agent UUID.
eval_idRequired. Parent eval UUID.
splitOptional 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"
ParameterWhat it does
agent_idRequired. Context agent UUID.
eval_idRequired. 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"
ParameterWhat it does
agent_idRequired. Context agent UUID.
eval_idRequired. 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"
ParameterWhat it does
agent_idRequired. Context agent UUID.
eval_idRequired. 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"
ParameterWhat it does
agent_idRequired. Context agent UUID.
eval_idRequired. 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.

ParameterWhat it does
agentIdRequired. Context agent UUID.
evalIdRequired. Parent eval UUID.
versionRequired. 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.

ParameterWhat it does
agentIdRequired. Context agent UUID.
evalIdRequired. Parent eval UUID.
valuesRequired. 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.

ParameterWhat it does
agentIdRequired. Context agent UUID.
evalIdRequired. Parent eval UUID.
expectedUpdatedAtRequired. Last observed updated_at; stale writes fail.
valuesRequired. 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.

ParameterWhat it does
agentIdRequired. Context agent UUID.
evalIdRequired. Parent eval UUID.
valuesRequired. 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.

ParameterWhat it does
agentIdRequired. Context agent UUID.
evalIdRequired. Parent eval UUID.
expectedUpdatedAtRequired. Last observed updated_at; stale writes fail.
valuesRequired. 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.

ParameterWhat it does
agentIdRequired. Context agent UUID.
evalIdRequired. Parent eval UUID.
valuesRequired. 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.