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. |
| 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. |
required | object (TestCase) Single test case definition. |
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. |
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"
}Import call transcripts as a new Run with imported Results.
The uploaded file's content is parsed by a platform-specific adapter (currently Retell only). Each conversation in the file becomes one Result inside the created Run, with status="imported" and no test_case_id linkage.
| agent_id required | string (Agent Id) |
| format | string (Format) Default: "retell" |
| file required | string <application/octet-stream> (File) |
{ }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"
}
}{ }Replay a source Run against the agent's current graph.
Loads the source Run, drives a fresh conversation per source Result using the source's recorded user turns as a script, and persists the live conversations as a new Run.
| source_run_id required | string (Source Run Id) |
{ }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. |
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. |
{- "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
}