> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# End

> Closes a workflow route with a declared output so the workflow that called it can continue from there

The **End** node closes a route in the workflow and ties it to an **output** you declare. When another workflow calls this one with the [Workflow](/en/guides/nodos/workflow) node, that output becomes a connectable route in the parent workflow: the parent knows how the child ended and continues down the matching branch.

<Note>
  A workflow does not need End nodes to work. If you declare no outputs, the workflow ends as it always did and the Workflow node that calls it keeps behaving as a plain jump.
</Note>

## What an output is

An output is the workflow's termination contract. Each output has:

| Field            | What it is for                                                                   |
| ---------------- | -------------------------------------------------------------------------------- |
| **Name**         | The output's technical identifier (for example, `payment_approved`).             |
| **Display name** | The text shown on the End node and on the parent's Workflow node.                |
| **Description**  | Explains when this output is taken. It is shown in the End node panel.           |
| **Type**         | **Success**, **Error** or **Neutral**. Sets the color of the route and the node. |
| **Schema**       | The variables the workflow returns to the parent through this output.            |

### Output types

<CardGroup cols={3}>
  <Card title="Success" icon="circle-check">
    The route ended as you expected.
  </Card>

  <Card title="Error" icon="circle-xmark">
    The route ended in a controlled failure.
  </Card>

  <Card title="Neutral" icon="circle-minus">
    The route ended in an outcome that is neither success nor error.
  </Card>
</CardGroup>

## Create an output

<Steps>
  <Step title="Open the output manager">
    On the workflow canvas, open the top bar menu and choose **Output manager**. You can also do it from the End node itself: if the workflow has no outputs yet, its panel shows the **Create output** button.

    You need write permission on the canvas to see it.
  </Step>

  <Step title="Fill in the general data">
    Write the name, the display name and the description, and pick the output type (**Success**, **Error** or **Neutral**).
  </Step>

  <Step title="Define the schema">
    Add one field per value the workflow returns: the **variable** is the key the parent will read, and the **name** is its label. You can also paste a sample JSON and generate the schema from it.
  </Step>

  <Step title="Save">
    The output becomes available to every End node in the workflow and shows up right away on the Workflow nodes that reference it.
  </Step>
</Steps>

## Use the End node on the canvas

<Steps>
  <Step title="Drag the node">
    In the node panel, open the **End** group and drag the node onto the canvas.
  </Step>

  <Step title="Pick the output">
    Click the node to open its panel and select one of the declared outputs. The node takes the color and the title of that output's type — **Success**, **Error** or **Neutral** — and shows its display name. While no output is selected, it shows as **End**.
  </Step>

  <Step title="Connect the route">
    Connect every branch that should finish with that output to the End node. Several End nodes can point to the same output.
  </Step>
</Steps>

The End node also includes **Data Loss Prevention (DLP)** settings to mask sensitive information in the logs it generates.

## Consume the outputs from the parent workflow

When a workflow declares outputs, the [Workflow](/en/guides/nodos/workflow) node that references it draws them as connection points, one per output:

* **Connect each output** to the matching branch in the parent workflow.
* **The schema variables** become available in the parent's variable picker as `$memory.response.<variable>`. For example, a schema with the variable `total` is read as `{{$memory.response.total}}`.

<Tip>
  Declare one output per outcome the parent workflow needs to tell apart. If the parent only needs to know that the child finished, a single neutral output is enough.
</Tip>

## Delete an output

Before deleting, the platform checks whether any workflow in the project has that output connected on its Workflow node:

* **If one does, the deletion is blocked.** The error names the workflows that have it connected: disconnect the route in each one and try again.
* **If none does**, the output is deleted along with the End nodes that had it selected and the routes that reached them.

<Note>
  The check looks at the connection, not the reference: a Workflow node pointing at this workflow but with that output unconnected does not block the deletion.
</Note>

If the deletion fails, the End nodes are kept and the workflow stays as it was.

## Test the workflow from the Tester

When the Workflow node has connected outputs, the child workflow runs **inside** the parent's execution: the parent waits for it to finish and continues down the output the child took. In the [Tester](/en/guides/getting-started/tester) this shows up in two ways:

* Your replies are sent to the child workflow while it is running.
* The node does not show the **"Go to workflow"** button or the execution start separator, because there is no separate execution to go to.

A Workflow node with no connected outputs behaves as always: it redirects the flow, and the Tester still shows the button to open the target workflow.
