One step's recorded output from one past run
workflow:readReturns the output the named step produced in that run — or the run's trigger payload when step addresses the trigger. Large payloads that were offloaded to object storage are rehydrated transparently.
"No data" is a 404, not an empty object. A caller must be able to tell "this run has nothing for that step" apart from "this step genuinely returned {}", so the empty case is refused rather than answered with a value that would silently mislead a mapping tree.
Values under secret-looking keys are redacted before the payload leaves the server.
Note the shape: the payload sits at data.data — the outer data is the success envelope, the inner data is this endpoint's own field name.
Authorization
bearerAuth 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
Workflow id (UUID).
uuidThe run to read from. Ownership is enforced inside the query by workspace AND workflow, so a run id belonging to another workflow or tenant resolves to nothing (404) rather than to data.
uuidQuery Parameters
The step's stable name, or trigger (or the trigger's own name). Required.
1 <= lengthResponse Body
application/json
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/step-sources/497f6eca-6276-4993-bfeb-53cbbbba6f08?step=string"{ "data": { "data": null }}