Skip to main content
Fetch the status, progress, and node-level detail for a single workflow run. By default the response includes the run header, aggregate progress, and only the map/reduce nodes worth watching while a run is in flight. Flags widen the disclosure to every node and to full step payloads. Use clay workflows runs steps for the flat list of individual execution steps.
clay workflows runs get <workflowId> <runId> [--nodes] [--verbose] [--node-id <id>]

Arguments

ArgumentDescription
workflowIdWorkflow id, e.g. wf_abc123. Required.
runIdRun id, e.g. wfr_xyz789. Required.

Flags

FlagDescription
--nodesInclude every workflow node in nodes, not just map/reduce nodes.
--verboseImplies --nodes. Adds per-node inputs, outputs, parameter mappings, and map/reduce entry steps.
--node-id <id>Only include the node with this workflow node id, with full map/reduce results.

Output

{
  "runId": "wfr_xyz789",
  "workflowId": "wf_abc123",
  "workflowName": "Lead enrichment",
  "status": "running",
  "startedAt": "2026-06-01T00:00:00Z",
  "duration": "4m 10s",
  "dataCreditsUsed": 12,
  "actionCreditsUsed": 3,
  "progress": {
    "completed": 8,
    "active": 1,
    "waiting": 0,
    "failed": 0,
    "pending": 2,
    "paused": 0,
    "total": 11,
    "percentage": 72
  },
  "totalEntrySteps": 40,
  "nodes": [
    {
      "stepId": "step_1",
      "nodeId": "node_3",
      "nodeName": "Enrich companies",
      "status": "waiting",
      "startedAt": "2026-06-01T00:01:00Z",
      "completedAt": null,
      "duration": "3m 5s",
      "waitingReason": "map_reduce_processing",
      "mapReduce": {
        "dataListId": "dl_1",
        "totalEntries": 40,
        "successCount": 30,
        "failedCount": 1
      },
      "entryProgress": {
        "total": 40,
        "completed": 30,
        "failed": 1,
        "active": 4,
        "waiting": 0,
        "pending": 5,
        "percentage": 75
      }
    }
  ]
}
duration is a human-readable string like "2h 3m", "4m 10s", or "12s". error is present only when status is "failed".

Top-level fields

FieldTypeDescription
runIdstringRun id.
workflowIdstringWorkflow the run belongs to.
workflowNamestring | nullWorkflow display name, or null.
statusenumpending, running, paused, waiting, completed, or failed.
startedAtstringWhen the run started.
durationstringHuman-readable elapsed time.
errorstringPresent only when status is failed.
dataCreditsUsednumberData credits consumed by the run.
actionCreditsUsednumberAction credits consumed by the run.
progressobjectAggregate node counts: completed, active, waiting, failed, pending, paused, total, percentage.
totalEntryStepsnumberTotal map/reduce entry steps across the run.
nodesarrayPer-node summary. Contents depend on the disclosure level (see below).

Disclosure levels

Each level is a superset of the one above it.
Levelnodes contents
(default)Only map/reduce nodes — the long-running ones worth watching. Regular nodes are counted in progress but omitted from nodes.
--nodesEvery workflow node, without step payloads.
--verboseImplies --nodes. Adds per-node inputs/outputs (full, untruncated payloads — can be very large), nodeType, nextNodes, mappedParameters, parameterSources, and entrySteps on map/reduce nodes.
--node-idJust the matching node, with its full map/reduce results inlined. Combine with --verbose to add that node’s payloads too.

Node object

Each entry in nodes carries stepId, nodeId, nodeName, status, startedAt, completedAt, duration, and optional errors. waitingReason appears only when the node is waiting. mapReduce and entryProgress appear only on map/reduce nodes. mapReduce reports fan-out statistics: dataListId (always present) plus optional totalEntries, totalCount, successCount, failedCount, totalKeys, keyCount, batchSize, tokensUsed, creditsUsed, resultCount, sourceDataListId, errorDetails, and the flags autoGathered, emptyInput, and emptyReduce. The results array is inlined only with --node-id. entryProgress reports total, completed, failed, active, waiting, pending, and percentage. With --verbose, map/reduce nodes also include entrySteps, an array of { stepId, status, nodeName, entryMetadata?, output?, errors? } where output is truncated to 200 characters.

waitingReason values

map_reduce_processing, waiting_in_queue, agent_tool_execution, tool_execution_pending, claygent_execution_pending, code_execution_pending, wait_timer, workflow_paused, agent_step_limit_reached, unknown.

Archived runs

If the server returns an archived record for an old run, the output is { "runId": <string>, "archived": true, "logUrl": <string> } instead. Today the server reports archived runs as not_found, so expect that error for old runs.

Errors

CodeExitNotes
validation_error2workflowId and runId arguments are required.
not_found6No run with that id under that workflow, or the run’s details have been archived server-side.
auth_forbidden3The API key lacks the terracotta:cli scope.

Examples

clay workflows runs get wf_abc123 wfr_xyz789 | jq -r '.status'
clay workflows runs get wf_abc123 wfr_xyz789 | jq '.progress'
clay workflows runs get wf_abc123 wfr_xyz789 --nodes | jq -r '.nodes[] | select(.status == "failed") | .nodeId'
clay workflows runs get wf_abc123 wfr_xyz789 --node-id node_3 | jq '.nodes[0].mapReduce.results'
until [ "$(clay workflows runs get wf_abc123 wfr_xyz789 | jq -r '.status')" != "running" ]; do sleep 5; done