openapi: 3.0.3
info:
title: Coval Agents 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: Agents
description: CRUD operations for AI agent configurations
paths:
/agents:
get:
operationId: listAgents
summary: List agents
description: Retrieve a paginated list of agent configurations with optional filtering and sorting.
tags:
- Agents
security:
- ApiKeyAuth: []
parameters:
- name: filter
in: query
required: false
schema:
type: string
description: 'Filter expression syntax.
**Supported fields:** `model_type`, `display_name`, `create_time`, `update_time`
**Operators:** `=`, `!=`, `>`, `<`, `>=`, `<=`, `AND`, `OR`
Values may be unquoted or double-quoted. Values containing spaces must be quoted (e.g., `display_name="Support Agent"`).
**Date format:** ISO 8601 (e.g., `2025-10-01T00:00:00Z`)
'
examples:
byModelType:
value: model_type=MODEL_TYPE_VOICE
summary: Filter by model type
byDisplayName:
value: display_name="Support Agent"
summary: Filter by display name (quoted - contains space)
combined:
value: model_type=MODEL_TYPE_VOICE AND display_name="Support Agent"
summary: Combined filters
dateRange:
value: create_time>="2025-10-01T00:00:00Z" AND create_time<="2025-10-31T23:59:59Z"
summary: Date range filter
- 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.
Do not decode or modify this token.
'
example: eyJvZmZzZXQiOjUwfQ==
- name: order_by
in: query
required: false
schema:
type: string
default: -create_time
description: 'Sort order specification.
**Formats:**
1. Dash-prefix: `-create_time` (descending), `display_name` (ascending)
2. Space-separated: `create_time desc`, `display_name asc`
**Sortable fields:** `create_time`, `update_time`, `display_name`, `model_type`
'
examples:
descending:
value: -create_time
summary: Newest first (default)
ascending:
value: display_name
summary: Alphabetical by name
spaceSeparated:
value: create_time desc
summary: Space-separated format
- name: tag_filters
in: query
required: false
style: form
explode: true
schema:
type: array
items:
type: string
maxItems: 20
description: 'Filter agents by tags. A resource matches when it has ALL the listed tags (AND-semantics).
Repeat the parameter for each tag (e.g., `?tag_filters=production&tag_filters=voice`).
'
example:
- production
responses:
'200':
description: Agents retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ListAgentsResponse'
examples:
success:
$ref: '#/components/examples/ListAgentsSuccess'
'400':
description: Invalid request parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
invalidFilter:
$ref: '#/components/examples/InvalidFilterError'
invalidPageSize:
$ref: '#/components/examples/InvalidPageSizeError'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalError'
post:
operationId: createAgent
summary: Connect an agent
description: Connect an agent to coval by providing the agent's configuration.
tags:
- Agents
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAgentRequest'
examples:
voiceAgent:
$ref: '#/components/examples/CreateVoiceAgent'
voiceAgentSip:
$ref: '#/components/examples/CreateVoiceAgentSip'
outboundVoiceAgent:
$ref: '#/components/examples/CreateOutboundVoiceAgent'
textAgentBasic:
$ref: '#/components/examples/CreateTextAgentBasic'
smsAgent:
$ref: '#/components/examples/CreateSmsAgent'
websocketAgent:
$ref: '#/components/examples/CreateWebsocketAgent'
websocketJsonAudioAgent:
$ref: '#/components/examples/CreateWebsocketJsonAudioAgent'
websocketAgentWithAuth:
$ref: '#/components/examples/CreateWebsocketAgentWithAuth'
minimalVoiceAgent:
$ref: '#/components/examples/CreateMinimalVoiceAgent'
minimalTextAgent:
$ref: '#/components/examples/CreateMinimalTextAgent'
textAgentWithInit:
$ref: '#/components/examples/CreateTextAgentWithInit'
textAgentAdvanced:
$ref: '#/components/examples/CreateTextAgentAdvanced'
textAgentCustomAPI:
$ref: '#/components/examples/CreateTextAgentCustomAPI'
textAgentComplete:
$ref: '#/components/examples/CreateTextAgentComplete'
responses:
'201':
description: Agent created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAgentResponse'
examples:
created:
$ref: '#/components/examples/AgentCreated'
'400':
description: Invalid request body or validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
missingField:
$ref: '#/components/examples/MissingFieldError'
invalidModelType:
$ref: '#/components/examples/InvalidModelTypeError'
missingChatEndpoint:
$ref: '#/components/examples/MissingChatEndpointError'
missingWebsocketEndpoint:
$ref: '#/components/examples/MissingWebsocketEndpointError'
invalidWebsocketUrl:
$ref: '#/components/examples/InvalidWebsocketUrlError'
invalidUrl:
$ref: '#/components/examples/InvalidUrlError'
payloadTooLarge:
$ref: '#/components/examples/PayloadTooLargeError'
invalidJson:
$ref: '#/components/examples/InvalidJsonError'
'401':
$ref: '#/components/responses/Unauthorized'
'500':
$ref: '#/components/responses/InternalError'
/agents/{agent_id}:
get:
operationId: getAgent
summary: Get agent
description: Retrieve a specific agent configuration by its unique identifier.
tags:
- Agents
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent resource ID
example: abc123def456ghi789jklm
responses:
'200':
description: Agent retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetAgentResponse'
examples:
success:
$ref: '#/components/examples/GetAgentSuccess'
'400':
description: Missing or invalid agent_id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent not found, inactive, or belongs to different organization
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
patch:
operationId: updateAgent
summary: Update agent
description: Update specific fields of an existing agent configuration.
tags:
- Agents
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent resource ID
example: abc123def456ghi789jklm
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAgentRequest'
examples:
partialUpdate:
$ref: '#/components/examples/UpdateAgentPartial'
clearFields:
$ref: '#/components/examples/UpdateAgentClearFields'
responses:
'200':
description: Agent updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAgentResponse'
examples:
updated:
$ref: '#/components/examples/AgentUpdated'
'400':
description: Invalid request body or validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent not found, inactive, or belongs to different organization
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
delete:
operationId: deleteAgent
summary: Delete agent
description: Soft-delete an agent configuration, marking it as inactive while preserving the record.
tags:
- Agents
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent resource ID
example: abc123def456ghi789jklm
responses:
'200':
description: Agent deleted successfully (or already deleted)
content:
application/json:
schema:
type: object
properties: {}
example: {}
'400':
description: Missing agent_id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent not found or belongs to different organization
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
/agents/{agent_id}/duplicate:
post:
operationId: duplicateAgent
summary: Duplicate an agent
description: 'Clone an existing agent into a new agent owned by your organization.
By default only the agent config is copied; set `include_associations`
to also copy its metric and test-set associations. Returns the new
agent in the same shape as create.
'
tags:
- Agents
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: ID of the agent to duplicate
example: abc123def456ghi789jklm
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
include_associations:
type: boolean
default: false
description: Also copy the source agent's metric and test-set associations.
example:
include_associations: true
responses:
'201':
description: Agent duplicated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAgentResponse'
'400':
description: Missing agent_id or invalid body
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Source agent not found or belongs to different organization
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
/agents/{agent_id}/versions:
get:
operationId: listAgentVersions
summary: List agent versions
description: List the version history for an agent, newest first. The newest entry is the agent's current live config; earlier entries are prior states displaced by later saves. Only behavioral config is versioned; identity and cosmetic fields are not.
tags:
- Agents
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent resource ID
example: abc123def456ghi789jklm
responses:
'200':
description: Agent version history retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ListAgentVersionsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent not found, inactive, or belongs to different organization
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
/agents/{agent_id}/versions/{version_id}/revert:
post:
operationId: revertAgentVersion
summary: Revert agent version
description: 'Re-apply a prior version''s configuration to the live agent. A revert is forward-only: it mints a new version (change_type=revert) and advances the agent, so the response reflects the agent''s new live config. Reverting to the version the agent already points at is rejected with 400.'
tags:
- Agents
security:
- ApiKeyAuth: []
parameters:
- name: agent_id
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z0-9]{22}$
description: Agent resource ID
example: abc123def456ghi789jklm
- name: version_id
in: path
required: true
schema:
type: string
minLength: 26
maxLength: 26
pattern: ^[0-9A-HJKMNP-TV-Z]{26}$
description: ULID of the target version to re-apply
example: 01KKWQYSF737ZN6X1Q1RYX8M22
responses:
'200':
description: Agent reverted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GetAgentResponse'
'400':
description: Invalid request (e.g. the target version is already the current version)
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Agent or version not found, inactive, or belongs to different organization
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
$ref: '#/components/examples/AgentNotFoundError'
'500':
$ref: '#/components/responses/InternalError'
components:
examples:
PayloadTooLargeError:
summary: CHAT agent metadata field exceeds size limit
value:
error:
code: INVALID_ARGUMENT
message: Invalid request body
details:
- field: metadata.custom_data
description: 'custom_data must be less than 32KB. Received: 35840 bytes'
InvalidWebsocketUrlError:
summary: WEBSOCKET agent with invalid endpoint URL
value:
error:
code: INVALID_ARGUMENT
message: Invalid request body
details:
- field: metadata.endpoint
description: metadata.endpoint must use wss:// protocol for secure WebSocket connections
CreateWebsocketAgentWithAuth:
summary: Create WebSocket agent with authentication
description: 'WebSocket agent with authorization headers for secured endpoints.
Headers are sent during the WebSocket handshake (HTTP upgrade request).
The `authorization_header` field supports these common formats:
- `"Bearer <token>"` - Sent as `Authorization: Bearer <token>`
- `"Basic <base64-credentials>"` - Sent as `Authorization: Basic <base64-credentials>`
- `"X-API-Key <key>"` - Sent as `X-API-Key: <key>`
'
value:
display_name: Secured WebSocket Voice Agent
model_type: MODEL_TYPE_WEBSOCKET
metadata:
endpoint: wss://secured.example.com/voice/connect
initialization_json: '{"type": "session_init", "config": {"voice": "cedar", "language": "en", "client_source": "coval_evaluation"}}'
authorization_header: Bearer sk-secret-api-token
custom_headers: '{"X-Session-ID": "{{sessionId}}", "X-Request-Source": "coval"}'
workflows: {}
metric_ids:
- abc123def456ghi789jklm
test_set_ids: []
ListAgentsSuccess:
summary: Successful list response
value:
agents:
- id: abc123def456ghi789jklm
customer_agent_id: abc123def456ghi789jklm
display_name: Customer Support Agent
model_type: MODEL_TYPE_VOICE
phone_number: '+1234567890'
endpoint: https://api.example.com/agent
prompt: You are a helpful customer support agent...
metadata:
voice: alloy
model: gpt-realtime-2
workflows: {}
metric_ids:
- abc123def456ghi789jklm
test_set_ids:
- gT5wq2Hn
knowledge_base_ids: []
create_time: '2025-10-14T12:00:00Z'
update_time: '2025-10-15T14:30:00Z'
next_page_token: eyJvZmZzZXQiOjUwfQ==
MissingWebsocketEndpointError:
summary: WEBSOCKET agent missing required metadata.endpoint
value:
error:
code: INVALID_ARGUMENT
message: Invalid request body
details:
- field: metadata.endpoint
description: metadata.endpoint is required for MODEL_TYPE_WEBSOCKET agents. Must be a valid wss:// WebSocket URL
CreateTextAgentAdvanced:
summary: Create CHAT agent with advanced template configuration
description: 'CHAT agent with custom input template, payload wrapper, and persona-specific data.
**Advanced features:**
- `input_template`: Custom JSON template for API requests with variable substitution
- `payload_wrapper`: Wraps entire payload in specified field (e.g., "data", "request", "body")
- `custom_data`: Organization/agent-level data included in all requests (max 32KB)
- `custom_persona_data`: Persona-specific data for dynamic configuration (max 16KB)
- `response_message_path`: Dot notation path to extract message from response
**Template variables in input_template:**
- `{{messages}}` - Full conversation history
- `{{latest_message}}` - Most recent user message
- `{{sessionId}}` - Session ID from initialization
- `{{custom_data.field}}` - Access custom_data fields
- `{{init_response.path}}` - Any field from init response
'
value:
display_name: Enterprise Chat Agent
model_type: MODEL_TYPE_CHAT
prompt: You are an enterprise support agent...
metadata:
chat_endpoint: https://api.enterprise.com/chat
authorization_header: Bearer enterprise_key_xxx
input_template: '{"sessionId": "{{sessionId}}", "customData": {"agentId": "agent-123", "environment": "prod"}, "messages": {{messages}}}'
response_message_path: data.message.content
payload_wrapper: data
custom_data: '{"org_id": "org-123", "app_version": "v2.0", "region": "us-east-1"}'
custom_persona_data: '{"persona_type": "professional", "tone": "formal", "expertise_level": "expert"}'
response_format: chat_completions
workflows: {}
metric_ids:
- abc123def456ghi789jklm
- def456ghi789jklmabc123
test_set_ids: []
CreateOutboundVoiceAgent:
summary: Create outbound voice agent
description: OUTBOUND_VOICE agents require endpoint webhook URL
value:
display_name: Sales Outbound Agent
model_type: MODEL_TYPE_OUTBOUND_VOICE
endpoint: https://api.yourcompany.com/triggers/voice-simulation
prompt: You are a sales agent calling to schedule appointments...
metadata:
trigger_call_headers: '{"Authorization": "Bearer sk-xxx", "Content-Type": "application/json"}'
trigger_call_payload: '{"campaign_id": "summer-2025", "priority": "high"}'
phone_number_key: to_number
workflows: {}
test_set_ids:
- gT5wq2Hn
metric_ids:
- abc123def456ghi789jklm
UpdateAgentPartial:
summary: Partial update (only some fields)
value:
display_name: Updated Agent Name
prompt: Updated instructions...
metadata:
updated: true
AgentCreated:
summary: Agent created successfully
value:
agent:
id: abc123def456ghi789jklm
customer_agent_id: abc123def456ghi789jklm
display_name: Customer Support Agent
model_type: MODEL_TYPE_VOICE
phone_number: '+1234567890'
endpoint: null
prompt: You are a helpful customer support agent...
metadata:
voice: alloy
model: gpt-realtime-2
workflows: {}
metric_ids:
- abc123def456ghi789jklm
test_set_ids: []
knowledge_base_ids: []
create_time: '2025-10-14T12:00:00Z'
update_time: null
CreateVoiceAgentSip:
summary: Create inbound voice agent with SIP address
description: VOICE agents can use a SIP address instead of an E.164 phone number for providers that support SIP connectivity (e.g., Telnyx).
value:
display_name: SIP Voice Agent
model_type: MODEL_TYPE_VOICE
phone_number: sip:agent@assistant-example.sip.telnyx.com
prompt: You are a helpful customer support agent...
metadata:
voice: alloy
model: gpt-realtime-2
workflows: {}
metric_ids: []
test_set_ids: []
InvalidPageSizeError:
summary: Invalid page size
value:
error:
code: INVALID_ARGUMENT
message: Invalid page_size
details:
- field: page_size
description: page_size must be between 1 and 100
CreateTextAgentCustomAPI:
summary: Create CHAT agent for custom API format
description: CHAT agent with tool call extraction and custom response parsing
value:
display_name: Custom API Agent
model_type: MODEL_TYPE_CHAT
prompt: You are a specialized agent for custom API...
metadata:
chat_endpoint: https://custom-api.example.com/message
authorization_header: ''
custom_headers: '{"x-api-version": "v1", "x-session-id": "{{sessionId}}"}'
input_template: '{"text": "{{latest_message}}", "conversation": {{messages}}, "user_id": "{{custom_data.user_id}}"}'
response_message_path: reply.text
payload_wrapper: request
tool_call_extraction: '{"enabled": true, "tool_calls_path": "steps[].toolCalls[]", "tool_call_filter_field": "type", "tool_call_filter_value": "tool-call", "tool_call_mappings": {"id": "payload.toolCallId", "name": "payload.toolName", "arguments": "payload.args"}}'
custom_data: '{"user_id": "user-123", "source": "evaluation"}'
workflows: {}
metric_ids:
- abc123def456ghi789jklm
test_set_ids: []
InvalidFilterError:
summary: Invalid filter expression
value:
error:
code: INVALID_ARGUMENT
message: Invalid filter expression
details:
- field: filter
description: 'Unknown field ''invalid_field''. Valid fields: model_type, display_name, create_time, update_time'
GetAgentSuccess:
summary: Successful get response
value:
agent:
id: abc123def456ghi789jklm
customer_agent_id: abc123def456ghi789jklm
display_name: Customer Support Agent
model_type: MODEL_TYPE_VOICE
phone_number: '+1234567890'
endpoint: https://api.example.com/agent
prompt: You are a helpful customer support agent...
metadata:
voice: alloy
model: gpt-realtime-2
workflows: {}
metric_ids:
- abc123def456ghi789jklm
test_set_ids:
- gT5wq2Hn
knowledge_base_ids: []
create_time: '2025-10-14T12:00:00Z'
update_time: '2025-10-15T14:30:00Z'
CreateMinimalVoiceAgent:
summary: Create minimal VOICE agent (required fields only)
value:
display_name: Basic Support Agent
model_type: MODEL_TYPE_VOICE
phone_number: '+15551234567'
CreateTextAgentBasic:
summary: Create basic CHAT agent with auth
description: 'Simple CHAT agent with chat endpoint and authorization.
**Required fields:**
- `chat_endpoint`: URL endpoint for chat messages
- `authorization_header`: Auth header (Bearer, X-API-Key, etc.)
**Optional fields:**
- `response_format`: Expected response format (default: chat_completions)
'
value:
display_name: Customer Support Chatbot
model_type: MODEL_TYPE_CHAT
prompt: You are a helpful customer support chatbot...
metadata:
chat_endpoint: https://api.example.com/v1/chat
authorization_header: Bearer sk-xxx
response_format: chat_completions
workflows: {}
metric_ids:
- abc123def456ghi789jklm
test_set_ids: []
CreateWebsocketJsonAudioAgent:
summary: Create JSON audio WebSocket voice agent
description: 'WebSocket voice agent using the JSON audio preset shape exposed in the Coval UI.
This configuration uses direct WebSocket mode, no initialization payload,
no ready-message wait, JSON `audio_message` frames keyed by `action`,
base64 PCM in `audio_bytes`, mono 16 kHz inbound audio, and
`system_notify` non-audio event capture.
'
value:
display_name: JSON Audio WebSocket Voice Agent
model_type: MODEL_TYPE_WEBSOCKET
metadata:
endpoint: wss://api.example.com/ws
connection_mode: direct
websocket_compat_profile: json_audio
initialization_json: ''
handshake_ready_message_type: ''
handshake_requires_session_id: false
send_sample_rate_hertz: 16000
receive_sample_rate_hertz: 16000
send_audio_template: '{"action":"audio_message","payload":{},"audio_bytes":"{{audio_data}}","sender":"USER"}'
message_type_path: action
audio_message_type_value: audio_message
audio_data_path: audio_bytes
audio_encoding: pcm
receive_audio_channels: 1
non_audio_event_message_types:
- system_notify
authorization_header: Bearer sk-secret-api-token
workflows: {}
metric_ids: []
test_set_ids: []
InvalidUrlError:
summary: Invalid URL in CHAT agent metadata
value:
error:
code: INVALID_ARGUMENT
message: Invalid request body
details:
- field: metadata.chat_endpoint
description: Invalid URL format or private IP address. URLs must be valid HTTP/HTTPS and cannot use private IPs, localhost, or link-local addresses
CreateTextAgentComplete:
summary: Complete CHAT agent configuration reference
description: '
This example demonstrates every configuration option available for MODEL_TYPE_CHAT agents.
Use this as a reference to understand all possibilities - most agents only need a subset of these fields.
## Field Categories
### Required
- `chat_endpoint` - URL endpoint for chat messages (validated, no private IPs)
### Authentication
- `authorization_header` - Auth header (Bearer, X-API-Key, custom format)
### Initialization
- `initialization_endpoint` - Optional init endpoint called before chat (validated, no private IPs)
- `initialization_payload` - JSON payload for init request (max 16KB)
### Custom Data
- `custom_data` - Organization/agent-level data in all requests (max 32KB JSON string)
- `custom_persona_data` - Persona-specific configuration data (max 16KB JSON string)
### Headers & Format
- `custom_headers` - Additional headers with template variables, as a JSON object or JSON-encoded object string (max 16KB when encoded)
- `response_format` - Response format: "chat_completions" (default) or "responses"
### Request/Response Processing
- `input_template` - Custom JSON template for request payloads (validated JSON structure)
- `payload_wrapper` - Wrapper field name for entire payload (e.g., "data", "request")
- `response_message_path` - Dot notation path to extract message (e.g., "data.message.content")
- `strip_message_timestamps` - Remove timestamp fields before sending (boolean, default: false)
### Tool Calls
- `tool_call_extraction_config` - Configuration for extracting tool/function calls from custom responses
### Dynamic Configuration
- `persona_id` - Reference persona for dynamic parameter substitution
## Tem
# --- truncated at 32 KB (64 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/coval/refs/heads/main/openapi/coval-agents-api-openapi.yml