GoRunner

List workflows in the active workspace

Requires scope workflow:read
GET
/api/workflows

Returns a page of workflows for the workspace the API token belongs to. Every row carries its full definition (the DRAFT tree), which makes this response large — a workspace of real flows is measured in hundreds of kilobytes. webhookToken is NEVER present on a list row (the column is not selected at all), so never read a webhook URL from here; use GET /api/workflows/{id} with workflow:run. hasUnpublishedChanges is likewise always false on a list row — it is only computed on the single-workflow read. Asking for a page past the end returns data: [] with the pagination block still filled in.

Authorization

bearerAuth
AuthorizationBearer <token>

An API token: Authorization: Bearer grt_…. Mint one in the app under Settings → Workspace → API tokens; the raw value is shown once. Scopes confine the token — see x-permission on each operation.

In: header

Query Parameters

page?integer

1-based page number. Values below 1 (and non-numeric values) are silently coerced to 1.

Range1 <= value
Default1
limit?integer

Rows per page. Anything outside 1..100 (including a non-numeric value) is silently coerced to 20.

Range1 <= value <= 100
Default20
q?string

Case-insensitive substring match against the workflow NAME or DESCRIPTION only — it does not search step names, tags or piece ids. % and _ are escaped, so they match as literal characters.

status?string

Filter by publication state. An unrecognised value is ignored rather than rejected (you get the unfiltered list, not a 400).

Value in

  • "draft"
  • "active"
  • "paused"
lastRunStatus?string

Keep only workflows whose MOST RECENT run ended in this state — a health filter, not "has ever had such a run". An unrecognised value is ignored rather than rejected.

Value in

  • "completed"
  • "failed"
  • "running"
  • "pending"
  • "cancelled"
  • "paused"
tag?string

Keep only workflows carrying this exact tag. Matching is case-SENSITIVE and exact (no substring); one tag per request — there is no multi-tag form. Discover legal values with GET /api/workflows/tags.

folder?string

Folder id to scope to, or the literal string none for workflows in no folder. Unlike the other filters this one is validated: anything that is neither a UUID nor none returns 400 VALIDATION_ERROR.

sort?string

name = name A–Z; status = paused first, then active, then drafts, each by name. Omitted or unrecognised = most recently updated first.

Value in

  • "name"
  • "status"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/workflows"
{  "data": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "name": "string",      "description": "string",      "definition": {        "schemaVersion": 2,        "trigger": {          "name": "string",          "displayName": "string",          "type": "manual",          "pieceId": "string",          "pieceVersion": "string",          "actionId": "string",          "config": {},          "connectionId": "string",          "valid": true,          "nextAction": {            "name": "string",            "displayName": "string",            "type": "PIECE",            "pieceId": "string",            "pieceVersion": "string",            "actionId": "string",            "config": {},            "connectionId": "string",            "valid": true,            "skip": true,            "nextAction": {},            "branches": [              {                "name": "string",                "conditions": [                  [                    {                      "field": "string",                      "operator": "text_eq",                      "value": null                    }                  ]                ],                "firstAction": {}              }            ],            "firstLoopAction": {},            "onErrorAction": {}          }        },        "settings": {          "timeoutSeconds": 0,          "errorWorkflowId": "51d8ee47-3646-4ae6-bc48-c85415c9166a",          "concurrencyLimit": 0,          "maintenanceMode": true,          "autoPublishFixes": true        },        "annotations": null,        "variables": {},        "pinnedData": {}      },      "status": "draft",      "triggerType": "manual",      "cronExpression": "string",      "webhookToken": "string",      "latestVersionId": "750445c5-7ad9-40bd-a593-bb37d7d846db",      "definitionRev": 0,      "hasUnpublishedChanges": true,      "folderId": "5b6379a4-2a6c-4085-b184-45838a3b8e7e",      "tags": [        "string"      ],      "testPayloads": {},      "pinnedData": {},      "workspaceId": "ef0efa32-d1c1-43d4-a5e2-fe7b4f00403c",      "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa",      "createdBy": "25a02396-1048-48f9-bf93-102d2fb7895e",      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z",      "lastRun": {        "status": "pending",        "startedAt": "2019-08-24T14:15:22Z"      }    }  ],  "pagination": {    "page": 0,    "limit": 0,    "total": 0,    "totalPages": 0  }}