Docs
Query grammar & pagination
The same filter syntax the runs explorer uses, so a filter you built in the UI lifts straight into a script.
The API and the runs explorer parse the same query string. That is the point: a filter you built by clicking around can be copied out of the browser's address bar and used verbatim in a script.
Time range
GET /api/v1/runs?range=24h
GET /api/v1/runs?range=custom&from=2026-07-01T00:00:00Z&to=2026-07-08T00:00:00Zrange accepts 15m, 1h, 4h, 24h (default), 7d, 30d or custom. With
custom, supply from and to as ISO timestamps.
Facets
Include with f.<dim>, exclude with x.<dim>. Both repeat. Values within one
dimension are OR-ed; separate dimensions are AND-ed.
GET /api/v1/runs?f.status=error&f.status=crashed&x.workflowId=wf_noisyAvailable dimensions:
status · mode · instanceId · workflowId · hasAi · model · provider ·
errorClass · env · tags
Free text
q accepts free text plus Datadog-style key:value tokens.
GET /api/v1/runs?q=timeout+workflow:wf_sync+trigger:scheduleAliases: trigger → mode, workflow → workflowId, instance → instanceId,
ai → hasAi, error / errorclass → errorClass, tag / tags → tags.
Sorting
GET /api/v1/runs?sort=durationMs:descSortable keys: finishedAt (default, descending), workflowName, instanceName,
status, mode, durationMs, totalItemsOut, nodeCount.
Pagination
Keyset, not offset. Responses carry nextCursor, which is null once exhausted:
{
"runs": [],
"nextCursor": "eyJ2IjoiMjAyNi0wNy0yOFQyMzo1OTowMFoiLCJpZCI6IjlmMmMifQ",
"range": { "from": "2026-07-28T02:47:00Z", "to": "2026-07-29T02:47:00Z" }
}Pass it back as cursor to get the next page.
limit defaults to 100 and is capped at 500, except on
/api/v1/runs/export, where it defaults to 1000 and is capped at 5000.
CSV export
/api/v1/runs/export takes the same filters and returns CSV with a
content-disposition attachment header. Columns: executionId, workflowName,
status, mode, durationMs, totalItemsOut, nodeCount, finishedAt.
Values beginning =, +, - or @ are prefixed with an apostrophe, so a
workflow named =cmd|… cannot become a formula when the file is opened in a
spreadsheet.