Call Process 🔄
Invokes another workflow as a child execution and waits for it to complete.
Node type: callProcess
Category: Flow Control
Actor: callProcess (2 threads)
Description​
The Call Process node starts a completely separate workflow (another process definition) and waits for it to finish before continuing the current workflow. The child workflow runs as a new process instance with its own processInstanceId.
Use Call Process to:
- Break large workflows into reusable sub-workflows
- Compose workflows from building blocks
- Reuse common flows (e.g., "Send Notification", "Create Customer Record") across multiple parent workflows
Call Process differs from Sub-Process: Call Process runs a separate, independently deployed workflow definition, while Sub-Process embeds the logic inline.
Properties​
| Property | Type | Required | Description |
|---|---|---|---|
targetProcessId | processDropdown | Yes | The workflow to invoke |
Data Passing​
The parent workflow passes its current execution variables to the child workflow as the data input. The child's output variables (the final data state when it reaches its End Event) are merged back into the parent workflow's variable scope.
Parent → Child​
All current parent variables are available in the child workflow:
Parent has: {customerId}, {orderTotal}, {items}
→ Child receives all of these as initial variables
Child → Parent​
When the child workflow completes, its final variable state is merged into the parent:
Child sets: {processedOrderId}, {trackingNumber}, {invoiceUrl}
→ Parent can now access {processedOrderId}, {trackingNumber}, {invoiceUrl}
If the child sets a variable that also exists in the parent, the child's value overwrites the parent's after completion.
Connections​
| Connection | Description |
|---|---|
sequenceFlow (incoming) | Arrives from parent workflow |
successFlow (outgoing) | Taken when child completes successfully |
errorFlow (outgoing) | Taken when child execution fails |
timeoutFlow (outgoing) | Taken if child exceeds the Call Process timeout |
Example: Reusable Notification Workflow​
Parent workflow:
[Process Order] → [Call Process: Send Order Notifications] → [Update Inventory]
Child workflow (Send Order Notifications):
[Start] → [Email: Order Confirmation to {customerEmail}]
→ [SMS: Shipping update to {customerPhone}]
→ [Slack: Alert to operations team]
→ [End]
The parent passes {customerEmail}, {customerPhone}, {orderId} to the child. The child sends all notifications independently. When complete, the parent continues to update inventory.
Child Execution Visibility​
The child process instance is a fully independent execution in the system:
- It appears in the Executions list with its own
processInstanceId - Its
parent_instance_idfield references the parent - All child node instances are viewable in the execution detail
- The parent instance is in "waiting" state while the child runs
Error Handling​
If the child workflow fails (any unhandled node failure):
- The Call Process node takes the
errorFlowif connected - The parent's
{_error}variable contains the child's error message - The child process instance is marked Failed
If no errorFlow is connected, the parent workflow also fails.
Timeout Configuration​
Set a timeout on the Call Process node to avoid waiting indefinitely for a stuck child:
{
"timeout": {
"duration": 5,
"durationUom": "MINUTES",
"action": "FAIL"
}
}
Best Practices​
- Use Call Process for reusable workflow segments used in 2+ parent workflows
- Name child workflows clearly (e.g., "Send Order Notifications", "Validate Customer Identity") — they appear in the designer dropdown
- Always connect
errorFlowto handle child failures gracefully - Set a timeout — if the child workflow has an Input Node waiting for human input, the parent will wait indefinitely without one
- For fire-and-forget (non-waiting) sub-process invocation, use a Service Task calling the
POST /process/execAPI instead