Download OpenAPI specification:
Voice agent test harness API
Import an agent from config.
required | object (Config) |
Source (string) or Source (null) (Source) |
{- "config": { },
- "source": "string"
}{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}Import an agent from an uploaded file (XLSForm, JSON, etc.).
Source (string) or Source (null) (Source) |
| file required | string <binary> (File) |
{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}Export an agent graph to a format.
required | object (AgentGraph-Input) Complete agent workflow graph. This is the unified internal representation (IR) that all importers convert to. It captures the full structure of an agent's conversation flow including nodes, transitions, and metadata. |
| format required | string (Format) |
{- "graph": {
- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}, - "format": "string"
}{- "property1": "string",
- "property2": "string"
}Run a single test case.
required | object (AgentGraph-Input) Complete agent workflow graph. This is the unified internal representation (IR) that all importers convert to. It captures the full structure of an agent's conversation flow including nodes, transitions, and metadata. |
required | object (TestCase) Single test case definition. Two test types are supported:
Legacy type values "simulation" and "unit" are mapped to "llm" and "rule". |
RunOptions (object) or null |
{- "graph": {
- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}, - "test_case": {
- "name": "string",
- "user_prompt": "string",
- "dynamic_variables": { },
- "tool_mocks": [
- null
], - "type": "llm",
- "llm_model": "string",
- "creation_timestamp": 0,
- "user_modified_timestamp": 0,
- "metrics": [
- "string"
], - "includes": [
- "string"
], - "excludes": [
- "string"
], - "patterns": [
- "string"
]
}, - "options": {
- "max_turns": 20,
- "timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "cot_transitions": false,
- "agent_model": "string",
- "simulator_model": "string",
- "judge_model": "string"
}
}{- "test_id": "string",
- "test_name": "string",
- "status": "pass",
- "transcript": [
- {
- "role": "user",
- "content": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "metadata": { }
}
], - "metric_results": [
- {
- "metric": "string",
- "passed": true,
- "reasoning": "string",
- "score": 0,
- "threshold": 0,
- "confidence": 0
}
], - "nodes_visited": [
- "string"
], - "tools_called": [
- {
- "name": "string",
- "arguments": { },
- "result": "string"
}
], - "constraint_violations": [
- "string"
], - "turn_count": 0,
- "duration_ms": 0,
- "end_reason": "",
- "error_message": "string",
- "models_used": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "model_overrides": [
- {
- "role": "string",
- "requested": "string",
- "actual": "string",
- "reason": "string"
}
]
}Run multiple test cases.
required | object (AgentGraph-Input) Complete agent workflow graph. This is the unified internal representation (IR) that all importers convert to. It captures the full structure of an agent's conversation flow including nodes, transitions, and metadata. |
required | Array of objects (Test Cases) |
RunOptions (object) or null |
{- "graph": {
- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}, - "test_cases": [
- {
- "name": "string",
- "user_prompt": "string",
- "dynamic_variables": { },
- "tool_mocks": [
- null
], - "type": "llm",
- "llm_model": "string",
- "creation_timestamp": 0,
- "user_modified_timestamp": 0,
- "metrics": [
- "string"
], - "includes": [
- "string"
], - "excludes": [
- "string"
], - "patterns": [
- "string"
]
}
], - "options": {
- "max_turns": 20,
- "timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "cot_transitions": false,
- "agent_model": "string",
- "simulator_model": "string",
- "judge_model": "string"
}
}{- "run_id": "string",
- "started_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z",
- "results": [
- {
- "test_id": "string",
- "test_name": "string",
- "status": "pass",
- "transcript": [
- {
- "role": "user",
- "content": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "metadata": { }
}
], - "metric_results": [
- {
- "metric": "string",
- "passed": true,
- "reasoning": "string",
- "score": 0,
- "threshold": 0,
- "confidence": 0
}
], - "nodes_visited": [
- "string"
], - "tools_called": [
- {
- "name": "string",
- "arguments": { },
- "result": "string"
}
], - "constraint_violations": [
- "string"
], - "turn_count": 0,
- "duration_ms": 0,
- "end_reason": "",
- "error_message": "string",
- "models_used": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "model_overrides": [
- {
- "role": "string",
- "requested": "string",
- "actual": "string",
- "reason": "string"
}
]
}
]
}Evaluate a transcript against metrics.
required | Array of objects (Transcript) |
| metrics required | Array of strings (Metrics) |
{- "transcript": [
- {
- "role": "user",
- "content": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "metadata": { }
}
], - "metrics": [
- "string"
]
}[- {
- "metric": "string",
- "passed": true,
- "reasoning": "string",
- "score": 0,
- "threshold": 0,
- "confidence": 0
}
]{- "models": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "run": {
- "max_turns": 20,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "cot_transitions": false
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}Update settings in .voicetest.toml.
object (ModelSettings) LLM model configuration. None means not configured (use defaults or test overrides). | |
object (RunSettings) Test run configuration. | |
object (Env) Environment variables to set (e.g., API keys for LLM providers) |
{- "models": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "run": {
- "max_turns": 20,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "cot_transitions": false
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}{- "models": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "run": {
- "max_turns": 20,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "cot_transitions": false
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}{- "models": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "run": {
- "max_turns": 20,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "cot_transitions": false
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}Create an agent from config dict or file path.
| name required | string (Name) |
Config (object) or Config (null) (Config) | |
Path (string) or Path (null) (Path) | |
Source (string) or Source (null) (Source) |
{- "name": "string",
- "config": { },
- "path": "string",
- "source": "string"
}{ }Update an agent.
| agent_id required | string (Agent Id) |
Name (string) or Name (null) (Name) | |
Default Model (string) or Default Model (null) (Default Model) | |
Graph Json (string) or Graph Json (null) (Graph Json) |
{- "name": "string",
- "default_model": "string",
- "graph_json": "string"
}{ }Get the AgentGraph for an agent.
| agent_id required | string (Agent Id) |
{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}Create an agent from an uploaded file (XLSForm, JSON, etc.).
Name (string) or Name (null) (Name) | |
Source (string) or Source (null) (Source) |
| file required | string <binary> (File) |
{ }Update an agent's metrics configuration.
| agent_id required | string (Agent Id) |
| threshold | number (Threshold) Default: 0.7 |
Array of objects (Global Metrics) Default: [] |
{- "threshold": 0.7,
- "global_metrics": [ ]
}{ }Create a test case for an agent.
| agent_id required | string (Agent Id) |
| name required | string (Name) |
| user_prompt required | string (User Prompt) |
| metrics | Array of strings (Metrics) Default: [] |
object (Dynamic Variables) Default: {} | |
| tool_mocks | Array of any (Tool Mocks) Default: [] |
| type | string (Type) Default: "simulation" |
Llm Model (string) or Llm Model (null) (Llm Model) | |
| includes | Array of strings (Includes) Default: [] |
| excludes | Array of strings (Excludes) Default: [] |
| patterns | Array of strings (Patterns) Default: [] |
{- "name": "string",
- "user_prompt": "string",
- "metrics": [ ],
- "dynamic_variables": { },
- "tool_mocks": [ ],
- "type": "simulation",
- "llm_model": "string",
- "includes": [ ],
- "excludes": [ ],
- "patterns": [ ]
}{ }Export test cases for an agent to a specified format.
| agent_id required | string (Agent Id) |
| format | string (Format) Default: "retell" |
Array of Test Ids (strings) or Test Ids (null) (Test Ids) |
{- "format": "retell",
- "test_ids": [
- "string"
]
}[- { }
]Update a test case.
| test_id required | string (Test Id) |
| name required | string (Name) |
| user_prompt required | string (User Prompt) |
| metrics | Array of strings (Metrics) Default: [] |
object (Dynamic Variables) Default: {} | |
| tool_mocks | Array of any (Tool Mocks) Default: [] |
| type | string (Type) Default: "simulation" |
Llm Model (string) or Llm Model (null) (Llm Model) | |
| includes | Array of strings (Includes) Default: [] |
| excludes | Array of strings (Excludes) Default: [] |
| patterns | Array of strings (Patterns) Default: [] |
{- "name": "string",
- "user_prompt": "string",
- "metrics": [ ],
- "dynamic_variables": { },
- "tool_mocks": [ ],
- "type": "simulation",
- "llm_model": "string",
- "includes": [ ],
- "excludes": [ ],
- "patterns": [ ]
}{ }Start a new test run. Tests execute in background, poll GET /runs/{id} for results.
| agent_id required | string (Agent Id) |
Array of Test Ids (strings) or Test Ids (null) (Test Ids) | |
RunOptions (object) or null |
{- "test_ids": [
- "string"
], - "options": {
- "max_turns": 20,
- "timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "cot_transitions": false,
- "agent_model": "string",
- "simulator_model": "string",
- "judge_model": "string"
}
}{ }Configure platform credentials. Returns 409 if already configured.
| platform required | string (Platform) |
| api_key required | string (Api Key) |
Api Secret (string) or Api Secret (null) (Api Secret) |
{- "api_key": "string",
- "api_secret": "string"
}{- "configured": true,
- "platform": "string"
}Import an agent from any supported platform by ID.
| platform required | string (Platform) |
| agent_id required | string (Agent Id) |
{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}Export an agent graph to any supported platform.
| platform required | string (Platform) |
required | object (AgentGraph-Input) Complete agent workflow graph. This is the unified internal representation (IR) that all importers convert to. It captures the full structure of an agent's conversation flow including nodes, transitions, and metadata. |
Name (string) or Name (null) (Name) |
{- "graph": {
- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}, - "name": "string"
}{- "id": "string",
- "name": "string",
- "platform": "string"
}Sync an agent to its source platform.
| agent_id required | string (Agent Id) |
required | object (AgentGraph-Input) Complete agent workflow graph. This is the unified internal representation (IR) that all importers convert to. It captures the full structure of an agent's conversation flow including nodes, transitions, and metadata. |
{- "graph": {
- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string"
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string"
}, - "description": "string"
}
], - "metadata": { }
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "default_model": "string"
}
}{- "id": "string",
- "name": "string",
- "platform": "string",
- "synced": true
}