curl --request POST \
--url https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_with_websockets/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"scenarios": [
{
"scenario": 123,
"websocket_url": "<string>"
}
],
"frequency": 50,
"agent": 123,
"mock_tool_names": [
"<string>"
]
}
'import requests
url = "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_with_websockets/"
payload = {
"scenarios": [
{
"scenario": 123,
"websocket_url": "<string>"
}
],
"frequency": 50,
"agent": 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: [{scenario: 123, websocket_url: '<string>'}],
frequency: 50,
agent: 123,
mock_tool_names: ['<string>']
})
};
fetch('https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_with_websockets/', 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_with_websockets/",
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' => [
[
'scenario' => 123,
'websocket_url' => '<string>'
]
],
'frequency' => 50,
'agent' => 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_with_websockets/"
payload := strings.NewReader("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"websocket_url\": \"<string>\"\n }\n ],\n \"frequency\": 50,\n \"agent\": 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_with_websockets/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"websocket_url\": \"<string>\"\n }\n ],\n \"frequency\": 50,\n \"agent\": 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_with_websockets/")
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 {\n \"scenario\": 123,\n \"websocket_url\": \"<string>\"\n }\n ],\n \"frequency\": 50,\n \"agent\": 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>"
]
}Run Evaluator Websocket
Execute evaluators where each scenario carries its own websocket URL. Useful when you have a fleet of agents or stateful websocket sessions to test in a single batch.
curl --request POST \
--url https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_with_websockets/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"scenarios": [
{
"scenario": 123,
"websocket_url": "<string>"
}
],
"frequency": 50,
"agent": 123,
"mock_tool_names": [
"<string>"
]
}
'import requests
url = "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_with_websockets/"
payload = {
"scenarios": [
{
"scenario": 123,
"websocket_url": "<string>"
}
],
"frequency": 50,
"agent": 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: [{scenario: 123, websocket_url: '<string>'}],
frequency: 50,
agent: 123,
mock_tool_names: ['<string>']
})
};
fetch('https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_with_websockets/', 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_with_websockets/",
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' => [
[
'scenario' => 123,
'websocket_url' => '<string>'
]
],
'frequency' => 50,
'agent' => 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_with_websockets/"
payload := strings.NewReader("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"websocket_url\": \"<string>\"\n }\n ],\n \"frequency\": 50,\n \"agent\": 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_with_websockets/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"websocket_url\": \"<string>\"\n }\n ],\n \"frequency\": 50,\n \"agent\": 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_with_websockets/")
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 {\n \"scenario\": 123,\n \"websocket_url\": \"<string>\"\n }\n ],\n \"frequency\": 50,\n \"agent\": 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
List of scenario+websocket pairs. Each element must be an object with two keys: scenario (integer evaluator ID) and websocket_url (string, ws:// or wss:// URL). Example: [{"scenario": 101, "websocket_url": "wss://agent-a.example.com/chat"}, {"scenario": 102, "websocket_url": "wss://agent-b.example.com/chat"}]
Show child attributes
Show child attributes
Frequency to run
1 <= x <= 100Agent to use. Required if none of the scenarios have an 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
pending, running, completed, failed Whether the scenario ran as text or not
false
Show child attributes
Show child attributes
{
"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"
}
"2025-02-25T21:00:01.990052Z"