Run evaluators against a VAPI WebRTC agent
curl --request POST \
--url https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"scenarios": [
123
],
"vapi_assistant_id": "<string>",
"agent_id": 123,
"project_id": 123,
"frequency": 1,
"name": "<string>",
"concurrency_limit": 123,
"mock_tool_names": [
"<string>"
]
}
'import requests
url = "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/"
payload = {
"scenarios": [123],
"vapi_assistant_id": "<string>",
"agent_id": 123,
"project_id": 123,
"frequency": 1,
"name": "<string>",
"concurrency_limit": 123,
"mock_tool_names": ["<string>"]
}
headers = {
"X-CEKURA-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-CEKURA-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scenarios: [123],
vapi_assistant_id: '<string>',
agent_id: 123,
project_id: 123,
frequency: 1,
name: '<string>',
concurrency_limit: 123,
mock_tool_names: ['<string>']
})
};
fetch('https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scenarios' => [
123
],
'vapi_assistant_id' => '<string>',
'agent_id' => 123,
'project_id' => 123,
'frequency' => 1,
'name' => '<string>',
'concurrency_limit' => 123,
'mock_tool_names' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-CEKURA-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/"
payload := strings.NewReader("{\n \"scenarios\": [\n 123\n ],\n \"vapi_assistant_id\": \"<string>\",\n \"agent_id\": 123,\n \"project_id\": 123,\n \"frequency\": 1,\n \"name\": \"<string>\",\n \"concurrency_limit\": 123,\n \"mock_tool_names\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scenarios\": [\n 123\n ],\n \"vapi_assistant_id\": \"<string>\",\n \"agent_id\": 123,\n \"project_id\": 123,\n \"frequency\": 1,\n \"name\": \"<string>\",\n \"concurrency_limit\": 123,\n \"mock_tool_names\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scenarios\": [\n 123\n ],\n \"vapi_assistant_id\": \"<string>\",\n \"agent_id\": 123,\n \"project_id\": 123,\n \"frequency\": 1,\n \"name\": \"<string>\",\n \"concurrency_limit\": 123,\n \"mock_tool_names\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"agent": 123,
"run_as_text": false,
"runs": [
{
"id": 123,
"scenario": 123,
"number": "+11234567890",
"inbound_number": "+11234567890",
"scenario_name": "<string>",
"test_profile_data": {},
"outbound_dial_window_opens_at": "2023-11-07T05:31:56Z",
"outbound_dial_window_seconds": 123,
"outbound_dial_window_closes_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2025-02-25T21:00:01.990052Z"
}{
"field_name": [
"<string>"
]
}Evaluators
Run Evaluator VAPI WebRTC
Execute evaluators against a VAPI agent over WebRTC. Requires vapi_assistant_id and VAPI credentials configured on the agent.
POST
/
test_framework
/
v1
/
scenarios
/
run_scenarios_vapi_webrtc
/
Run evaluators against a VAPI WebRTC agent
curl --request POST \
--url https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"scenarios": [
123
],
"vapi_assistant_id": "<string>",
"agent_id": 123,
"project_id": 123,
"frequency": 1,
"name": "<string>",
"concurrency_limit": 123,
"mock_tool_names": [
"<string>"
]
}
'import requests
url = "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/"
payload = {
"scenarios": [123],
"vapi_assistant_id": "<string>",
"agent_id": 123,
"project_id": 123,
"frequency": 1,
"name": "<string>",
"concurrency_limit": 123,
"mock_tool_names": ["<string>"]
}
headers = {
"X-CEKURA-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-CEKURA-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scenarios: [123],
vapi_assistant_id: '<string>',
agent_id: 123,
project_id: 123,
frequency: 1,
name: '<string>',
concurrency_limit: 123,
mock_tool_names: ['<string>']
})
};
fetch('https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scenarios' => [
123
],
'vapi_assistant_id' => '<string>',
'agent_id' => 123,
'project_id' => 123,
'frequency' => 1,
'name' => '<string>',
'concurrency_limit' => 123,
'mock_tool_names' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-CEKURA-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/"
payload := strings.NewReader("{\n \"scenarios\": [\n 123\n ],\n \"vapi_assistant_id\": \"<string>\",\n \"agent_id\": 123,\n \"project_id\": 123,\n \"frequency\": 1,\n \"name\": \"<string>\",\n \"concurrency_limit\": 123,\n \"mock_tool_names\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scenarios\": [\n 123\n ],\n \"vapi_assistant_id\": \"<string>\",\n \"agent_id\": 123,\n \"project_id\": 123,\n \"frequency\": 1,\n \"name\": \"<string>\",\n \"concurrency_limit\": 123,\n \"mock_tool_names\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_vapi_webrtc/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scenarios\": [\n 123\n ],\n \"vapi_assistant_id\": \"<string>\",\n \"agent_id\": 123,\n \"project_id\": 123,\n \"frequency\": 1,\n \"name\": \"<string>\",\n \"concurrency_limit\": 123,\n \"mock_tool_names\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 123,
"agent": 123,
"run_as_text": false,
"runs": [
{
"id": 123,
"scenario": 123,
"number": "+11234567890",
"inbound_number": "+11234567890",
"scenario_name": "<string>",
"test_profile_data": {},
"outbound_dial_window_opens_at": "2023-11-07T05:31:56Z",
"outbound_dial_window_seconds": 123,
"outbound_dial_window_closes_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2025-02-25T21:00:01.990052Z"
}{
"field_name": [
"<string>"
]
}Authorizations
API Key Authentication. It should be included in the header of each request.
Body
application/jsonapplication/x-www-form-urlencodedmultipart/form-data
List of scenario IDs to run
The VAPI assistant ID to test against
Agent ID (optional if scenarios all belong to one agent)
Names of mock tools to activate for this run. Omit (or send null) to mock every tool configured on the agent; send an empty list to mock none so every tool keeps its original endpoint; send specific names to mock only those.
Response
ID of the result
ID of the agent
Status of the result
Available options:
pending, running, completed, failed Whether the scenario ran as text or not
Example:
false
Show child attributes
Show child attributes
Examples:
{
"id": 274,
"status": "pending",
"scenario": 1,
"number": null,
"inbound_number": "+11234567890",
"scenario_name": "Customer Support Call (Agent Inbound = True)",
"test_profile_data": null,
"outbound_dial_window_opens_at": null,
"outbound_dial_window_seconds": null,
"outbound_dial_window_closes_at": null
}
{
"id": 275,
"status": "pending",
"scenario": 2,
"number": "+11234567890",
"inbound_number": null,
"scenario_name": "Outbound Sales Call (Agent Inbound = False)",
"test_profile_data": null,
"outbound_dial_window_opens_at": "2026-06-24T10:47:30Z",
"outbound_dial_window_seconds": 300,
"outbound_dial_window_closes_at": "2026-06-24T10:52:30Z"
}
Example:
"2025-02-25T21:00:01.990052Z"
⌘I