Run another registered workflow as a single task. The parent waits for the child to complete and reads its output. Useful for splitting large workflows into reusable units.
If you want fire-and-forget instead — parent does not wait — use
START_WORKFLOW.
Two registered workflows: child_normalize (reusable) and parent_pipeline (composes the child).
child_normalizeSee workflows/child-normalize.json. Takes a raw payload, returns a normalized object.
parent_pipelineSee workflows/parent-pipeline.json:
{
"name": "normalize",
"taskReferenceName": "normalize",
"type": "SUB_WORKFLOW",
"subWorkflowParam": { "name": "child_normalize", "version": 1 },
"inputParameters": {
"payload": "${workflow.input.raw}"
}
}
The child’s outputParameters become the SUB_WORKFLOW task’s output:
${normalize.output.normalized}
# Register both — child first
conductor workflow create examples/workflows/child-normalize.json
conductor workflow create examples/workflows/parent-pipeline.json
conductor workflow start -w parent_pipeline -i '{"raw": {"name": "ALICE", "email": "ALICE@EX.COM"}}'
version in subWorkflowParam for stability. Omitting it picks the latest, which can break parents silently when the child is updated.subWorkflowParam.name from input or use START_WORKFLOW.