Get Test Run
curl --request GET \
--url https://api.docketqa.com/test_run/{test_run_id} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.docketqa.com/test_run/{test_run_id}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.docketqa.com/test_run/{test_run_id}', 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.docketqa.com/test_run/{test_run_id}",
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-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.docketqa.com/test_run/{test_run_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-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.docketqa.com/test_run/{test_run_id}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.docketqa.com/test_run/{test_run_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"test_run": {
"id": 123,
"status": "<string>",
"test_blueprint_id": 123,
"test_group_run_id": 123,
"blueprint_metadata": {},
"results": [
{
"step_number": 123,
"task": "<string>",
"is_successful": true,
"result": "<string>",
"duration": 123,
"actions": [
{
"description": "<string>",
"type": "<string>",
"screenshot_url": "<string>",
"screenshot_url_before": "<string>",
"api_response": {}
}
]
}
],
"test_video_url": "<string>",
"test_video_download_url": "<string>",
"additional_attempts": [
{}
],
"created_at": "<string>",
"updated_at": "<string>"
}
}Tests
Get Test Run
GET
/
test_run
/
{test_run_id}
Get Test Run
curl --request GET \
--url https://api.docketqa.com/test_run/{test_run_id} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.docketqa.com/test_run/{test_run_id}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.docketqa.com/test_run/{test_run_id}', 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.docketqa.com/test_run/{test_run_id}",
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-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.docketqa.com/test_run/{test_run_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-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.docketqa.com/test_run/{test_run_id}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.docketqa.com/test_run/{test_run_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"test_run": {
"id": 123,
"status": "<string>",
"test_blueprint_id": 123,
"test_group_run_id": 123,
"blueprint_metadata": {},
"results": [
{
"step_number": 123,
"task": "<string>",
"is_successful": true,
"result": "<string>",
"duration": 123,
"actions": [
{
"description": "<string>",
"type": "<string>",
"screenshot_url": "<string>",
"screenshot_url_before": "<string>",
"api_response": {}
}
]
}
],
"test_video_url": "<string>",
"test_video_download_url": "<string>",
"additional_attempts": [
{}
],
"created_at": "<string>",
"updated_at": "<string>"
}
}Retrieve the details and results of a specific test run. Use this to poll for results after triggering a run.
Response
object
The test run object with full results.
Show Properties
Show Properties
integer
The unique ID of the test run.
string
The current status:
"running", "passed", or "failed".integer
The blueprint this run executed.
integer
The parent group run ID.
object
A snapshot of the test blueprint at the time the run was triggered. Includes all blueprint fields (
title, type, device_type, starting_url, browser_zoom, viewport_width, viewport_height, variables, etc.) and the full steps array with all step properties (see step types).object[]
Step-by-step results.
null while the test is still running.Show Result object properties
Show Result object properties
integer
The step number.
string
The step instruction.
boolean
Whether the step completed successfully.
string
A description of what happened during this step.
integer
Time in seconds the step took to execute.
object[]
Detailed browser actions taken during this step.
Show Action properties
Show Action properties
string
A human-readable description of the action.
string
The action type (e.g.
"click_element", "input_text", "extract_content", "scroll_down", etc.).string
Pre-signed URL to a screenshot taken after this action.
string
Pre-signed URL to a screenshot taken before this action (when available).
object
The API response data (for
api type steps). May include api_response_url with a pre-signed URL to the full response body.string
A pre-signed URL to stream the video recording of the test execution.
string
A pre-signed URL to download the video recording as a
.webm file.object[]
Results from retry attempts (when the test has
num_retries > 0 and the first attempt failed). Each attempt contains results and test_video_url.string
ISO 8601 timestamp of when the run started.
string
ISO 8601 timestamp of the last status update.
Example response
{
"test_run": {
"id": 38,
"status": "failed",
"test_blueprint_id": 180,
"test_group_run_id": 35,
"blueprint_metadata": {
"id": 180,
"title": "Login Flow",
"type": "integration",
"device_type": "browser",
"starting_url": "https://example.com/login",
"browser_zoom": 1.0,
"viewport_width": 1440,
"viewport_height": 900,
"variables": null,
"steps": [
{
"action": "Enter 'user@example.com' in the email field",
"step_number": 1,
"type": "act",
"use_vision": false
},
{
"action": "Enter 'password123' in the password field",
"step_number": 2,
"type": "act",
"use_vision": false
}
]
},
"results": [
{
"step_number": 1,
"task": "Enter 'user@example.com' in the email field",
"is_successful": false,
"result": "The agent could not complete the objective because no email field was present on the page.",
"duration": 43,
"actions": [
{
"description": "Action: extract content with goal='Find any input fields'",
"type": "extract_content",
"screenshot_url": "https://..."
}
]
},
{
"step_number": 2,
"task": "Enter 'password123' in the password field",
"is_successful": false,
"result": "Step not completed",
"duration": 0,
"actions": []
}
],
"test_video_url": "https://...",
"test_video_download_url": "https://...",
"additional_attempts": [],
"created_at": "2025-07-03T01:38:03.032648+00:00",
"updated_at": "2025-07-03T01:40:05.043914+00:00"
}
}
After triggering a run, use the
test_runs[].id value to poll this endpoint until the status changes from "running" to "passed" or "failed".⌘I

