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",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}Import an agent from an uploaded file (XLSForm, JSON, etc.).
Source (string) or Source (null) (Source) |
| file required | string <application/octet-stream> (File) |
{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}Export an agent graph to a format.
required | object (AgentGraph) 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) |
| expanded | boolean (Expanded) Default: false |
{- "graph": {
- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}, - "format": "string",
- "expanded": false
}{- "property1": "string",
- "property2": "string"
}Run a single test case.
required | object (AgentGraph) 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",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "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": 50,
- "turn_timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "audio_eval": false,
- "no_cache": false,
- "pattern_engine": "fnmatch",
- "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
}
], - "audio_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) 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",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "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": 50,
- "turn_timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "audio_eval": false,
- "no_cache": false,
- "pattern_engine": "fnmatch",
- "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
}
], - "audio_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": 50,
- "turn_timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "audio_eval": false,
- "pattern_engine": "fnmatch"
}, - "export": {
- "layout": true
}, - "cache": {
- "cache_backend": "disk",
- "s3_bucket": "",
- "s3_prefix": "dspy-cache/",
- "s3_region": "string"
}, - "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 (AudioSettings) TTS/STT service configuration for audio evaluation. | |
object (ExportSettings) Export configuration. | |
object (CacheSettings) DSPy cache backend configuration. | |
object (Env) Environment variables to set (e.g., API keys for LLM providers) |
{- "models": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "run": {
- "max_turns": 50,
- "turn_timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "audio_eval": false,
- "pattern_engine": "fnmatch"
}, - "export": {
- "layout": true
}, - "cache": {
- "cache_backend": "disk",
- "s3_bucket": "",
- "s3_prefix": "dspy-cache/",
- "s3_region": "string"
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}{- "models": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "run": {
- "max_turns": 50,
- "turn_timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "audio_eval": false,
- "pattern_engine": "fnmatch"
}, - "export": {
- "layout": true
}, - "cache": {
- "cache_backend": "disk",
- "s3_bucket": "",
- "s3_prefix": "dspy-cache/",
- "s3_region": "string"
}, - "env": {
- "property1": "string",
- "property2": "string"
}
}{- "models": {
- "agent": "string",
- "simulator": "string",
- "judge": "string"
}, - "run": {
- "max_turns": 50,
- "turn_timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "audio_eval": false,
- "pattern_engine": "fnmatch"
}, - "export": {
- "layout": true
}, - "cache": {
- "cache_backend": "disk",
- "s3_bucket": "",
- "s3_prefix": "dspy-cache/",
- "s3_region": "string"
}, - "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.
For linked agents (source_path), uses file mtime for ETag-based caching. Returns 304 Not Modified if the file hasn't changed.
| agent_id required | string (Agent Id) |
If-None-Match (string) or If-None-Match (null) (If-None-Match) |
nullExtract dynamic variable names from agent prompts.
Scans general_prompt and all node state_prompt values for {{var}} placeholders. Returns unique variable names in first-appearance order.
| agent_id required | string (Agent Id) |
{ }Replace all snippets for an agent.
| agent_id required | string (Agent Id) |
| property name* additional property | any |
{ }{ }Create or update a single snippet.
| agent_id required | string (Agent Id) |
| name required | string (Name) |
| text required | string (Text) |
{- "text": "string"
}{ }Apply snippets: add them to graph and replace occurrences in prompts with {%name%} refs.
| agent_id required | string (Agent Id) |
required | Array of objects (Snippets) |
{- "snippets": [
- {
- "property1": "string",
- "property2": "string"
}
]
}{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "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 <application/octet-stream> (File) |
{ }Update a general or node-specific prompt.
When node_id is None, updates source_metadata.general_prompt. When node_id is set, updates that node's state_prompt. For linked-file agents, writes back to the source file on disk.
| agent_id required | string (Agent Id) |
Node Id (string) or Node Id (null) (Node Id) | |
| prompt_text required | string (Prompt Text) |
Transition Target Id (string) or Transition Target Id (null) (Transition Target Id) |
{- "node_id": "string",
- "prompt_text": "string",
- "transition_target_id": "string"
}{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}Set a node's global_node_setting (entry condition + go-back conditions).
| agent_id required | string (Agent Id) |
| node_id required | string (Node Id) |
| condition required | string (Condition) |
Array of objects (Go Back Conditions) Default: [] |
{- "condition": "string",
- "go_back_conditions": [ ]
}{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}Remove a node's global_node_setting.
| agent_id required | string (Agent Id) |
| node_id required | string (Node Id) |
{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}Merge updates into an agent's source_metadata.
| agent_id required | string (Agent Id) |
required | object (Updates) |
{- "updates": { }
}{- "nodes": {
- "property1": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}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.
If the agent has linked test files, the test is appended to the first file. Otherwise it is stored in the database.
| 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": [ ]
}{ }Link a JSON test file to an agent.
The file must exist, contain valid JSON, and be a JSON array. Tests from the file will appear alongside DB tests via list_for_agent_with_linked.
| agent_id required | string (Agent Id) |
| path required | string (Path) |
{- "path": "string"
}{ }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 (DB or linked file).
| 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": 50,
- "turn_timeout_seconds": 60,
- "verbose": false,
- "flow_judge": false,
- "streaming": false,
- "test_model_precedence": false,
- "audio_eval": false,
- "no_cache": false,
- "pattern_engine": "fnmatch",
- "agent_model": "string",
- "simulator_model": "string",
- "judge_model": "string"
}
}{ }Diagnose why a test result failed and suggest a fix.
Analyzes the graph structure, transcript, and failed metrics to identify the root cause and propose concrete prompt/transition changes.
Optional body: {"model": "provider/model-name"} to override the judge model.
| result_id required | string (Result Id) |
{ }Apply proposed changes to a copy of the graph and rerun the test.
Non-destructive: does not persist changes.
| result_id required | string (Result Id) |
| property name* additional property | any |
{ }{ }Revise a previous fix attempt based on new metric results.
Given the original diagnosis and previous changes, produce a revised fix.
Optional body field: "model" to override the judge model.
| result_id required | string (Result Id) |
| property name* additional property | any |
{ }{ }Persist proposed changes to the agent graph.
Applies changes and saves the modified graph.
| agent_id required | string (Agent Id) |
| property name* additional property | any |
{ }{ }Start a live voice call with an agent.
Creates a LiveKit room and spawns an agent worker subprocess. Returns connection info including a token for the browser to join.
| agent_id required | string (Agent Id) |
object (Dynamic Variables) Default: {} |
{- "dynamic_variables": { }
}{- "call_id": "string",
- "room_name": "string",
- "livekit_url": "string",
- "token": "string"
}Start a text chat session with an agent.
Creates a ConversationEngine in-process (no LiveKit or subprocess needed). Returns a chat_id for WebSocket connection.
| agent_id required | string (Agent Id) |
object (Dynamic Variables) Default: {} |
{- "dynamic_variables": { }
}{- "chat_id": "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",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}Export an agent graph to any supported platform.
| platform required | string (Platform) |
required | object (AgentGraph) 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",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "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) 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",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}, - "property2": {
- "id": "string",
- "state_prompt": "string",
- "node_type": "conversation",
- "tools": [
- {
- "name": "string",
- "description": "string",
- "parameters": { },
- "type": "custom",
- "url": "string",
- "tool_id": "string",
- "metadata": { }
}
], - "transitions": [
- {
- "target_node_id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": "string",
- "operator": "string",
- "right": ""
}
], - "logical_operator": "and"
}, - "description": "string"
}
], - "metadata": { },
- "variables_to_extract": [
- {
- "name": "string",
- "description": "string",
- "type": "string",
- "choices": [
- "string"
]
}
], - "global_node_setting": {
- "condition": "string",
- "go_back_conditions": [
- {
- "id": "string",
- "condition": {
- "type": "llm_prompt",
- "value": "string",
- "equations": [
- {
- "left": null,
- "operator": null,
- "right": null
}
], - "logical_operator": "and"
}
}
]
}
}
}, - "entry_node_id": "string",
- "source_type": "string",
- "source_metadata": { },
- "snippets": {
- "property1": "string",
- "property2": "string"
}, - "default_model": "string"
}
}{- "id": "string",
- "name": "string",
- "platform": "string",
- "synced": true
}