Coval Mutations API
CRUD operations for agent configuration mutations
CRUD operations for agent configuration mutations
openapi: 3.0.3
info:
title: Coval Agents Mutations 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: Mutations
description: CRUD operations for agent configuration mutations
paths:
/agents/{agent_id}/mutations:
get:
operationId: listMutations
summary: List mutations
description: Retrieve a paginated list of mutations for a specific agent.
tags:
- Mutations
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Parent agent ID (22-character ShortUUID)
example: gk3jK9mPq2xRt5vW8yZaBc
- 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
example: eyJvZmZzZXQiOjUwfQ==
responses:
'200':
description: Mutations retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ListMutationsResponse'
examples:
success:
$ref: '#/components/examples/ListMutationsSuccess'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
post:
operationId: createMutation
summary: Create mutation
description: Create a new configuration mutation for an agent.
tags:
- Mutations
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Parent agent ID (22-character ShortUUID)
example: gk3jK9mPq2xRt5vW8yZaBc
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMutationRequest'
examples:
basic:
$ref: '#/components/examples/CreateMutationBasic'
withDescription:
$ref: '#/components/examples/CreateMutationWithDescription'
nestedOverrides:
$ref: '#/components/examples/CreateMutationNestedOverrides'
responses:
'201':
description: Mutation created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreateMutationResponse'
examples:
created:
$ref: '#/components/examples/MutationCreated'
'400':
description: Invalid request body or validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
invalidOverrideKey:
$ref: '#/components/examples/InvalidOverrideKeyError'
configTooLarge:
$ref: '#/components/examples/ConfigTooLargeError'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'409':
description: Mutation name already exists for this agent
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
conflict:
$ref: '#/components/examples/MutationNameConflictError'
'500':
$ref: '#/components/responses/InternalError'
/agents/{agent_id}/mutations/{mutation_id}:
get:
operationId: getMutation
summary: Get mutation
description: Retrieve a specific mutation by its ID.
tags:
- Mutations
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Parent agent ID (22-character ShortUUID)
example: gk3jK9mPq2xRt5vW8yZaBc
- name: mutation_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{26}$
description: Mutation ID (26-character ULID)
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
responses:
'200':
description: Mutation retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetMutationResponse'
examples:
success:
$ref: '#/components/examples/GetMutationSuccess'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent or mutation not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
mutationNotFound:
$ref: '#/components/examples/MutationNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
patch:
operationId: updateMutation
summary: Update mutation
description: Update specific fields of a mutation.
tags:
- Mutations
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Parent agent ID (22-character ShortUUID)
example: gk3jK9mPq2xRt5vW8yZaBc
- name: mutation_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{26}$
description: Mutation ID (26-character ULID)
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMutationRequest'
examples:
updateName:
$ref: '#/components/examples/UpdateMutationName'
updateOverrides:
$ref: '#/components/examples/UpdateMutationOverrides'
responses:
'200':
description: Mutation updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMutationResponse'
examples:
updated:
$ref: '#/components/examples/MutationUpdated'
'400':
description: Invalid request body or validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent or mutation not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/MutationNotFoundError'
'409':
description: Mutation name conflicts with another active mutation
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
conflict:
$ref: '#/components/examples/MutationNameConflictError'
'500':
$ref: '#/components/responses/InternalError'
delete:
operationId: deleteMutation
summary: Delete mutation
description: Delete a mutation.
tags:
- Mutations
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Parent agent ID (22-character ShortUUID)
example: gk3jK9mPq2xRt5vW8yZaBc
- name: mutation_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{26}$
description: Mutation ID (26-character ULID)
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
responses:
'204':
description: Mutation deleted successfully (or already deleted)
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent or mutation not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/MutationNotFoundError'
'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
examples:
GetMutationSuccess:
summary: Successful get response
value:
mutation:
id: 01ARZ3NDEKTSV4RRFFQ69G5FAV
agent_id: gk3jK9mPq2xRt5vW8yZaBc
display_name: GPT-4 Fast VAD
description: Testing faster VAD settings with GPT-4
config_overrides:
voice: nova
vad_stop_secs: 0.3
parameter_values:
voice: nova
vad_stop_secs: '0.3'
create_time: '2025-10-14T12:00:00Z'
update_time: '2025-10-15T14:30:00Z'
CreateMutationWithDescription:
summary: Mutation with description and custom parameter_values
value:
display_name: Claude Model Test
description: Testing Claude 3 Opus model for improved reasoning
config_overrides:
model: claude-3-opus
temperature: 0.7
parameter_values:
model: claude-3-opus
temperature: 0.7 (more creative)
ConfigTooLargeError:
summary: Config overrides too large
value:
error:
code: INVALID_ARGUMENT
message: Invalid request body
details:
- field: config_overrides
description: config_overrides exceeds maximum size (12288 bytes > 10240 bytes)
UpdateMutationName:
summary: Update mutation name only
value:
display_name: GPT-4 Slower VAD
description: Updated to use slower VAD for better accuracy
InvalidOverrideKeyError:
summary: Invalid override key
value:
error:
code: INVALID_ARGUMENT
message: Invalid config_overrides
details:
- field: config_overrides
description: 'Override keys not found on parent agent: [''invalid_key'', ''another_bad_key'']'
MutationCreated:
summary: Mutation created successfully
value:
mutation:
id: 01ARZ3NDEKTSV4RRFFQ69G5FAX
agent_id: gk3jK9mPq2xRt5vW8yZaBc
display_name: GPT-4 Fast VAD
description: ''
config_overrides:
voice: nova
vad_stop_secs: 0.3
parameter_values:
voice: nova
vad_stop_secs: '0.3'
create_time: '2025-10-16T09:00:00Z'
update_time: null
CreateMutationBasic:
summary: Basic mutation with config overrides
value:
display_name: GPT-4 Fast VAD
config_overrides:
voice: nova
vad_stop_secs: 0.3
MutationNameConflictError:
summary: Mutation name already exists
value:
error:
code: ALREADY_EXISTS
message: Mutation already exists
details:
- field: display_name
description: An active mutation with name 'GPT-4 Fast VAD' already exists for this agent
CreateMutationNestedOverrides:
summary: Mutation with nested config overrides
value:
display_name: Custom Headers Test
description: Testing with modified request headers
config_overrides:
custom_headers:
X-Debug: 'true'
X-Version: v2
response_format: chat_completions
MutationUpdated:
summary: Mutation updated successfully
value:
mutation:
id: 01ARZ3NDEKTSV4RRFFQ69G5FAV
agent_id: gk3jK9mPq2xRt5vW8yZaBc
display_name: GPT-4 Slower VAD
description: Updated to use slower VAD for better accuracy
config_overrides:
voice: alloy
vad_stop_secs: 0.5
parameter_values:
voice: alloy
vad_stop_secs: '0.5'
create_time: '2025-10-14T12:00:00Z'
update_time: '2025-10-16T10:30:00Z'
ListMutationsSuccess:
summary: Successful list response
value:
mutations:
- id: 01ARZ3NDEKTSV4RRFFQ69G5FAV
agent_id: gk3jK9mPq2xRt5vW8yZaBc
display_name: GPT-4 Fast VAD
description: Testing faster VAD settings
config_overrides:
voice: nova
vad_stop_secs: 0.3
parameter_values:
voice: nova
vad_stop_secs: '0.3'
create_time: '2025-10-14T12:00:00Z'
update_time: '2025-10-15T14:30:00Z'
- id: 01ARZ3NDEKTSV4RRFFQ69G5FAW
agent_id: gk3jK9mPq2xRt5vW8yZaBc
display_name: Claude Model
description: Testing Claude integration
config_overrides:
model: claude-3-opus
parameter_values:
model: claude-3-opus
create_time: '2025-10-13T10:00:00Z'
update_time: null
next_page_token: null
total_count: 2
UpdateMutationOverrides:
summary: Update config overrides
value:
config_overrides:
vad_stop_secs: 0.5
voice: alloy
MutationNotFoundError:
summary: Mutation not found
value:
error:
code: NOT_FOUND
message: Mutation not found
details:
- field: mutation_id
description: Mutation '01ARZ3NDEKTSV4RRFFQ69G5FAV' does not exist or is not accessible
AgentNotFoundError:
summary: Agent not found
value:
error:
code: NOT_FOUND
message: Agent not found
details:
- field: agent_id
description: Agent 'gk3jK9mPq2xRt5vW8yZaBc' does not exist or is not accessible by your organization
schemas:
UpdateMutationRequest:
type: object
description: Partial update request.
properties:
display_name:
type: string
minLength: 1
maxLength: 200
description: Human-readable mutation name
example: GPT-4 Slow VAD
description:
type: string
maxLength: 2000
description: Optional description
example: Updated to use slower VAD settings
config_overrides:
type: object
additionalProperties: true
description: Configuration delta (validated against parent agent)
example:
vad_stop_secs: 0.5
parameter_values:
type: object
additionalProperties:
type: string
description: Flattened display values
example:
vad_stop_secs: '0.5'
CreateMutationResponse:
type: object
required:
- mutation
properties:
mutation:
$ref: '#/components/schemas/MutationResource'
ListMutationsResponse:
type: object
required:
- mutations
properties:
mutations:
type: array
description: List of mutation resources
items:
$ref: '#/components/schemas/MutationResource'
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 mutations matching filter
example: 3
UpdateMutationResponse:
type: object
required:
- mutation
properties:
mutation:
$ref: '#/components/schemas/MutationResource'
ErrorResponse:
type: object
description: Standard error response
required:
- error
properties:
error:
type: object
required:
- code
- message
- details
properties:
code:
type: string
description: Machine-readable error code
enum:
- INVALID_ARGUMENT
- UNAUTHENTICATED
- NOT_FOUND
- ALREADY_EXISTS
- INTERNAL
example: INVALID_ARGUMENT
message:
type: string
description: Human-readable error message
example: Invalid request parameter
details:
type: array
description: Detailed error information
items:
type: object
properties:
field:
type: string
nullable: true
description: Field name that caused the error
example: config_overrides
description:
type: string
description: Detailed error description
example: Override key 'invalid_key' does not exist on parent agent
CreateMutationRequest:
type: object
required:
- display_name
properties:
display_name:
type: string
minLength: 1
maxLength: 200
description: Human-readable mutation name (must be unique per agent among active mutations)
example: GPT-4 Fast VAD
description:
type: string
maxLength: 2000
default: ''
description: Optional description of the mutation's purpose
example: Testing faster VAD settings with GPT-4
config_overrides:
type: object
additionalProperties: true
default: {}
description: Configuration delta to merge with parent agent at runtime. Keys must exist on parent agent config. Max 10KB.
example:
voice: nova
vad_stop_secs: 0.3
parameter_values:
type: object
additionalProperties:
type: string
nullable: true
description: 'Flattened key-value pairs for display purposes.
If not provided, auto-derived from config_overrides.
'
example:
voice: nova
vad_stop_secs: '0.3'
MutationResource:
type: object
description: Agent mutation resource representing a configuration variant.
required:
- id
- agent_id
- display_name
- config_overrides
- parameter_values
- create_time
properties:
id:
type: string
pattern: ^[A-Za-z0-9]{26}$
description: Mutation ID (26-character ULID)
example: 01ARZ3NDEKTSV4RRFFQ69G5FAV
agent_id:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Parent agent ID (22-character ShortUUID)
example: gk3jK9mPq2xRt5vW8yZaBc
display_name:
type: string
minLength: 1
maxLength: 200
description: Human-readable mutation name (unique per agent among active mutations)
example: GPT-4 Fast VAD
description:
type: string
maxLength: 2000
default: ''
description: Optional description of the mutation's purpose
example: Testing faster VAD with GPT-4 model
config_overrides:
type: object
additionalProperties: true
description: 'Configuration delta to deep-merge with parent agent.
Keys must exist on the parent agent''s configuration.
'
example:
voice: nova
vad_stop_secs: 0.3
parameter_values:
type: object
additionalProperties:
type: string
description: 'Flattened key-value pairs for display purposes.
Auto-derived from config_overrides if not provided at creation.
'
example:
voice: nova
vad_stop_secs: '0.3'
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'
GetMutationResponse:
type: object
required:
- mutation
properties:
mutation:
$ref: '#/components/schemas/MutationResource'
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: API key for authentication
x-visibility: external