curl --request POST \
--url https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_pipecat/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"scenarios": [
{
"scenario": 123,
"pipecat_room_url": "<string>",
"pipecat_token": "<string>",
"publish_data_message": "<unknown>"
}
],
"agent": 123,
"mock_tool_names": [
"<string>"
]
}
'import requests
url = "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_pipecat/"
payload = {
"scenarios": [
{
"scenario": 123,
"pipecat_room_url": "<string>",
"pipecat_token": "<string>",
"publish_data_message": "<unknown>"
}
],
"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,
pipecat_room_url: '<string>',
pipecat_token: '<string>',
publish_data_message: '<unknown>'
}
],
agent: 123,
mock_tool_names: ['<string>']
})
};
fetch('https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_pipecat/', 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_pipecat/",
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,
'pipecat_room_url' => '<string>',
'pipecat_token' => '<string>',
'publish_data_message' => '<unknown>'
]
],
'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_pipecat/"
payload := strings.NewReader("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"pipecat_room_url\": \"<string>\",\n \"pipecat_token\": \"<string>\",\n \"publish_data_message\": \"<unknown>\"\n }\n ],\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_pipecat/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"pipecat_room_url\": \"<string>\",\n \"pipecat_token\": \"<string>\",\n \"publish_data_message\": \"<unknown>\"\n }\n ],\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_pipecat/")
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 \"pipecat_room_url\": \"<string>\",\n \"pipecat_token\": \"<string>\",\n \"publish_data_message\": \"<unknown>\"\n }\n ],\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 Pipecat
Execute evaluators against an agent running on Pipecat / Daily.co WebRTC. Each scenario entry carries its own pipecat_room_url and optional token.
curl --request POST \
--url https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_pipecat/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"scenarios": [
{
"scenario": 123,
"pipecat_room_url": "<string>",
"pipecat_token": "<string>",
"publish_data_message": "<unknown>"
}
],
"agent": 123,
"mock_tool_names": [
"<string>"
]
}
'import requests
url = "https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_pipecat/"
payload = {
"scenarios": [
{
"scenario": 123,
"pipecat_room_url": "<string>",
"pipecat_token": "<string>",
"publish_data_message": "<unknown>"
}
],
"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,
pipecat_room_url: '<string>',
pipecat_token: '<string>',
publish_data_message: '<unknown>'
}
],
agent: 123,
mock_tool_names: ['<string>']
})
};
fetch('https://api.cekura.ai/test_framework/v1/scenarios/run_scenarios_pipecat/', 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_pipecat/",
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,
'pipecat_room_url' => '<string>',
'pipecat_token' => '<string>',
'publish_data_message' => '<unknown>'
]
],
'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_pipecat/"
payload := strings.NewReader("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"pipecat_room_url\": \"<string>\",\n \"pipecat_token\": \"<string>\",\n \"publish_data_message\": \"<unknown>\"\n }\n ],\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_pipecat/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scenarios\": [\n {\n \"scenario\": 123,\n \"pipecat_room_url\": \"<string>\",\n \"pipecat_token\": \"<string>\",\n \"publish_data_message\": \"<unknown>\"\n }\n ],\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_pipecat/")
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 \"pipecat_room_url\": \"<string>\",\n \"pipecat_token\": \"<string>\",\n \"publish_data_message\": \"<unknown>\"\n }\n ],\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
Schema for the run_scenarios_pipecat endpoint, which runs scenarios using Pipecat WebRTC.
Total runs: one per entry in scenarios (no frequency multiplier on this endpoint).
List of scenarios to run with their Pipecat WebRTC configuration
Show child attributes
Show child attributes
Agent ID to run the scenarios against. If omitted, the agent is derived from the first scenario's configured 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"