GET/api/v1/runs
List workflow runs, most recently changed first
Every run of the org — started through the API, in the app, or by an upload. For an OAuth token, the runs on assets its person can read and the runs they started; a run of a team-private template they are not in is listed with private: true and no detail. Poll for progress with updated_after.
Scopes: runs:read
Parameters
asset_idquery · string (uuid)Only runs on this asset (any version of it).
workflow_idquery · string (uuid)Only runs of this template (any version of it).
statusquery · "active" | "completed" | "cancelled" | "failed"Only runs in this status.
updated_afterquery · string (date-time)Only runs whose state changed strictly after this instant, compared to the millisecond — poll with the newest
updated_atyou have seen (that run does not come back).limitquery · integerPage size, default 50. Values above 100 are treated as 100.
cursorquery · stringnext_cursor from the previous page, with the other parameters unchanged.
Response 200RunList
dataarray of Runrequiredidstring (uuid)requiredworkflowobjectrequiredThe template version the run is pinned to (any version's id names its template in GET /api/v1/workflows/{id}).
nameis null when the run isprivate.idstring (uuid)requirednamestring or nullrequired
assetobjectrequiredThe asset the run is about.
nameis null for an OAuth token whose person can no longer read the asset (a run they started).idstring (uuid)requirednamestring or nullrequired
status"active" | "completed" | "cancelled" | "failed"requiredprivatebooleanrequiredTrue when the run's template is private to a team the token's person is not in: the run's existence, status, team and times are shown, its workflow name, steps, current step, incident and params are not (always false for an API key).
teamobject or nullrequiredThe team that owns the run, snapshotted from its template at start; null for an unowned run.
idstring (uuid)requirednamestringrequired
parent_run_idstring (uuid) or nullrequiredFor a sub-workflow run, the run that started it.
started_atstring (date-time)requiredupdated_atstring (date-time)requiredMoves on every change of state — poll on it with GET /api/v1/runs?updated_after=.
completed_atstring (date-time) or nullrequiredstarted_viastringrequiredapi (started through this API) | manual (in the app) | trigger (by an arrival trigger, e.g. an upload). More may be added.
current_stepobject or nullrequiredThe first open step at the run's current gate, while the run is active; null otherwise.
idstring (uuid)requirednamestringrequiredstatusstringrequiredawaiting"approval" | "completion" | "automation" or nullrequiredWhat the step waits on:
approval(a person's verdict),completion(a person marking it done),automation(the pipeline — an automated step, a gate or a sub-workflow); null while it is parked on an incident.
stepsarray of RunSteprequiredidstring (uuid)requiredThe template step's id (of the template version the run is pinned to).
namestringrequiredstatusstringrequiredpending | in_progress | submitted | approved | completed | failed | skipped | incident (more may be added).
incidentobject or nullrequiredSet while an active run is parked on a step that failed and waits for an operator to retry it or fail the run (in the app).
messagestringrequired
paramsobject (any keys) or nullrequiredThe run's launch parameters, as validated against the template's param_schema.
next_cursorstring or nullrequiredPass as
cursorto get the next page; null means this is the last page.
Other responses
- 401 unauthenticated — no key, or an unknown, revoked or expired one.
- 403 insufficient-scope — the key lacks a required scope.
- 404 not-found.
- 422 validation — a bad filter (
asset_id,workflow_id,status,updated_after),limitorcursor. - 429 rate-limited — the key's request budget is spent; wait Retry-After seconds.
- 500 internal.