curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_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://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_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 => [
"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://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}"
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://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}")
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{
"id": "68a1ca02f0b3d9001a7e5d11",
"app_id": "6820f3a4e7b91d003c45a1f2",
"flow_id": "68a1c2e4f0b3d9001a7e5c21",
"execution_id": "68a1c9b7f0b3d9001a7e5d04",
"flow_goal": "Sign up, create a project called Launch, and check that it appears on the dashboard.",
"status": "goal_accomplished",
"summary": "The project was created and listed on the dashboard, but only after a reload.",
"issues": [
{
"category": "functionality",
"related_step_number": 3,
"severity": "warning",
"summary": "After saving, the dashboard still shows no projects until the page is reloaded.",
"title": "Project doesn't appear after creation"
}
],
"created_date": "2026-09-28T10:18:39+00:00",
"updated_date": "2026-09-28T10:18:39+00:00"
}Get test run report
Returns the report for a test run: the verdict, a summary, and the problems the testing agent found.
Wait until the run’s analysis_status in Get test run is completed. Until the report is written this returns a 404, and a run that stopped before analysis, such as most cancelled runs, never gets one.
Problems caused by Base44’s own preview or infrastructure are left out of issues, because they aren’t problems in your app.
This is limited to 6000 requests per minute per caller for each app. Some workspaces have a different limit.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_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://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_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 => [
"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://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}"
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://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/testing-agent/analysis/{execution_id}")
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{
"id": "68a1ca02f0b3d9001a7e5d11",
"app_id": "6820f3a4e7b91d003c45a1f2",
"flow_id": "68a1c2e4f0b3d9001a7e5c21",
"execution_id": "68a1c9b7f0b3d9001a7e5d04",
"flow_goal": "Sign up, create a project called Launch, and check that it appears on the dashboard.",
"status": "goal_accomplished",
"summary": "The project was created and listed on the dashboard, but only after a reload.",
"issues": [
{
"category": "functionality",
"related_step_number": 3,
"severity": "warning",
"summary": "After saving, the dashboard still shows no projects until the page is reloaded.",
"title": "Project doesn't appear after creation"
}
],
"created_date": "2026-09-28T10:18:39+00:00",
"updated_date": "2026-09-28T10:18:39+00:00"
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Response
The run's report.
The report for a finished run.
ID of the report.
"68a1ca02f0b3d9001a7e5d11"
ID of the app.
"6820f3a4e7b91d003c45a1f2"
ID of the test.
"68a1c2e4f0b3d9001a7e5c21"
ID of the run.
"68a1c9b7f0b3d9001a7e5d04"
The test's goal when the run started.
"Sign up, create a project called Launch, and check that it appears on the dashboard."
The verdict. failed and timeout mean the report couldn't reach one, and summary says what happened.
goal_accomplished, goal_not_accomplished, failed, timeout "goal_accomplished"
Plain-language summary of the run.
"The project was created and listed on the dashboard, but only after a reload."
Problems found during the run. Empty when there were none.
Show child attributes
Show child attributes
[
{
"category": "functionality",
"related_step_number": 3,
"severity": "warning",
"summary": "After saving, the dashboard still shows no projects until the page is reloaded.",
"title": "Project doesn't appear after creation"
}
]
When the report was written, as an ISO 8601 UTC timestamp.
"2026-09-28T10:18:39+00:00"
When the report last changed, as an ISO 8601 UTC timestamp.
"2026-09-28T10:18:39+00:00"
Was this page helpful?