curl --request GET \
--url https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs', 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.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"replay_runs": [
{
"id": 123,
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"failure_reason": "<string>",
"generated_count": 123,
"selected_evals": [
{
"id": 123,
"name": "<string>"
}
],
"passed_count": 123,
"failed_count": 123,
"in_progress_count": 123,
"simulation_calls": [
{
"id": 123,
"scenario_id": 123,
"type": "<string>",
"status": "<string>",
"duration": 123,
"outcome": {
"value": "<string>",
"type": "<string>"
},
"intent": "<string>",
"evals": [
{
"label": "<string>",
"value": "<string>",
"evidence": "<string>"
}
],
"call_id": 123,
"analysis_stopped": false,
"unreported": false,
"analysis_failed": false,
"failure": {
"reason": "<string>",
"title": "<string>",
"message": "<string>"
},
"target_eval_label": "<string>",
"target_ai_evaluation": {},
"clip_set_name": "<string>",
"repetition": 123,
"saved_scenario_id": 123,
"persona": "<string>"
}
],
"execution_completed_at": "2023-11-07T05:31:56Z",
"voice_clip_sets": [
{
"id": 123,
"name": "<string>"
}
],
"replay_repeat_count": 123,
"replay_settings": {},
"evals_expected": true,
"ran_count": 0,
"unreported_count": 0,
"analysis_failed_count": 0
}
],
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123
}{
"detail": "Not authenticated"
}{
"detail": "User does not have access to workspace 42"
}{
"detail": "Agent with ID 17 not found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}List Replay Runs
List an agent’s replay runs with their replayed test calls.
Each run includes its simulation calls, pass/fail counts, and the clip sets and
evals it was configured with. Filter by status to poll for completion.
curl --request GET \
--url https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs', 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.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usetuner.ai/api/v1/workspaces/{workspace_id}/agents/{agent_id}/replay-runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"replay_runs": [
{
"id": 123,
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"failure_reason": "<string>",
"generated_count": 123,
"selected_evals": [
{
"id": 123,
"name": "<string>"
}
],
"passed_count": 123,
"failed_count": 123,
"in_progress_count": 123,
"simulation_calls": [
{
"id": 123,
"scenario_id": 123,
"type": "<string>",
"status": "<string>",
"duration": 123,
"outcome": {
"value": "<string>",
"type": "<string>"
},
"intent": "<string>",
"evals": [
{
"label": "<string>",
"value": "<string>",
"evidence": "<string>"
}
],
"call_id": 123,
"analysis_stopped": false,
"unreported": false,
"analysis_failed": false,
"failure": {
"reason": "<string>",
"title": "<string>",
"message": "<string>"
},
"target_eval_label": "<string>",
"target_ai_evaluation": {},
"clip_set_name": "<string>",
"repetition": 123,
"saved_scenario_id": 123,
"persona": "<string>"
}
],
"execution_completed_at": "2023-11-07T05:31:56Z",
"voice_clip_sets": [
{
"id": 123,
"name": "<string>"
}
],
"replay_repeat_count": 123,
"replay_settings": {},
"evals_expected": true,
"ran_count": 0,
"unreported_count": 0,
"analysis_failed_count": 0
}
],
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123
}{
"detail": "Not authenticated"
}{
"detail": "User does not have access to workspace 42"
}{
"detail": "Agent with ID 17 not found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Use Tuner API key (tr_api_...) or user session token. Find your API key in Workspace Settings > API Keys.
Path Parameters
Tuner's internal numeric ID for the agent.
Workspace ID. Find this in Workspace > General Settings.
Query Parameters
Only return runs with this status.
pending, running, analyzing, complete, partial, failed, unreported, analysis_failed Page number, starting at 1.
x >= 1Number of runs per page (1-100).
1 <= x <= 100Response
Successful Response
A page of replay runs with their replayed calls and results.
Runs on this page, newest first.
Show child attributes
Show child attributes
Total number of runs matching the request, across all pages.
Current page number, starting at 1.
Maximum number of runs per page.
Total number of pages.