Start a Workflow
Use a background start when the parent should continue without waiting.
const started = await services.workflows.start("send-follow-up", {
customerId: context.payload.customerId
}, { name: "start-follow-up" });
return { childRunId: started.runId };The child is an independent durable run. Its later failure does not retroactively fail the parent. Parent cancellation does not automatically cancel an independently started child. Store or log the returned run ID when operators need to inspect the relationship.
Build fire-and-continue composition
const started = await services.workflows.start(
"send-follow-up",
{
customerId: context.payload.customerId,
orderId: context.steps.order.id
},
{ name: "start-order-follow-up" }
);
return {
accepted: true,
followUpRunId: started.runId
};start() waits for durable admission and dispatch, not child completion. It returns { workflowId, runId, duplicate }, then the parent continues.
Understand ownership
The child has its own runtime policy, history, final outcome, and cancellation. A later child failure does not rewrite an already successful parent result. Parent cancellation does not automatically propagate to an independently started child.
This makes start appropriate for notifications, asynchronous enrichment, media processing, or other work whose result is not required immediately.
Preserve operational traceability
Return or log the child run ID when people may need to investigate the relationship. The runtime records managed operation identity, but a business record often benefits from storing the child run ID beside its own job identity.
Use call() instead when continuing without the result would make the parent incorrect.