core.execute_workflow

Execute Workflow (core.execute_workflow)

Call another workflow like a function: input items become the child's trigger items, and (in wait mode) the child's final output becomes this node's output. Compose big automations from small, testable pieces.

Parameters

ParameterTypeDefaultDescription
workflow_idpickerThe child workflow (same environment). The picker lists what you're allowed to see.
modewait | fire_and_forgetwaitwait: run the child and continue with its output. fire_and_forget: enqueue it and pass your input through untouched.

Behavior

The child should start with a Sub-workflow trigger — your items arrive there verbatim, binary attachments included. In wait mode the child runs inline, gets its own execution row (linked to the parent — the executions page shows the parent → child relationship, child rows badged "sub"), and its successful leaf-node items come back as this node's output. If the child fails, this node fails with the child's execution id in the error details.

fire_and_forget enqueues the child as an independent run (it gets live events and its own error-workflow handling) and immediately passes your input through.

Quirks & tips

  • Recursion is guarded: cycles are refused, and nesting deeper than 3 levels fails with a clear error.
  • Same environment only — a workflow id from another environment reads as "not found".
  • Deleting a child workflow later makes this node fail at run time; the save-time validator only catches ids that never existed.
  • An imported n8n executeWorkflow node lands here with an empty workflow id — n8n ids don't transfer; re-pick the child (the import report reminds you).
  • Child runs respect their own limits, but the parent's max_duration wall clock keeps ticking while it waits.

Related

  • Sub-workflow trigger — the child's entry point.
  • Error trigger — a workflow-level catch for failing children run in fire_and_forget.
  • Loop Over Items — call a child per batch.