Approval — Input & Output
Output port reference, decision data schema, and data flow examples for the Approval node.
Output Ports
The Approval node exposes six output ports. Exactly one port fires per execution instance. Downstream nodes connected to a given port receive the node's output data object automatically.
| Port | Fires When | Output Data Available |
|---|---|---|
| waiting | Immediately after Phase 1 — the approval request has been created and the workflow is now suspended. This port fires synchronously before the suspension takes effect. | No decision data. Only the session_id of the created EngageSession is available. |
| approved | An actor submitted an Approve decision. In single-approval mode, fires as soon as the first actor approves. In multi-approval mode, fires only after all actors have approved. | Full decision data object (see schema below). |
| rejected | An actor submitted a Reject decision. In multi-approval mode, fires immediately on the first rejection regardless of other actors. | Full decision data object including rejection comments. |
| escalated | An actor explicitly escalated, OR the timeout_minutes period elapsed without a response. |
Full decision data object. If timeout-triggered, approver_id will be null and decision will be "timeout". |
| abstained | An actor submitted an Abstain decision. | Full decision data object. comments typically contains the actor's reason for abstaining. |
| error | A system-level error occurred — for example, the actor list resolved to empty, or the EngageSession could not be created. | Standard error object with error_message and error_code. |
Output Data Schema
On ports approved, rejected, escalated, and abstained, the following data object is available to downstream nodes as the node's output:
| Field | Type | Description |
|---|---|---|
approver_id |
string | null | The user ID of the actor who submitted the decision. Null when timeout-triggered escalation occurs. |
actor_name |
string | null | Display name of the approver (resolved from the user directory). Null on timeout escalation. |
decision |
string | The decision submitted. One of: "approved", "rejected", "escalated", "abstained", "timeout". |
decision_time |
datetime (ISO 8601) | UTC timestamp of when the decision was submitted. For timeout escalation, this is the time the timeout fired. |
comments |
string | null | Free-text comments provided by the approver at decision time. May be null if the actor did not add a comment. |
session_id |
string | The EngageSession identifier created during Phase 1. Useful for audit trail lookups. |
Output Data Example
JSON output available to downstream nodes when the approved port fires:
{
"approver_id": "user:jdoe-001",
"actor_name": "Jane Doe",
"decision": "approved",
"decision_time": "2025-03-14T09:22:34Z",
"comments": "Approved — within quarterly budget allocation. Please proceed.",
"session_id": "engage-sess-8f3a2c91"
}
JSON output when the rejected port fires:
{
"approver_id": "user:cfo-mbrown",
"actor_name": "Michael Brown",
"decision": "rejected",
"decision_time": "2025-03-14T10:05:18Z",
"comments": "Rejected — vendor not on approved supplier list. Please use vendor ABC Corp.",
"session_id": "engage-sess-8f3a2c91"
}
JSON output when the escalated port fires due to timeout:
{
"approver_id": null,
"actor_name": null,
"decision": "timeout",
"decision_time": "2025-03-14T14:00:00Z",
"comments": null,
"session_id": "engage-sess-8f3a2c91"
}
Accessing Output in Downstream Nodes
Use the following expression syntax to access Approval node output in subsequent nodes. Replace approval_po_review with your node's ID:
// Access decision
$nodes.approval_po_review.decision
// Access who approved/rejected and when
$nodes.approval_po_review.approver_id
$nodes.approval_po_review.actor_name
$nodes.approval_po_review.decision_time
// Access comments for rejection notification
$nodes.approval_po_review.comments
// Store in workflow variable
$var.approval_result = $nodes.approval_po_review.decision
Data Flow Example
A typical purchase order approval workflow data flow:
approver_id, decision_time, comments from Approval output$nodes.approval_po_review.actor_name and $nodes.approval_po_review.comments