curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/testing-agent/flows \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/testing-agent/flows"
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/flows', 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/flows",
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/flows"
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/flows")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/testing-agent/flows")
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": "68a1c2e4f0b3d9001a7e5c21",
"app_id": "6820f3a4e7b91d003c45a1f2",
"name": "Create a project",
"goal": "Sign up, create a project called Launch, and check that it appears on the dashboard.",
"source": "manual",
"revision": 1,
"created_date": "2026-09-28T10:15:00+00:00",
"updated_date": "2026-09-28T10:15:00+00:00",
"role": "admin"
}
]List tests
Returns every test in the app, newest first. An app has at most 250 tests, so the list is never paged.
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/flows \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/testing-agent/flows"
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/flows', 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/flows",
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/flows"
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/flows")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/testing-agent/flows")
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": "68a1c2e4f0b3d9001a7e5c21",
"app_id": "6820f3a4e7b91d003c45a1f2",
"name": "Create a project",
"goal": "Sign up, create a project called Launch, and check that it appears on the dashboard.",
"source": "manual",
"revision": 1,
"created_date": "2026-09-28T10:15:00+00:00",
"updated_date": "2026-09-28T10:15:00+00:00",
"role": "admin"
}
]Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app.
Response
The app's tests.
ID of the test.
"68a1c2e4f0b3d9001a7e5c21"
ID of the app the test belongs to.
"6820f3a4e7b91d003c45a1f2"
Short name of the test.
"Create a project"
What the testing agent tries to do, in plain language.
"Sign up, create a project called Launch, and check that it appears on the dashboard."
manual for a test you created, app_context for one Base44 generated from the app.
"manual"
Starts at 1 and goes up each time the test is edited.
1
When the test was created, as an ISO 8601 UTC timestamp.
"2026-09-28T10:15:00+00:00"
When the test last changed, as an ISO 8601 UTC timestamp.
"2026-09-28T10:15:00+00:00"
Role set on the test, or null when none is set. A test without one can still run as a role its name or goal names. The run's flow_role shows the role actually used.
"admin"
Was this page helpful?