# Call Workflow

Source: https://openflow.run/en/docs/nodes/workflow/
Language: en
Product version: 0.1.0-beta.77

Reuse another published workflow through its declared inputs and outputs.

Use Call Workflow to invoke an owned workflow with a published Start interface. The platform derives ports from the target’s published interface; callers do not reconstruct its internal graph.

## Select the target

```json
{
  "op": "node.add", "as": "greeting", "type": "workflow", "name": "Call greeting",
  "config": { "flowId": "TARGET_FLOW_ID" },
  "inputs": { "name": { "kind": "value", "value": "Ada" } }
}
```

The public type is `workflow`. Choose a target with the input fields your call supplies. A target without Outputs returns an empty business result.

## Saved interface

The node stores a snapshot of the selected target interface. Ordinary edits preserve it. Use `node.refresh` to load the target’s current published interface.

```json
{ "op": "node.refresh", "node": "CALL_NODE_REFERENCE" }
```

A new target Revision with the same named schemas and nullability remains callable without refreshing the caller. Changed interfaces require refresh. Field matching uses exact names; unresolved references remain visible for diagnostics.

Call Workflow passes a name to another workflow and exposes its declared business result.

**Input**
{"name":"Ada"}

**Expected result**
The called Flow's message output becomes this Flow's message result.

**Before running**
Select an owned, enabled, published Flow with the matching name/message interface, then refresh the node. The saved target IDs are illustrative.

[Download workflow](https://openflow.run/docs/examples/call-workflow.openflow.json)

## Runtime behavior

At execution, the deployment checks the target’s current enabled Live version and fixes a child Run. The caller receives the child’s declared business outputs after success. Child waiting remains part of the child’s Run; parent cancellation or failure cancels unfinished descendants.

Self-calls and recursive call chains are rejected. A Draft can retain an unavailable selection, but execution still requires an eligible published target. Call Workflow does not support the ordinary Task retry policy.

Agent and Code can also use explicitly declared workflow tools. See [Agent](https://openflow.run/en/docs/nodes/agent/index.md) and [Code](https://openflow.run/en/docs/nodes/code/index.md).

## Sources

*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#call-workflow)
*   [docs/architecture.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/architecture.md#workflow-calls)
*   [packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts)
