curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/workflows/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/workflows/runs"
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}/workflows/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://app.base44.com/api/apps/{app_id}/workflows/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: 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}/workflows/runs"
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}/workflows/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/workflows/runs")
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[
{
"run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77",
"workflow_id": "68b1c0d4e7b91d003c45a1f2",
"status": "completed",
"workflow_name": "Email me new signups",
"trigger_type": "scheduled",
"started_at": "2026-08-25T09:12:44Z",
"completed_at": "2026-08-25T09:12:46Z",
"duration_ms": 1840,
"steps_count": 3,
"error_message": "The email step failed because the recipient address was missing.",
"is_test_run": false,
"credits_consumed": 0.5,
"status_reason": ""
}
]{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}List workflow runs for an app
Returns runs across every workflow on the app, newest first.
Set status to return only runs in one state. Set since to return only runs that started after a moment in time.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/workflows/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/workflows/runs"
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}/workflows/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://app.base44.com/api/apps/{app_id}/workflows/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: 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}/workflows/runs"
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}/workflows/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/workflows/runs")
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[
{
"run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77",
"workflow_id": "68b1c0d4e7b91d003c45a1f2",
"status": "completed",
"workflow_name": "Email me new signups",
"trigger_type": "scheduled",
"started_at": "2026-08-25T09:12:44Z",
"completed_at": "2026-08-25T09:12:46Z",
"duration_ms": 1840,
"steps_count": 3,
"error_message": "The email step failed because the recipient address was missing.",
"is_test_run": false,
"credits_consumed": 0.5,
"status_reason": ""
}
]{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app whose workflows you want to work with.
Query Parameters
Most runs to return.
1 <= x <= 200How many runs to skip, for paging.
x >= 0Keep only runs in this state, for example failed.
Keep only runs that started at or after this ISO 8601 datetime.
Response
Runs across the app's workflows, newest first.
ID of the run.
"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
ID of the workflow that ran.
"68b1c0d4e7b91d003c45a1f2"
How the run is going: running, completed, failed, or cancelled. See Workflow status for how this compares to the workflow's own status.
"completed"
Name of that workflow at the time of the run.
"Email me new signups"
What started the run: scheduled, entity, connector, in_app_agent, app_user_auth, app_publish, app_payment, webhook, or goal_file. See Triggers for what each one fires on. A run started through Run a workflow now with no payload to replay reports manual instead.
"scheduled"
When the run started, as an ISO 8601 UTC timestamp.
"2026-08-25T09:12:44Z"
When the run finished, as an ISO 8601 UTC timestamp. This is null while it is still running.
"2026-08-25T09:12:46Z"
How long the run took, in milliseconds. This is 0 while it is still running.
1840
Steps the run executed.
3
Why the run failed. This is null when it did not fail.
"The email step failed because the recipient address was missing."
This is true when the run was started by hand through Run a workflow now, rather than by its trigger.
false
Credits the run used.
0.5
Why the run failed or was cancelled. Empty on runs that finished successfully.
""
Was this page helpful?