curl --request GET \
--url https://api.cekura.ai/test_framework/v2/runs/bulk/ \
--header 'X-CEKURA-API-KEY: <api-key>'import requests
url = "https://api.cekura.ai/test_framework/v2/runs/bulk/"
headers = {"X-CEKURA-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-CEKURA-API-KEY': '<api-key>'}};
fetch('https://api.cekura.ai/test_framework/v2/runs/bulk/', 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/v2/runs/bulk/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v2/runs/bulk/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cekura.ai/test_framework/v2/runs/bulk/")
.header("X-CEKURA-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v2/runs/bulk/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": 123,
"provider_call_id": "<string>",
"trace_id": "<string>",
"scenario": 123,
"scenario_name": "Scenario Deleted",
"scenario_type": "<string>",
"personality": 123,
"personality_name": "<string>",
"agent": 123,
"agent_name": "<string>",
"agent_version": {
"score": 123,
"explanation": [
"<string>"
],
"outcome_alignments": [
{
"outcome": "<string>",
"prompt_part": "<string>",
"aligned": true
}
]
},
"result_id": 123,
"result_name": "<string>",
"expected_outcome_prompt": "<string>",
"expected_outcome": "<string>",
"evaluation": {
"metrics": [
{
"id": 123,
"name": "<string>",
"type": "<string>",
"score": 123,
"enum": "<string>",
"value": "<string>",
"explanation": [
"<string>"
],
"extra": {}
}
]
},
"rubric": "<unknown>",
"transcript": "<string>",
"transcript_object": [
{
"role": "<string>",
"content": "<string>",
"timestamp": 123,
"normalized_content": "<string>",
"comparison_spans": [
"<unknown>"
]
}
],
"duration": "<string>",
"voice_recording_url": "<string>",
"email_id": "jsmith@example.com",
"status": "running",
"evaluation_status": "success",
"metadata": "<unknown>",
"success": true,
"is_reviewed": true,
"feedback": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"executed_at": "2023-11-07T05:31:56Z",
"outbound_number": "<string>",
"inbound_number": "<string>",
"critical_categories": [
{
"category_id": 123,
"category": "<string>",
"deviation": 123,
"wrongly_marked": true,
"feedback": "<string>",
"priority": "critical"
}
],
"error_message": "<string>",
"scenario_instructions": "<string>",
"run_as_text": true,
"test_profile_data": {
"id": 123,
"name": "<string>",
"information": {}
},
"generated_mock_tool_entries": [
{}
],
"mocked_tool_names": [
"<string>"
],
"provider_call_details": "<unknown>",
"agent_number": "<string>",
"testing_channel_index": 123,
"waveform": {},
"run_type": "<string>",
"outbound_dial_window_opens_at": "<string>",
"outbound_dial_window_seconds": "<string>",
"outbound_dial_window_closes_at": "<string>"
}
]List Runs with IDs
Retrieve multiple runs in a single request
curl --request GET \
--url https://api.cekura.ai/test_framework/v2/runs/bulk/ \
--header 'X-CEKURA-API-KEY: <api-key>'import requests
url = "https://api.cekura.ai/test_framework/v2/runs/bulk/"
headers = {"X-CEKURA-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-CEKURA-API-KEY': '<api-key>'}};
fetch('https://api.cekura.ai/test_framework/v2/runs/bulk/', 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/v2/runs/bulk/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v2/runs/bulk/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cekura.ai/test_framework/v2/runs/bulk/")
.header("X-CEKURA-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v2/runs/bulk/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": 123,
"provider_call_id": "<string>",
"trace_id": "<string>",
"scenario": 123,
"scenario_name": "Scenario Deleted",
"scenario_type": "<string>",
"personality": 123,
"personality_name": "<string>",
"agent": 123,
"agent_name": "<string>",
"agent_version": {
"score": 123,
"explanation": [
"<string>"
],
"outcome_alignments": [
{
"outcome": "<string>",
"prompt_part": "<string>",
"aligned": true
}
]
},
"result_id": 123,
"result_name": "<string>",
"expected_outcome_prompt": "<string>",
"expected_outcome": "<string>",
"evaluation": {
"metrics": [
{
"id": 123,
"name": "<string>",
"type": "<string>",
"score": 123,
"enum": "<string>",
"value": "<string>",
"explanation": [
"<string>"
],
"extra": {}
}
]
},
"rubric": "<unknown>",
"transcript": "<string>",
"transcript_object": [
{
"role": "<string>",
"content": "<string>",
"timestamp": 123,
"normalized_content": "<string>",
"comparison_spans": [
"<unknown>"
]
}
],
"duration": "<string>",
"voice_recording_url": "<string>",
"email_id": "jsmith@example.com",
"status": "running",
"evaluation_status": "success",
"metadata": "<unknown>",
"success": true,
"is_reviewed": true,
"feedback": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"executed_at": "2023-11-07T05:31:56Z",
"outbound_number": "<string>",
"inbound_number": "<string>",
"critical_categories": [
{
"category_id": 123,
"category": "<string>",
"deviation": 123,
"wrongly_marked": true,
"feedback": "<string>",
"priority": "critical"
}
],
"error_message": "<string>",
"scenario_instructions": "<string>",
"run_as_text": true,
"test_profile_data": {
"id": 123,
"name": "<string>",
"information": {}
},
"generated_mock_tool_entries": [
{}
],
"mocked_tool_names": [
"<string>"
],
"provider_call_details": "<unknown>",
"agent_number": "<string>",
"testing_channel_index": 123,
"waveform": {},
"run_type": "<string>",
"outbound_dial_window_opens_at": "<string>",
"outbound_dial_window_seconds": "<string>",
"outbound_dial_window_closes_at": "<string>"
}
]Authorizations
API Key Authentication. It should be included in the header of each request.
Query Parameters
Comma-separated list of run IDs.
Example: 1,2,3
Must be a plain comma-separated string, not a JSON array — passing a JSON array returns a 400 error.
Tenant scope. Supply one of agent_id, result_id, project_id when authenticating with a user session or OAuth bearer token; omit when using an API key already scoped to the tenant.
Tenant scope. Supply one of agent_id, result_id, project_id when authenticating with a user session or OAuth bearer token; omit when using an API key already scoped to the tenant.
Tenant scope. Supply one of agent_id, result_id, project_id when authenticating with a user session or OAuth bearer token; omit when using an API key already scoped to the tenant.
Response
Call ID from the Assistant provider
Example: call_abc123
OpenTelemetry trace ID (32-char hex). Set when OTel tracing is enabled.
32Type of the run's scenario (e.g. instruction, conditional_actions), null if the scenario was deleted
Personality this run belongs to
Name of the personality this run belongs to
ID of the agent associated with this run
Name of the agent associated with this run
The agent version (history record) this run's result ran against, or null.
Show child attributes
Show child attributes
Name of the result this run belongs to
Run Evaluation
Show child attributes
Show child attributes
Detailed rubric evaluation data Example:
[
{
"metric_id": 100,
"metric_name": "Call Quality",
"value": 5,
"explanation": ["The response was accurate"],
"passed": true,
"conditions": "score gte 5",
"expected_conditions": {"operator": "and", "conditions": [{"field": "score", "op": "gte", "value": 5}]}
}
]
Full text transcript of the call. Example:
[00:01] Testing Agent: Hello.
[00:02] Main Agent: Hello, how can I help you today?
[00:03] Testing Agent: Well, I mean, sure. What time exactly are we talking about here
[00:04] Main Agent: 6 PM.
[00:05] Testing Agent: Great. I'll book that for you. Just a sec.
[00:06] Main Agent: Okay.
Transcript object
Show child attributes
Show child attributes
Duration of the run in MM:SS format
URL to access the voice recording of this run
running- Runningcompleted- Completedfailed- Failedpending- Pendingin_progress- In Progressevaluating- Evaluatingin_queue- In Queuetimeout- Timeoutcancelled- Cancelledscaling_up- Scaling Up
running, completed, failed, pending, in_progress, evaluating, in_queue, timeout, cancelled, scaling_up success- Successfailure- Failurereviewed_success- Reviewed Successreviewed_failure- Reviewed Failure
success, failure, reviewed_success, reviewed_failure Whether this run passed its quality evaluation. false means either the call failed to connect or an evaluation check did not pass. Check error_message for connection failures and evaluation for check results.
Whether the call has been reviewed.
Example: true or false
Phone number used to make the outbound call for this run
Phone number used to receive the inbound call for this run
List of critical evaluation categories and their results for this run
Show child attributes
Show child attributes
Test Profile
Show child attributes
Show child attributes
Expected mock tool calls for this run's evaluator. Each entry has shape {tool_id, tool_name, new_entry: {input, output}}.
Show child attributes
Show child attributes
Tool names that were mock-enabled for this run's result. Function calls in the transcript matching these names were served by Cekura mocks. Empty if no tools were mocked.
Details of the call from the provider
Phone number of the agent (only for voice inbound calls)
The channel index of the testing agent in the audio recording
Amplitude envelope of the recording, one array of values per audio channel, so a waveform can be drawn without downloading the audio. Null for recordings processed before peaks were stored.
Show child attributes
Show child attributes
Run Execution Type
ISO timestamp when the outbound dial window opened. Null until the run reaches pending/waiting-for-call.
Duration of the outbound dial window in seconds.
ISO timestamp when the outbound dial window closes. Null until the window opens.