Eigenpal Evaluation API
Manage datasets, examples, evaluators, experiment batches, evaluator scores, and run promotion workflows.
Manage datasets, examples, evaluators, experiment batches, evaluator scores, and run promotion workflows.
openapi: 3.1.0
info:
title: Eigenpal Automations Evaluation API
version: 1.0.0
description: Public REST API for inspecting automations, starting and monitoring runs, managing files, collecting human reviews, and running evaluations.
contact:
name: Eigenpal
url: https://eigenpal.com
license:
name: Apache-2.0
url: https://www.apache.org/licenses/LICENSE-2.0
servers:
- url: https://studio.eigenpal.com
description: Production
security:
- bearerAuth: []
tags:
- name: Evaluation
description: Manage datasets, examples, evaluators, experiment batches, evaluator scores, and run promotion workflows.
paths:
/api/v1/automations/{id}/dataset/export:
get:
operationId: automations.dataset.export
summary: Export automation dataset
description: Download the automation dataset as a ZIP archive. The archive uses the examples/<name>/input and examples/<name>/expected folder convention, so it can be re-imported into another automation or environment.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
- in: query
name: exampleIds
schema:
description: Optional comma-separated dataset example ids to export. Omit to export the full dataset.
type: string
description: Optional comma-separated dataset example ids to export. Omit to export the full dataset.
responses:
'200':
description: Dataset ZIP archive.
content:
application/octet-stream:
schema:
type: string
description: ZIP archive
format: binary
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
/api/v1/automations/{id}/dataset/import:
post:
operationId: automations.dataset.import
summary: Import automation dataset
description: Import a dataset ZIP archive using the examples/<name>/input and examples/<name>/expected folder convention. Use `mode=append` for additive imports or `mode=replace` to replace the dataset.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
requestBody:
required: true
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/AutomationDatasetImportMultipartRequest'
responses:
'200':
description: Import result
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetImportResponse'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
/api/v1/automations/{id}/evaluators:
get:
operationId: automations.evaluators.get
summary: Get evaluators
description: Fetch the evaluator configuration for an automation. Evaluators produce automated `score` results, which are separate from human review verdicts.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
responses:
'200':
description: Evaluator YAML and parsed configuration.
content:
application/json:
schema:
$ref: '#/components/schemas/EvaluatorConfigResponse'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
put:
operationId: automations.evaluators.update
summary: Replace evaluators
description: Replace the evaluator YAML for an automation. The submitted YAML is validated before it becomes the source for future experiment scores.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EvaluatorConfigUpdate'
responses:
'200':
description: Updated evaluator YAML and parsed configuration.
content:
application/json:
schema:
$ref: '#/components/schemas/EvaluatorConfigResponse'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
/api/v1/automations/{id}/examples:
get:
operationId: automations.examples.list
summary: List dataset examples
description: List dataset examples for one automation. Examples contain input, expected output, expected files, metadata, and optional overrides used by evaluation runs.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias, such as `workflows.slug` or `agents.slug`.
required: true
description: Automation id or typed alias, such as `workflows.slug` or `agents.slug`.
- in: query
name: limit
schema:
description: Maximum number of examples to return.
type: integer
minimum: 1
maximum: 100
description: Maximum number of examples to return.
- in: query
name: offset
schema:
description: Zero-based offset for paging through examples.
type: integer
minimum: 0
maximum: 9007199254740991
description: Zero-based offset for paging through examples.
responses:
'200':
description: Page of dataset examples.
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExampleList'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
post:
operationId: automations.examples.create
summary: Create dataset example
description: Create one dataset example from JSON fields. Use dataset import for archive-based uploads and file-bearing examples.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias, such as `workflows.slug` or `agents.slug`.
required: true
description: Automation id or typed alias, such as `workflows.slug` or `agents.slug`.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExampleMutation'
responses:
'201':
description: Created dataset example.
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExample'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
/api/v1/automations/{id}/examples/{exampleId}:
get:
operationId: automations.examples.get
summary: Get dataset example
description: Fetch one dataset example, including input, expected output, expected files, metadata, and overrides.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
- in: path
name: exampleId
schema:
type: string
description: Dataset example id. Agent examples may use deterministic name-derived ids returned by list/create responses.
required: true
description: Dataset example id. Agent examples may use deterministic name-derived ids returned by list/create responses.
responses:
'200':
description: Dataset example.
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExample'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
patch:
operationId: automations.examples.update
summary: Update dataset example
description: Partially update a dataset example. Omitted fields are preserved; pass null for nullable fields to clear them.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
- in: path
name: exampleId
schema:
type: string
description: Dataset example id. Agent examples may use deterministic name-derived ids returned by list/create responses.
required: true
description: Dataset example id. Agent examples may use deterministic name-derived ids returned by list/create responses.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExampleUpdate'
responses:
'200':
description: Updated dataset example.
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExample'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
delete:
operationId: automations.examples.delete
summary: Delete dataset example
description: Delete one dataset example from the automation dataset. This removes the example from future experiments.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
- in: path
name: exampleId
schema:
type: string
description: Dataset example id. Agent examples may use deterministic name-derived ids returned by list/create responses.
required: true
description: Dataset example id. Agent examples may use deterministic name-derived ids returned by list/create responses.
responses:
'200':
description: Deleted dataset example.
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExample'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
/api/v1/automations/{id}/examples/{exampleId}/expected:
get:
operationId: automations.examples.expected.files.list
summary: List expected files
description: List files stored under the expected folder for one automation dataset example.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
- in: path
name: exampleId
schema:
type: string
description: Dataset example id.
required: true
description: Dataset example id.
responses:
'200':
description: Expected file paths.
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExampleExpectedFileList'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
post:
operationId: automations.examples.expected.files.create
summary: Upload expected files
description: Upload one or more files into the expected folder for an automation dataset example. Use `$file` references such as `expected/result.pdf` from expected JSON to compare file outputs.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
- in: path
name: exampleId
schema:
type: string
description: Dataset example id.
required: true
description: Dataset example id.
requestBody:
required: true
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/DatasetExampleExpectedFileUploadRequest'
responses:
'201':
description: Uploaded expected files.
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetExampleExpectedFileUploadResponse'
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
/api/v1/automations/{id}/examples/{exampleId}/expected/{path}:
get:
operationId: automations.examples.expected.file.get
summary: Download expected dataset file
description: Download one expected file attached to an automation dataset example.
tags:
- Evaluation
parameters:
- in: path
name: id
schema:
type: string
description: Automation id or typed alias.
required: true
description: Automation id or typed alias.
- in: path
name: exampleId
schema:
type: string
description: Dataset example id.
required: true
description: Dataset example id.
- in: path
name: path
schema:
type: string
description: Path under the example expected folder.
required: true
description: Path under the example expected folder.
responses:
'200':
description: Expected dataset file.
content:
application/octet-stream:
schema:
type: string
description: Expected file bytes.
format: binary
'400':
description: Validation error. Request shape did not match the spec.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'403':
description: API key lacks required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'413':
description: Payload too large. Upload exceeded the per-request size cap.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'429':
description: Rate limit exceeded
headers:
Retry-After:
description: Seconds until the next request may succeed
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorEnvelope'
patch:
operationId: automations.examples.expected.file.update
summary: Rename expected file
description: Rename one expected file attached to an auto
# --- truncated at 32 KB (100 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/eigenpal/refs/heads/main/openapi/eigenpal-evaluation-api-openapi.yml