--- title: 'Return Value' description: 'Send a value back up to the parent workflow that called this one.' --- # Return Value In a workflow that's run by an [**Execute Workflow**](/nodes/execute_workflow) node in another workflow, this node designates the value handed back to the parent. It's the sub-workflow equivalent of a `return` statement — the parent's Execute Workflow node receives exactly what you put here. ## When to use - You've factored logic into a sub-workflow and the parent needs its **result** — a computed score, an enriched object, a yes/no decision. - Any "call this sub-workflow and use what it gives back" pattern. ## Configuration | Field | Required | What it does | |---|---|---| | `value` | No | The value returned to the parent. JSON or text; supports `{{...}}` refs, so you can return data computed earlier in the sub-workflow. Blank = the upstream node's output. | If `value` is a JSON string it's returned as a parsed object; otherwise it's returned as-is. ## How the parent reads it The parent's Execute Workflow node exposes it as `output`: ``` Parent workflow: [Trigger] → [Execute Workflow → "score player"] → [If: {{execute_workflow.output.risk}} == "high"] "score player" sub-workflow: [Trigger] → [API calls…] → [Return Value] value: { "risk": "high", "score": 82 } ``` The parent reads `{{execute_workflow.output.risk}}` — a clean, documented value. ## What it outputs ``` { returnValue: } ``` Return is **terminal** — it has no outgoing connection; the branch ends there. ## Gotchas - **Without a Return node**, the parent's Execute Workflow still gets *something* — the sub-run's raw execution record — but not a clean designated value. Add a Return node whenever the parent needs a specific result. - **Last one wins.** If more than one Return node runs (e.g. across branches), the last to execute sets the value. - **Only meaningful when called as a sub-workflow.** In a normally-triggered run there's no parent to receive the value — it's simply recorded and ignored.