Coval Run Templates API
CRUD operations for reusable run configurations
CRUD operations for reusable run configurations
openapi: 3.0.3
info:
title: Coval Agents Run Templates API
version: 1.0.0
description: '
Manage configurations for simulations and evaluations.
'
contact:
name: Coval API Support
email: support@coval.dev
url: https://docs.coval.ai
license:
name: Proprietary
url: https://coval.dev/terms
servers:
- url: https://api.coval.dev/v1
description: Production API
security:
- ApiKeyAuth: []
tags:
- name: Run Templates
description: CRUD operations for reusable run configurations
paths:
/run-templates:
get:
operationId: listRunTemplates
summary: List run templates
description: Retrieve a paginated list of run templates.
tags:
- Run Templates
security:
- ApiKeyAuth: []
parameters:
- name: page_size
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 50
description: Maximum number of results per page
example: 50
- name: page_token
in: query
required: false
schema:
type: string
description: Opaque pagination token from previous response
- name: tag_filters
in: query
required: false
style: form
explode: true
schema:
type: array
items:
type: string
maxItems: 20
description: 'Filter run templates by tags. A resource matches when it has ALL the listed tags (AND-semantics).
Repeat the parameter for each tag (e.g., `?tag_filters=nightly&tag_filters=voice`).
'
example:
- nightly
responses:
'200':
description: Run templates retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ListRunTemplatesResponse'
examples:
success:
$ref: '#/components/examples/ListRunTemplatesSuccess'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalError'
post:
operationId: createRunTemplate
summary: Create run template
description: 'Create a new run template with a reusable run configuration.
Templates capture all parameters needed to launch a run: the agent to test,
persona to simulate, test set to use, and optional metrics and execution settings.
'
tags:
- Run Templates
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateRunTemplateRequest'
examples:
minimal:
$ref: '#/components/examples/CreateRunTemplateMinimal'
full:
$ref: '#/components/examples/CreateRunTemplateFull'
responses:
'201':
description: Run template created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreateRunTemplateResponse'
examples:
created:
$ref: '#/components/examples/RunTemplateCreated'
'400':
description: Invalid request body or validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
missingField:
$ref: '#/components/examples/MissingFieldError'
invalidAgent:
$ref: '#/components/examples/InvalidAgentError'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Referenced resource not found (agent, persona, or test set)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
$ref: '#/components/responses/InternalError'
/run-templates/{run_template_id}:
get:
operationId: getRunTemplate
summary: Get run template
description: Retrieve a specific run template by ID.
tags:
- Run Templates
security:
- ApiKeyAuth: []
parameters:
- name: run_template_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Run template resource ID
example: abc123def456ghi789jklm
responses:
'200':
description: Run template retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetRunTemplateResponse'
examples:
success:
$ref: '#/components/examples/GetRunTemplateSuccess'
'400':
description: Missing or invalid run_template_id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Run template not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/RunTemplateNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
patch:
operationId: updateRunTemplate
summary: Update run template
description: Update specific fields of an existing run template. Only provided fields are updated.
tags:
- Run Templates
security:
- ApiKeyAuth: []
parameters:
- name: run_template_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Run template resource ID
example: abc123def456ghi789jklm
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateRunTemplateRequest'
examples:
partial:
$ref: '#/components/examples/UpdateRunTemplatePartial'
responses:
'200':
description: Run template updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateRunTemplateResponse'
examples:
updated:
$ref: '#/components/examples/RunTemplateUpdated'
'400':
description: Invalid request body or validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Run template not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/RunTemplateNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
delete:
operationId: deleteRunTemplate
summary: Delete run template
description: 'Delete a run template.
Templates with active scheduled runs cannot be deleted.
Disable or delete associated scheduled runs first.
'
tags:
- Run Templates
security:
- ApiKeyAuth: []
parameters:
- name: run_template_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Run template resource ID
example: abc123def456ghi789jklm
responses:
'204':
description: Run template deleted successfully
'400':
description: Missing run_template_id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Run template not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/RunTemplateNotFoundError'
'409':
description: Template has active scheduled runs
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
conflict:
$ref: '#/components/examples/TemplateHasSchedulesError'
'500':
$ref: '#/components/responses/InternalError'
components:
responses:
InternalError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: INTERNAL
message: Internal server error
details:
- description: An unexpected error occurred
Unauthorized:
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: UNAUTHENTICATED
message: Authentication failed
details:
- field: X-API-Key
description: Invalid or missing API key
BadRequest:
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: INVALID_ARGUMENT
message: Invalid request body
details:
- field: display_name
description: Field required
examples:
RunTemplateNotFoundError:
summary: Run template not found
value:
error:
code: NOT_FOUND
message: Template not found
details:
- field: run_template_id
description: Run template not found or not accessible by your organization
CreateRunTemplateMinimal:
summary: Minimal request (required fields only)
value:
display_name: Voice Agent Test
agent_id: gk3jK9mPq2xRt5vW8yZaBc
persona_id: hL4kL0nQr3ySt6vX9zAcDd
test_set_id: aB1cD2eF
RunTemplateUpdated:
summary: Run template updated successfully
value:
run_template:
name: run-templates/abc123def456ghi789jklm
id: abc123def456ghi789jklm
display_name: Updated Template Name
description: ''
agent_id: gk3jK9mPq2xRt5vW8yZaBc
persona_id: hL4kL0nQr3ySt6vX9zAcDd
test_set_id: aB1cD2eF
metric_ids: []
mutation_ids: []
iteration_count: 5
concurrency: 1
sub_sample_size: 0
sub_sample_seed: null
metadata:
updated: true
create_time: '2025-10-14T12:00:00Z'
update_time: '2025-10-15T14:30:00Z'
TemplateHasSchedulesError:
summary: Cannot delete - template has active schedules
value:
error:
code: CONFLICT
message: Cannot delete template
details:
- description: Template has 2 active scheduled runs. Disable or delete them first.
GetRunTemplateSuccess:
summary: Successful get response
value:
run_template:
name: run-templates/abc123def456ghi789jklm
id: abc123def456ghi789jklm
display_name: Voice Agent Daily Test
description: Daily regression test for voice agent
agent_id: gk3jK9mPq2xRt5vW8yZaBc
persona_id: hL4kL0nQr3ySt6vX9zAcDd
test_set_id: aB1cD2eF
metric_ids:
- iM5lM1oRs4zTu7wY0aBdEe
mutation_ids: []
iteration_count: 3
concurrency: 5
sub_sample_size: 0
sub_sample_seed: null
metadata: {}
create_time: '2025-10-14T12:00:00Z'
update_time: null
RunTemplateCreated:
summary: Run template created successfully
value:
run_template:
name: run-templates/abc123def456ghi789jklm
id: abc123def456ghi789jklm
display_name: Voice Agent Test
description: ''
agent_id: gk3jK9mPq2xRt5vW8yZaBc
persona_id: hL4kL0nQr3ySt6vX9zAcDd
test_set_id: aB1cD2eF
metric_ids: []
mutation_ids: []
iteration_count: 1
concurrency: 1
sub_sample_size: 0
sub_sample_seed: null
metadata: {}
create_time: '2025-10-14T12:00:00Z'
update_time: null
UpdateRunTemplatePartial:
summary: Partial update (only some fields)
value:
display_name: Updated Template Name
iteration_count: 5
metadata:
updated: true
ListRunTemplatesSuccess:
summary: Successful list response
value:
run_templates:
- name: run-templates/abc123def456ghi789jklm
id: abc123def456ghi789jklm
display_name: Voice Agent Daily Test
description: Daily regression test for voice agent
agent_id: gk3jK9mPq2xRt5vW8yZaBc
persona_id: hL4kL0nQr3ySt6vX9zAcDd
test_set_id: aB1cD2eF
metric_ids:
- iM5lM1oRs4zTu7wY0aBdEe
mutation_ids: []
iteration_count: 3
concurrency: 5
sub_sample_size: 0
sub_sample_seed: null
metadata:
customer:
campaign_id: q4_2025
create_time: '2025-10-14T12:00:00Z'
update_time: '2025-10-15T14:30:00Z'
next_page_token: null
total_count: 1
InvalidAgentError:
summary: Agent not found
value:
error:
code: INVALID_ARGUMENT
message: Validation failed
details:
- field: agent_id
description: Agent not found or not accessible by your organization
CreateRunTemplateFull:
summary: Full request with all options
value:
display_name: Voice Agent Nightly Regression
description: Comprehensive nightly test with sampling
agent_id: gk3jK9mPq2xRt5vW8yZaBc
persona_id: hL4kL0nQr3ySt6vX9zAcDd
test_set_id: aB1cD2eF
metric_ids:
- iM5lM1oRs4zTu7wY0aBdEe
- jN6mN2pSt5aUv8xZ1bCeFf
mutation_ids: []
iteration_count: 3
concurrency: 5
sub_sample_size: 10
sub_sample_seed: 847293
metadata:
customer:
campaign_id: q4_2025
environment: production
MissingFieldError:
summary: Missing required field
value:
error:
code: INVALID_ARGUMENT
message: Invalid request body
details:
- field: display_name
description: Field required
schemas:
CreateRunTemplateRequest:
type: object
required:
- display_name
- agent_id
- persona_id
- test_set_id
properties:
display_name:
type: string
minLength: 1
maxLength: 200
description: Human-readable template name
example: Voice Agent Daily Test
description:
type: string
default: ''
description: Optional description
example: Daily regression test for voice agent
agent_id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent to test (must exist and be accessible)
example: gk3jK9mPq2xRt5vW8yZaBc
persona_id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Simulated persona to use (must exist)
example: hL4kL0nQr3ySt6vX9zAcDd
test_set_id:
type: string
pattern: ^[A-Za-z0-9]{8}$
description: Test set containing test cases (must exist)
example: aB1cD2eF
metric_ids:
type: array
items:
type: string
pattern: ^[A-Za-z0-9]{22}$
default: []
description: Metrics to evaluate (uses agent defaults if empty)
example:
- iM5lM1oRs4zTu7wY0aBdEe
mutation_ids:
type: array
items:
type: string
pattern: ^[A-Za-z0-9]{26}$
default: []
description: Mutations for A/B testing
example: []
iteration_count:
type: integer
minimum: 1
maximum: 100
default: 1
description: Number of times to run each test case
example: 3
concurrency:
type: integer
minimum: 1
maximum: 50
default: 1
description: Number of simulations to run concurrently
example: 5
sub_sample_size:
type: integer
minimum: 0
default: 0
description: Number of test cases to randomly sample (0 = use all)
example: 0
sub_sample_seed:
type: integer
nullable: true
description: Random seed for reproducible sub-sampling
example: null
metadata:
type: object
additionalProperties: true
default: {}
description: Custom metadata for tracking
example:
customer:
campaign_id: q4_2025
tags:
type: array
nullable: true
description: Tags to associate with this run template. Null or omitted creates the run template with no tags. Pass [] for an empty tag list.
items:
type: string
example:
- nightly
UpdateRunTemplateRequest:
type: object
description: Partial update request (PATCH semantics - only provided fields are updated)
properties:
display_name:
type: string
minLength: 1
maxLength: 200
description: Human-readable template name
example: Updated Template Name
description:
type: string
description: Optional description
example: Updated description
agent_id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent to test
example: gk3jK9mPq2xRt5vW8yZaBc
persona_id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Simulated persona to use
example: hL4kL0nQr3ySt6vX9zAcDd
test_set_id:
type: string
pattern: ^[A-Za-z0-9]{8}$
description: Test set containing test cases
example: aB1cD2eF
metric_ids:
type: array
items:
type: string
description: Metrics to evaluate (null = no change, [] = use agent defaults)
example:
- iM5lM1oRs4zTu7wY0aBdEe
mutation_ids:
type: array
items:
type: string
description: Mutations for A/B testing (null = no change, [] = clear)
example: []
iteration_count:
type: integer
minimum: 1
maximum: 100
description: Number of times to run each test case
example: 5
concurrency:
type: integer
minimum: 1
maximum: 50
description: Number of simulations to run concurrently
example: 10
sub_sample_size:
type: integer
minimum: 0
description: Number of test cases to randomly sample
example: 20
sub_sample_seed:
type: integer
nullable: true
description: Random seed for reproducible sub-sampling
example: 123456
metadata:
type: object
additionalProperties: true
description: Custom metadata (null = no change, {} = clear)
example:
updated: true
tags:
type: array
nullable: true
description: Tags to associate with this run template. Null or omitted leaves tags unchanged. Pass [] to clear all tags.
items:
type: string
example:
- nightly
ErrorResponse:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
- details
properties:
code:
type: string
enum:
- INVALID_ARGUMENT
- UNAUTHENTICATED
- NOT_FOUND
- CONFLICT
- INTERNAL
example: INVALID_ARGUMENT
message:
type: string
description: Human-readable error message
example: Invalid request parameter
details:
type: array
items:
type: object
properties:
field:
type: string
nullable: true
description: Field that caused the error
example: agent_id
description:
type: string
description: Detailed error description
example: Agent not found or not accessible
RunTemplateResource:
type: object
description: Run template configuration resource.
required:
- name
- id
- display_name
- agent_id
- persona_id
- test_set_id
- create_time
properties:
name:
type: string
description: 'Resource name: "run-templates/{id}"'
example: run-templates/abc123def456ghi789jklm
id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Run template resource ID
example: abc123def456ghi789jklm
display_name:
type: string
maxLength: 200
description: Human-readable template name
example: Voice Agent Daily Test
description:
type: string
description: Optional description of the template
example: Daily regression test for voice agent
agent_id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent to test
example: gk3jK9mPq2xRt5vW8yZaBc
persona_id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Simulated persona to use
example: hL4kL0nQr3ySt6vX9zAcDd
test_set_id:
type: string
pattern: ^[A-Za-z0-9]{8}$
description: Test set containing test cases
example: aB1cD2eF
metric_ids:
type: array
items:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Metrics to evaluate (uses agent defaults if empty)
example:
- iM5lM1oRs4zTu7wY0aBdEe
mutation_ids:
type: array
items:
type: string
pattern: ^[A-Za-z0-9]{26}$
description: Mutations for A/B testing (optional)
example: []
iteration_count:
type: integer
minimum: 1
maximum: 100
default: 1
description: Number of times to run each test case
example: 3
concurrency:
type: integer
minimum: 1
maximum: 50
default: 1
description: Number of simulations to run concurrently
example: 5
sub_sample_size:
type: integer
minimum: 0
default: 0
description: Number of test cases to randomly sample (0 = use all)
example: 10
sub_sample_seed:
type: integer
nullable: true
description: Random seed for reproducible sub-sampling
example: 847293
metadata:
type: object
additionalProperties: true
description: Custom metadata for tracking
example:
customer:
campaign_id: q4_2025
tags:
type: array
description: Tags associated with this run template
items:
type: string
default: []
example:
- nightly
- voice
create_time:
type: string
format: date-time
description: Creation timestamp (ISO 8601)
example: '2025-10-14T12:00:00Z'
update_time:
type: string
format: date-time
nullable: true
description: Last update timestamp (ISO 8601)
example: '2025-10-15T14:30:00Z'
ListRunTemplatesResponse:
type: object
required:
- run_templates
properties:
run_templates:
type: array
items:
$ref: '#/components/schemas/RunTemplateResource'
next_page_token:
type: string
nullable: true
description: Token for fetching next page (null if no more results)
example: eyJvZmZzZXQiOjUwfQ==
total_count:
type: integer
description: Total count of templates matching filter
example: 25
UpdateRunTemplateResponse:
type: object
required:
- run_template
properties:
run_template:
$ref: '#/components/schemas/RunTemplateResource'
CreateRunTemplateResponse:
type: object
required:
- run_template
properties:
run_template:
$ref: '#/components/schemas/RunTemplateResource'
GetRunTemplateResponse:
type: object
required:
- run_template
properties:
run_template:
$ref: '#/components/schemas/RunTemplateResource'
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: API key for authentication
x-visibility: external