GoRunner

Recent test runs and one run's per-step outputs, for expression mapping

Requires scope workflow:read
GET
/api/workflows/{id}/test-context

Answers "what real data can I write expressions against?" for the whole workflow at once.

snapshots lists up to 10 recent MANUAL runs (triggerType: "manual", which is what a test run of this workflow records). Production traffic is deliberately excluded here — no webhook or cron payload can leak into the builder through this endpoint. For a per-step picker that DOES span production, use GET /api/workflows/{id}/step-sources.

active carries one of those runs expanded: nodes is a map keyed exactly the way expressions resolve — "trigger" holds the run's trigger data ({{trigger.…}}) and every other key is a step's nodeId holding that step's output ({{steps.<nodeId>.…}}). Only steps that COMPLETED with output appear. Values under secret-looking keys are redacted.

active is null when the workflow has no manual runs at all.

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

Path Parameters

id*string

Workflow id (UUID).

Formatuuid

Query Parameters

snapshot?string

Expand this run id instead of the most recent. Silently ignored (falls back to the newest run) if it is not a UUID or is not one of the runs listed in snapshots.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/workflows/497f6eca-6276-4993-bfeb-53cbbbba6f08/test-context"
{  "data": {    "snapshots": [      {        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",        "status": "pending",        "startedAt": "2019-08-24T14:15:22Z",        "source": "run"      }    ],    "active": {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "nodes": {}    }  }}