Subworkflow
Calls another workflow as a step in the current workflow. The target workflow runs synchronously — the parent workflow pauses, the subworkflow executes, and the parent resumes with the result.
Use Subworkflow when:
- You want to reuse logic shared across multiple workflows
- A workflow has grown too large and you want to split it into composable pieces
- You want to call a standalone workflow from within a larger pipeline
The target workflow must have a Manual Trigger with allowWorkflowInvocation enabled.
| Handle | Type | Description |
|---|---|---|
input | any | Data passed to the subworkflow's trigger payload. |
| Handle | Type | Description |
|---|---|---|
result | any | The value returned by the subworkflow's Return node. |
The result is accessed as {{ subworkflow.result }} in the parent workflow.
| Setting | Type | Description |
|---|---|---|
workflowId | string | The ID of the workflow to call. Paste it from the target workflow's URL. |
The target workflow must:
- Use a Manual Trigger node as its entry point
- Have
allowWorkflowInvocationenabled on the Manual Trigger node - Include a Return node at its exit point with the value to return
Parent workflow that validates and enriches data using two separate subworkflows:
Webhook → Subworkflow (validate-user-wf) → Subworkflow (enrich-profile-wf) → Send Email
validate-user-wf structure:
Manual Trigger → HTTP Request (call auth service) → If (user active) → Return (user data)
→ Stop
Access the subworkflow's output in the parent:
{{ subworkflow.result.email }}
{{ subworkflow.result.plan }}
- Target must have Manual Trigger: If the target workflow uses a Webhook or API Endpoint trigger, calling it as a subworkflow will fail at runtime.
- Circular calls: Do not call workflow A from workflow B if workflow B is already called from A. Circular subworkflow chains will hit a recursion limit.
- Error propagation: If the subworkflow fails (a node throws, no Return fires), the parent workflow will fail at the Subworkflow node.
- Manual Trigger — configure the target workflow's entry point
- Return — return a value from the subworkflow
