Test Runs
List Disposition Test Runs
List test runs for a disposition.
GET
/
v2
/
agents
/
{agent_id}
/
dispositions
/
{disposition_id}
/
runs
List Disposition Test Runs
curl --request GET \
--url https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs \
--header 'authorization: <authorization>'import requests
url = "https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs"
headers = {"authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {authorization: '<authorization>'}};
fetch('https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/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.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/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: <authorization>"
],
]);
$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.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs")
.header("authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"data": {
"runs": [
{
"id": "429f5de4-ae9b-470f-be68-7390899af9b5",
"dispositionId": "dfe4e15d-01aa-4dfd-94d8-09e32fc6e875",
"target": "draft",
"configurationSource": "draft",
"executionSla": "realtime",
"replaySourceRunId": null,
"definition": {
"name": "Appointment outcome",
"description": "Did the caller book an appointment?",
"timing": "immediate",
"values": [
{
"id": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b",
"key": "booked",
"label": "Appointment booked",
"schema": { "kind": "boolean" },
"source": {
"kind": "variable_extraction",
"variableKey": "appointment_booked",
"execution": { "reasoningEffort": "auto" }
}
}
],
"transformation": {
"version": 1,
"root": { "kind": "value", "valueId": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b" }
},
"postCallWebhook": { "mode": "emit_followup" }
},
"population": { "environment": "production", "requestedSize": 25 },
"status": "running",
"requestedSize": 25,
"resolvedSize": 25,
"completedSize": 11,
"failedSize": 1,
"evalRunId": null,
"mode": "recent",
"inputSetHash": null,
"definitionHash": "a5d6152e751530b817c530df32d908ea058ad72769c1eacccbf0eb42517e1efa",
"draftRevision": 6,
"dispositionVersionId": null,
"summary": {
"caseCount": 25,
"failedCaseCount": 1,
"producedValueCount": 11,
"totalValueCount": 11,
"correctionCount": 0
},
"error": null,
"createdAt": "2026-09-10T19:12:44.902Z",
"startedAt": "2026-09-10T19:12:46.130Z",
"completedAt": null
},
{
"id": "ef1c2354-dc5b-4993-8bcd-283836c23e69",
"dispositionId": "dfe4e15d-01aa-4dfd-94d8-09e32fc6e875",
"target": "published",
"configurationSource": "published",
"executionSla": "realtime",
"replaySourceRunId": null,
"definition": {
"name": "Appointment outcome",
"description": "Did the caller book an appointment?",
"timing": "immediate",
"values": [
{
"id": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b",
"key": "booked",
"label": "Appointment booked",
"schema": { "kind": "boolean" },
"source": {
"kind": "variable_extraction",
"variableKey": "appointment_booked",
"execution": { "reasoningEffort": "auto" }
}
}
],
"transformation": {
"version": 1,
"root": { "kind": "value", "valueId": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b" }
},
"postCallWebhook": { "mode": "emit_followup" }
},
"population": { "environment": "production", "requestedSize": 50 },
"status": "complete",
"requestedSize": 50,
"resolvedSize": 50,
"completedSize": 50,
"failedSize": 0,
"evalRunId": null,
"mode": "recent",
"inputSetHash": null,
"definitionHash": "7a0e4daae110c7411448abc7a83a2066b5f3f553b6b67b0d2d9cd0a29a5c634e",
"draftRevision": null,
"dispositionVersionId": "d16bf596-21c7-4acb-8d72-2dced2790181",
"summary": {
"caseCount": 50,
"failedCaseCount": 0,
"producedValueCount": 48,
"totalValueCount": 50,
"correctionCount": 3
},
"error": null,
"createdAt": "2026-09-09T12:01:08.417Z",
"startedAt": "2026-09-09T12:01:09.655Z",
"completedAt": "2026-09-09T12:09:51.208Z"
}
]
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "NOT_FOUND",
"message": "Disposition not found"
}
]
}
Overview
Dispositions are enabled per organization. If your organization does not have access, these endpoints return
404.Headers
Path Parameters
The agent’s unique identifier. Must be a UUID; otherwise returns
400 with the message agentId must be a valid UUID. Returns 404 Agent not found if the agent is not in your organization.The disposition’s unique identifier. Must be a UUID; otherwise returns
400 with the message dispositionId must be a valid UUID. Returns 404 Disposition not found if it does not belong to this agent.Query Parameters
Maximum number of runs to return. Minimum
1, maximum 100. Values outside that range are clamped; a non-numeric value falls back to 25. There is no cursor: the newest limit runs are returned.Response
Test run objects ordered by
createdAt descending.Show test run object
Show test run object
draft or published: which definition the run was started from. A replay keeps its source run’s target.The immutable definition snapshot this run executes. Same shape as the
definition body parameter of Create Disposition.{ "environment": "production", "requestedSize" }. requestedSize is the sample size asked for, or the number of explicit call ids.Calls that finished successfully. Counted live from the per-call rows while
running; the final tally afterwards.SHA-256 hex digest of the definition snapshot. Runs with equal hashes executed identical definitions.
Counts computed from the per-call rows:
caseCount (calls with a row), failedCaseCount, producedValueCount (value results in state produced), totalValueCount (all value results), and correctionCount (correction revisions saved against the run).{ "code", "message" } when the run as a whole failed, otherwise null. Codes include test_run_cancelled, test_run_stale, in_flight_cap_exceeded, empty_cohort, billing_not_allowed, test_run_execution_failed, and disposition_failed.{
"data": {
"runs": [
{
"id": "429f5de4-ae9b-470f-be68-7390899af9b5",
"dispositionId": "dfe4e15d-01aa-4dfd-94d8-09e32fc6e875",
"target": "draft",
"configurationSource": "draft",
"executionSla": "realtime",
"replaySourceRunId": null,
"definition": {
"name": "Appointment outcome",
"description": "Did the caller book an appointment?",
"timing": "immediate",
"values": [
{
"id": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b",
"key": "booked",
"label": "Appointment booked",
"schema": { "kind": "boolean" },
"source": {
"kind": "variable_extraction",
"variableKey": "appointment_booked",
"execution": { "reasoningEffort": "auto" }
}
}
],
"transformation": {
"version": 1,
"root": { "kind": "value", "valueId": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b" }
},
"postCallWebhook": { "mode": "emit_followup" }
},
"population": { "environment": "production", "requestedSize": 25 },
"status": "running",
"requestedSize": 25,
"resolvedSize": 25,
"completedSize": 11,
"failedSize": 1,
"evalRunId": null,
"mode": "recent",
"inputSetHash": null,
"definitionHash": "a5d6152e751530b817c530df32d908ea058ad72769c1eacccbf0eb42517e1efa",
"draftRevision": 6,
"dispositionVersionId": null,
"summary": {
"caseCount": 25,
"failedCaseCount": 1,
"producedValueCount": 11,
"totalValueCount": 11,
"correctionCount": 0
},
"error": null,
"createdAt": "2026-09-10T19:12:44.902Z",
"startedAt": "2026-09-10T19:12:46.130Z",
"completedAt": null
},
{
"id": "ef1c2354-dc5b-4993-8bcd-283836c23e69",
"dispositionId": "dfe4e15d-01aa-4dfd-94d8-09e32fc6e875",
"target": "published",
"configurationSource": "published",
"executionSla": "realtime",
"replaySourceRunId": null,
"definition": {
"name": "Appointment outcome",
"description": "Did the caller book an appointment?",
"timing": "immediate",
"values": [
{
"id": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b",
"key": "booked",
"label": "Appointment booked",
"schema": { "kind": "boolean" },
"source": {
"kind": "variable_extraction",
"variableKey": "appointment_booked",
"execution": { "reasoningEffort": "auto" }
}
}
],
"transformation": {
"version": 1,
"root": { "kind": "value", "valueId": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b" }
},
"postCallWebhook": { "mode": "emit_followup" }
},
"population": { "environment": "production", "requestedSize": 50 },
"status": "complete",
"requestedSize": 50,
"resolvedSize": 50,
"completedSize": 50,
"failedSize": 0,
"evalRunId": null,
"mode": "recent",
"inputSetHash": null,
"definitionHash": "7a0e4daae110c7411448abc7a83a2066b5f3f553b6b67b0d2d9cd0a29a5c634e",
"draftRevision": null,
"dispositionVersionId": "d16bf596-21c7-4acb-8d72-2dced2790181",
"summary": {
"caseCount": 50,
"failedCaseCount": 0,
"producedValueCount": 48,
"totalValueCount": 50,
"correctionCount": 3
},
"error": null,
"createdAt": "2026-09-09T12:01:08.417Z",
"startedAt": "2026-09-09T12:01:09.655Z",
"completedAt": "2026-09-09T12:09:51.208Z"
}
]
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "NOT_FOUND",
"message": "Disposition not found"
}
]
}
Docs for agents: llms.txt
Was this page helpful?
⌘I
List Disposition Test Runs
curl --request GET \
--url https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs \
--header 'authorization: <authorization>'import requests
url = "https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs"
headers = {"authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {authorization: '<authorization>'}};
fetch('https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/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.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/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: <authorization>"
],
]);
$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.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs")
.header("authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v2/agents/{agent_id}/dispositions/{disposition_id}/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"data": {
"runs": [
{
"id": "429f5de4-ae9b-470f-be68-7390899af9b5",
"dispositionId": "dfe4e15d-01aa-4dfd-94d8-09e32fc6e875",
"target": "draft",
"configurationSource": "draft",
"executionSla": "realtime",
"replaySourceRunId": null,
"definition": {
"name": "Appointment outcome",
"description": "Did the caller book an appointment?",
"timing": "immediate",
"values": [
{
"id": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b",
"key": "booked",
"label": "Appointment booked",
"schema": { "kind": "boolean" },
"source": {
"kind": "variable_extraction",
"variableKey": "appointment_booked",
"execution": { "reasoningEffort": "auto" }
}
}
],
"transformation": {
"version": 1,
"root": { "kind": "value", "valueId": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b" }
},
"postCallWebhook": { "mode": "emit_followup" }
},
"population": { "environment": "production", "requestedSize": 25 },
"status": "running",
"requestedSize": 25,
"resolvedSize": 25,
"completedSize": 11,
"failedSize": 1,
"evalRunId": null,
"mode": "recent",
"inputSetHash": null,
"definitionHash": "a5d6152e751530b817c530df32d908ea058ad72769c1eacccbf0eb42517e1efa",
"draftRevision": 6,
"dispositionVersionId": null,
"summary": {
"caseCount": 25,
"failedCaseCount": 1,
"producedValueCount": 11,
"totalValueCount": 11,
"correctionCount": 0
},
"error": null,
"createdAt": "2026-09-10T19:12:44.902Z",
"startedAt": "2026-09-10T19:12:46.130Z",
"completedAt": null
},
{
"id": "ef1c2354-dc5b-4993-8bcd-283836c23e69",
"dispositionId": "dfe4e15d-01aa-4dfd-94d8-09e32fc6e875",
"target": "published",
"configurationSource": "published",
"executionSla": "realtime",
"replaySourceRunId": null,
"definition": {
"name": "Appointment outcome",
"description": "Did the caller book an appointment?",
"timing": "immediate",
"values": [
{
"id": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b",
"key": "booked",
"label": "Appointment booked",
"schema": { "kind": "boolean" },
"source": {
"kind": "variable_extraction",
"variableKey": "appointment_booked",
"execution": { "reasoningEffort": "auto" }
}
}
],
"transformation": {
"version": 1,
"root": { "kind": "value", "valueId": "e3d3b96a-39d3-4e5e-9ba6-cdfaa0efb92b" }
},
"postCallWebhook": { "mode": "emit_followup" }
},
"population": { "environment": "production", "requestedSize": 50 },
"status": "complete",
"requestedSize": 50,
"resolvedSize": 50,
"completedSize": 50,
"failedSize": 0,
"evalRunId": null,
"mode": "recent",
"inputSetHash": null,
"definitionHash": "7a0e4daae110c7411448abc7a83a2066b5f3f553b6b67b0d2d9cd0a29a5c634e",
"draftRevision": null,
"dispositionVersionId": "d16bf596-21c7-4acb-8d72-2dced2790181",
"summary": {
"caseCount": 50,
"failedCaseCount": 0,
"producedValueCount": 48,
"totalValueCount": 50,
"correctionCount": 3
},
"error": null,
"createdAt": "2026-09-09T12:01:08.417Z",
"startedAt": "2026-09-09T12:01:09.655Z",
"completedAt": "2026-09-09T12:09:51.208Z"
}
]
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "NOT_FOUND",
"message": "Disposition not found"
}
]
}