List workflow runs
curl --request GET \
--url https://api.langdock.com/workflows/v1/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.langdock.com/workflows/v1/runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.langdock.com/workflows/v1/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://api.langdock.com/workflows/v1/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://api.langdock.com/workflows/v1/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://api.langdock.com/workflows/v1/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.langdock.com/workflows/v1/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_bodyWorkflow API
List Workflow Runs
Read paginated workflow runs with node inputs, outputs, errors, and logs
GET
/
workflows
/
v1
/
runs
List workflow runs
curl --request GET \
--url https://api.langdock.com/workflows/v1/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.langdock.com/workflows/v1/runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.langdock.com/workflows/v1/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://api.langdock.com/workflows/v1/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://api.langdock.com/workflows/v1/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://api.langdock.com/workflows/v1/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.langdock.com/workflows/v1/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_bodyReturns paginated runs and node executions for a workflow the API key user can edit. Use this path when you need filters such as test versus production, or a cursor. Flattened export with a required date range is a different contract on Workflow Run Export.
Unavailable action or agent data is redacted. Execution payloads follow the workflow API payload limit.
Base URL
https://api.langdock.com/workflows/v1/runs
Dedicated deploymentsReplace
api.langdock.com with <your-deployment-url>/api/public in all requests.Required scopes
This endpoint requires theWORKFLOW_API scope (Workflow Read API) and editor access.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
workflowId | string | Yes | UUID of the workflow. |
limit | integer | No | Number of runs to return. Default: 50. Maximum: 100. |
cursor | string | No | Run UUID from nextCursor in the previous response. |
runId | string | No | Filter to a single run UUID. |
runMode | string | No | test or production. Must agree with version when both are set: test with 0, production with a published version. |
status | string | No | Run status: PENDING, IN_PROGRESS, AWAITING_INPUT, COMPLETED, FAILED, or CANCELLED. |
from | string | No | Start of the run creation range. ISO 8601 timestamp or YYYY-MM-DD. Must be sent together with to. A date-only value starts at 00:00:00.000 UTC. |
to | string | No | End of the run creation range. Must be equal to or later than from. A date-only value ends at 23:59:59.999 UTC. |
version | string | No | Workflow version used for the run. Version 0 is the draft used for test runs. |
Example
const axios = require("axios");
async function listWorkflowRuns(workflowId) {
const response = await axios.get(
"https://api.langdock.com/workflows/v1/runs",
{
params: {
workflowId,
runMode: "production",
limit: 50
},
headers: {
Authorization: "Bearer YOUR_API_KEY"
}
}
);
console.log("Runs:", response.data.runs.length);
return response.data.nextCursor;
}
listWorkflowRuns("550e8400-e29b-41d4-a716-446655440000");
Response format
Success response (200 OK)
{
runs: Array<{
id: string;
runNumber: number;
status: string;
createdAt: string;
updatedAt: string;
isTestRun: boolean;
isExecutionDataExpired: boolean;
workflowVersion: {
id: string;
version: string;
nodes: Array<object>;
edges: Array<object>;
};
executions: Array<{
id: string;
workflowNodeId: string;
createdAt: string;
updatedAt: string;
status: string;
input: unknown;
output: unknown;
inputError: unknown;
outputError: unknown;
logs: unknown;
durationMs: number;
executionDataExpiredAt: string | null;
accessDenied: boolean;
}>;
tags: Array<{ key: string; displayValue: string | null }>;
rerunOf: { id: string; runNumber: number } | null;
originalRerunOf: { id: string; runNumber: number } | null;
}>;
nextCursor?: string;
hasWaitingForInput: boolean;
}
Error handling
| Status code | Description |
|---|---|
| 400 | Invalid query, from without to, to earlier than from, or runMode that disagrees with version |
| 401 | Invalid or missing API key |
| 403 | Missing WORKFLOW_API scope or editor access. A missing workflow, a template, or a workflow in another workspace also returns this status. |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
Langdock intentionally blocks browser-origin requests to protect your API key and ensure your applications remain secure. For more information, please see our guide on API Key Best Practices.
Authorizations
API key as Bearer token. Format "Bearer YOUR_API_KEY"
Query Parameters
UUID of the workflow.
Number of runs to return.
Required range:
1 <= x <= 100Run UUID from nextCursor in the previous response.
Filter to a single run UUID.
Available options:
test, production Available options:
PENDING, IN_PROGRESS, AWAITING_INPUT, COMPLETED, FAILED, CANCELLED Start of the run creation range. ISO 8601 timestamp or YYYY-MM-DD. Must be sent together with to.
End of the run creation range. Must be equal to or later than from.
Workflow version used for the run. Version 0 is the draft used for test runs.
Response
Workflow runs returned successfully
Was this page helpful?