What a run is
A run is one end-to-end execution of an automation against a single contact (or a single inbound event). When an automation activates — by manual trigger, webhook, date schedule, or upstream workflow — the orchestrator opens a WorkflowRun row, walks the graph, and updates that row as each node completes.
Run history is the source of truth for the question “did this automation actually run for this contact, and what did it do?” — at /runs in the workspace nav, under Operate.
Runs vs deliveries
Runs and deliveries are sibling surfaces, not the same thing. They sit next to each other under Operate because operators reach for them at different moments.
| Surface | Grain | Reach for it when… |
|---|---|---|
| Run history (/runs) | One row per automation execution. | You want to know whether an automation actually ran, which branch it took, and where it stopped. |
| Delivery ops (/delivery-ops) | One row per outbound message attempt. | You want to know whether the recipient actually received a specific message. |
A single run can produce zero, one, or many delivery attempts depending on how the graph branches. Conversely, a manually-resent message creates a delivery attempt with no parent run. Both views link to each other where the relation exists.
Run lifecycle
| Status | Meaning |
|---|---|
| PENDING | Trigger fired, run queued for the orchestrator. |
| RUNNING | Walking nodes; some steps still in flight. |
| COMPLETED | Reached an END node cleanly. |
| FAILED | Halted by a STOP_ERROR node, a node threw, or validation failed mid-flight. |
| CANCELED | Operator cancelled the run, or the parent automation was deactivated. |
Filtering & search
- Status chips at the top of the table — All / Running / Completed / Failed / Canceled.
- Workflow filter — scope to one automation, or leave blank for workspace-wide.
- Contact filter — paste a contact email/phone to see only their runs.
- Date range — last 24 h / 7 d / 30 d, or custom.
Drilling into a run
Clicking a row opens the run detail. You'll see:
- The full step trace — every node visited, the order, and the duration of each step.
- For SEND_MESSAGE steps, a link to the resulting DeliveryAttempt row (so you can jump to delivery status and the provider response).
- For INTEGRATION steps, the request/response payload (redacted secrets) and any captured fields written into the per-step output bag.
- The error field on FAILED runs — populated from a STOP_ERROR message or the raw exception.