curl --request GET \
--url https://app.letsflow.ai/v1/workflow_runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.letsflow.ai/v1/workflow_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{
"data": [
{
"runKey": "RUN-123",
"status": "requested",
"mode": "live",
"executionSource": "publication",
"runMode": "production",
"sideEffectsPolicy": "live",
"automation": {
"version": 123,
"key": "<string>",
"kind": "automation"
},
"requestedAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"requestedBy": "<string>",
"canRerun": true
}
],
"page": {
"cursor": "<string>",
"next_cursor": "<string>",
"has_more": true,
"limit": 123
},
"aggregate": {
"total": 123,
"byStatus": {},
"lastRequestedAt": "<string>"
},
"meta": {
"request_id": "<string>",
"correlation_id": "<string>",
"operation": "<string>",
"resource": "<string>"
}
}{
"type": "https://app.letsflow.ai/problems/access-grant-not-found",
"title": "<string>",
"status": 123,
"code": "access_grant_admin_extension_required",
"detail": "<string>",
"instance": "<string>",
"request_id": "<string>",
"correlation_id": "<string>",
"retryable": true,
"auth_failure_reason": "<string>",
"availability_reason": "capability_disabled",
"re_auth_required": true,
"violations": [
{
"field": "<string>",
"message": "<string>",
"capability": "<string>",
"details": {}
}
],
"diagnostics": [
{
"code": "<string>",
"severity": "info",
"message": "<string>",
"fixHint": "<string>",
"location": {
"file": "<string>",
"line": 2,
"column": 2,
"stepId": "<string>"
}
}
]
}List Workflow runs
List canonical workflow status handles prepared for access-request provisioning.
curl --request GET \
--url https://app.letsflow.ai/v1/workflow_runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_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.letsflow.ai/v1/workflow_runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.letsflow.ai/v1/workflow_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{
"data": [
{
"runKey": "RUN-123",
"status": "requested",
"mode": "live",
"executionSource": "publication",
"runMode": "production",
"sideEffectsPolicy": "live",
"automation": {
"version": 123,
"key": "<string>",
"kind": "automation"
},
"requestedAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"requestedBy": "<string>",
"canRerun": true
}
],
"page": {
"cursor": "<string>",
"next_cursor": "<string>",
"has_more": true,
"limit": 123
},
"aggregate": {
"total": 123,
"byStatus": {},
"lastRequestedAt": "<string>"
},
"meta": {
"request_id": "<string>",
"correlation_id": "<string>",
"operation": "<string>",
"resource": "<string>"
}
}{
"type": "https://app.letsflow.ai/problems/access-grant-not-found",
"title": "<string>",
"status": 123,
"code": "access_grant_admin_extension_required",
"detail": "<string>",
"instance": "<string>",
"request_id": "<string>",
"correlation_id": "<string>",
"retryable": true,
"auth_failure_reason": "<string>",
"availability_reason": "capability_disabled",
"re_auth_required": true,
"violations": [
{
"field": "<string>",
"message": "<string>",
"capability": "<string>",
"details": {}
}
],
"diagnostics": [
{
"code": "<string>",
"severity": "info",
"message": "<string>",
"fixHint": "<string>",
"location": {
"file": "<string>",
"line": 2,
"column": 2,
"stepId": "<string>"
}
}
]
}Authorizations
OAuth Bearer access tokens or Flow API keys with the required Flow scope families for the route.
Query Parameters
Opaque cursor for list pagination.
Requested page size for list operations.
1 <= x <= 100Filter workflow runs by canonical status.
requested, queued, running, waiting, cancel_requested, completed, failed, denied, canceled Filter workflow runs by stored workflow diagnostic code.
Filter workflow runs by workflow ID. Tenant-authored workflow IDs are UUIDs; managed system workflow IDs are opaque strings.
Restrict runs to the selected managed automation capability. Omit to read every research kind.
research:knowledge_automation_mismatch Filter workflow runs by linked access request ID.
Filter workflow runs by blocking approval request ID.
Omit for every run; false excludes validation-scenario attempts; true returns only validation-scenario attempts.
true, false