Get Tornado Status
curl --request GET \
--url https://api.bland.ai/v1/agent-testing/tornado/{id}/status \
--header 'authorization: <authorization>'import requests
url = "https://api.bland.ai/v1/agent-testing/tornado/{id}/status"
headers = {"authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {authorization: '<authorization>'}};
fetch('https://api.bland.ai/v1/agent-testing/tornado/{id}/status', 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/v1/agent-testing/tornado/{id}/status",
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/v1/agent-testing/tornado/{id}/status"
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/v1/agent-testing/tornado/{id}/status")
.header("authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/agent-testing/tornado/{id}/status")
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{
"session_id": "e1f2a3b4-5678-9cde-f012-3456789abcde",
"status": "COMPLETED_ALL_PASSED",
"current_iteration": 2,
"max_iterations": 5,
"total_scenarios": 3,
"passed_scenarios": 3,
"failed_scenarios": 0,
"unfixable_count": 0,
"unfixable_ids": [],
"iterations": [
{
"iteration": 1,
"batch_id": "b1c2d3e4-f567-890a-bcde-f01234567890",
"started_at": "2026-04-14T10:15:01.000Z",
"completed_at": "2026-04-14T10:17:45.000Z",
"passed_ids": [
"a1b2c3d4-5678-9abc-def0-1234567890ab"
],
"failed_ids": [
"f6a7b8c9-0abc-def1-2345-67890abcdef0",
"d9e0f1a2-3456-789b-cdef-0123456789ab"
],
"newly_unfixable_ids": [],
"fix_plan": {
"fixes": [
{
"id": "fix-001",
"target_node": "de-escalation-handler",
"description": "Add empathy statement before addressing complaint",
"type": "prompt_edit"
},
{
"id": "fix-002",
"target_node": "transfer-logic",
"description": "Lower transfer threshold from 3 failures to 2",
"type": "config_change"
}
],
"priority_order": ["fix-001", "fix-002"]
},
"norm_prompt_excerpt": "When the caller expresses frustration, first acknowledge their feelings with an empathy statement..."
},
{
"iteration": 2,
"batch_id": "c2d3e4f5-6789-0abc-def0-123456789abc",
"started_at": "2026-04-14T10:17:50.000Z",
"completed_at": "2026-04-14T10:20:12.000Z",
"passed_ids": [
"a1b2c3d4-5678-9abc-def0-1234567890ab",
"f6a7b8c9-0abc-def1-2345-67890abcdef0",
"d9e0f1a2-3456-789b-cdef-0123456789ab"
],
"failed_ids": [],
"newly_unfixable_ids": [],
"fix_plan": {
"fixes": [],
"priority_order": []
},
"norm_prompt_excerpt": null
}
],
"elapsed_ms": 312000,
"timeout_ms": 900000,
"forked_version": 4
}
Tornado Mode
Get Tornado Status
Get detailed progress for a tornado session including iteration data and fix plans.
GET
/
v1
/
agent-testing
/
tornado
/
{id}
/
status
Get Tornado Status
curl --request GET \
--url https://api.bland.ai/v1/agent-testing/tornado/{id}/status \
--header 'authorization: <authorization>'import requests
url = "https://api.bland.ai/v1/agent-testing/tornado/{id}/status"
headers = {"authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {authorization: '<authorization>'}};
fetch('https://api.bland.ai/v1/agent-testing/tornado/{id}/status', 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/v1/agent-testing/tornado/{id}/status",
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/v1/agent-testing/tornado/{id}/status"
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/v1/agent-testing/tornado/{id}/status")
.header("authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/agent-testing/tornado/{id}/status")
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{
"session_id": "e1f2a3b4-5678-9cde-f012-3456789abcde",
"status": "COMPLETED_ALL_PASSED",
"current_iteration": 2,
"max_iterations": 5,
"total_scenarios": 3,
"passed_scenarios": 3,
"failed_scenarios": 0,
"unfixable_count": 0,
"unfixable_ids": [],
"iterations": [
{
"iteration": 1,
"batch_id": "b1c2d3e4-f567-890a-bcde-f01234567890",
"started_at": "2026-04-14T10:15:01.000Z",
"completed_at": "2026-04-14T10:17:45.000Z",
"passed_ids": [
"a1b2c3d4-5678-9abc-def0-1234567890ab"
],
"failed_ids": [
"f6a7b8c9-0abc-def1-2345-67890abcdef0",
"d9e0f1a2-3456-789b-cdef-0123456789ab"
],
"newly_unfixable_ids": [],
"fix_plan": {
"fixes": [
{
"id": "fix-001",
"target_node": "de-escalation-handler",
"description": "Add empathy statement before addressing complaint",
"type": "prompt_edit"
},
{
"id": "fix-002",
"target_node": "transfer-logic",
"description": "Lower transfer threshold from 3 failures to 2",
"type": "config_change"
}
],
"priority_order": ["fix-001", "fix-002"]
},
"norm_prompt_excerpt": "When the caller expresses frustration, first acknowledge their feelings with an empathy statement..."
},
{
"iteration": 2,
"batch_id": "c2d3e4f5-6789-0abc-def0-123456789abc",
"started_at": "2026-04-14T10:17:50.000Z",
"completed_at": "2026-04-14T10:20:12.000Z",
"passed_ids": [
"a1b2c3d4-5678-9abc-def0-1234567890ab",
"f6a7b8c9-0abc-def1-2345-67890abcdef0",
"d9e0f1a2-3456-789b-cdef-0123456789ab"
],
"failed_ids": [],
"newly_unfixable_ids": [],
"fix_plan": {
"fixes": [],
"priority_order": []
},
"norm_prompt_excerpt": null
}
],
"elapsed_ms": 312000,
"timeout_ms": 900000,
"forked_version": 4
}
Headers
string
required
Your API key for authentication.
Path Parameters
string
required
The tornado session ID.
Response
string
The unique identifier for the tornado session.
string
Current status of the session. One of
RUNNING, COMPLETED_ALL_PASSED, COMPLETED_PARTIAL, TIMEOUT, STUCK, CANCELLED, or ERROR.integer
The current or final iteration number.
integer
The maximum number of fix iterations configured.
integer
Total number of scenarios being tested.
integer
Number of scenarios currently passing.
integer
Number of scenarios currently failing.
integer
Number of scenarios that failed across multiple iterations with the same root cause.
array of strings
IDs of scenarios deemed unfixable.
array
Array of iteration objects describing each fix cycle.
Show iteration object
Show iteration object
integer
The iteration number.
string
The test batch ID for this iteration.
string
ISO 8601 timestamp of when the iteration started.
string
ISO 8601 timestamp of when the iteration completed.
array of strings
Scenario IDs that passed in this iteration.
array of strings
Scenario IDs that failed in this iteration.
array of strings
Scenario IDs newly marked as unfixable in this iteration.
object
string
An excerpt of the normalized prompt after fixes were applied.
integer
Time elapsed since the session started in milliseconds.
integer
The timeout configured for this session in milliseconds.
integer
The pathway version created from the applied fixes.
{
"session_id": "e1f2a3b4-5678-9cde-f012-3456789abcde",
"status": "COMPLETED_ALL_PASSED",
"current_iteration": 2,
"max_iterations": 5,
"total_scenarios": 3,
"passed_scenarios": 3,
"failed_scenarios": 0,
"unfixable_count": 0,
"unfixable_ids": [],
"iterations": [
{
"iteration": 1,
"batch_id": "b1c2d3e4-f567-890a-bcde-f01234567890",
"started_at": "2026-04-14T10:15:01.000Z",
"completed_at": "2026-04-14T10:17:45.000Z",
"passed_ids": [
"a1b2c3d4-5678-9abc-def0-1234567890ab"
],
"failed_ids": [
"f6a7b8c9-0abc-def1-2345-67890abcdef0",
"d9e0f1a2-3456-789b-cdef-0123456789ab"
],
"newly_unfixable_ids": [],
"fix_plan": {
"fixes": [
{
"id": "fix-001",
"target_node": "de-escalation-handler",
"description": "Add empathy statement before addressing complaint",
"type": "prompt_edit"
},
{
"id": "fix-002",
"target_node": "transfer-logic",
"description": "Lower transfer threshold from 3 failures to 2",
"type": "config_change"
}
],
"priority_order": ["fix-001", "fix-002"]
},
"norm_prompt_excerpt": "When the caller expresses frustration, first acknowledge their feelings with an empathy statement..."
},
{
"iteration": 2,
"batch_id": "c2d3e4f5-6789-0abc-def0-123456789abc",
"started_at": "2026-04-14T10:17:50.000Z",
"completed_at": "2026-04-14T10:20:12.000Z",
"passed_ids": [
"a1b2c3d4-5678-9abc-def0-1234567890ab",
"f6a7b8c9-0abc-def1-2345-67890abcdef0",
"d9e0f1a2-3456-789b-cdef-0123456789ab"
],
"failed_ids": [],
"newly_unfixable_ids": [],
"fix_plan": {
"fixes": [],
"priority_order": []
},
"norm_prompt_excerpt": null
}
],
"elapsed_ms": 312000,
"timeout_ms": 900000,
"forked_version": 4
}
Docs for agents: llms.txt
Was this page helpful?
⌘I