All nodes/Input / Output/Boundaries
Exit
Workflow exit point. Receives the final result and returns it to the user (or as an API response). The optional files input (PT_FILE, multiple refs) returns files along with the response: external/webdav links are downloaded into the system store, files already ours are passed through without rewriting, and shown in chat (image/audio/attachment). There must be at least one. Supports response streaming. Has no exec_out.
Type in the graph: exit
Exec
Ports can be split into separate execution and data handles.
Try it
Model answer with a fallback error text
The exit returns the answer to the chat and replaces the platform message when the run fails.
- Execute + Data
- LLM
- Execute + Data + Streaming
Runs as pasted
When to use it
The exit is what the workflow returns: a chat reply, the response to an API call, a Telegram message. It is mandatory, and in the overwhelming majority of graphs there is exactly one of them — every branch converges on it instead of carrying its own.
How it works
The value arrives on the end port, and streaming travels the same way, which is why a model’s
answer prints in the chat as it is generated. When “Output Expression” is non-empty it replaces
the incoming value entirely: useful when the workflow is called over the API and the answer has to
be assembled from several nodes ({{ nodes.answer.output }}), harmful when the field was filled in
“just in case” — edits upstream then stop affecting the answer.
The files port returns files alongside the answer. It accepts several edges; external links and
WebDAV files are downloaded into the workspace file store (where the Files tab shows them), while
files already stored there are passed through without copying. In chat they render as an image, a
player or an attachment.
“Error message” fires only on an unhandled failure — when the failing node had no on_error
branch to take. The template can use {{ error }}, {{ failed_node_id }} and
{{ failed_node_type }}; an empty field means the platform’s default message. With several exits,
the text is taken from the one that actually ran in this execution.
The node has no execution output: nothing follows an exit.
Common mistakes
- One exit per parallel branch. Two exits live in the same run are an
exec.multi_exit_raceerror at the run and deploy gate (a warning while you are still editing). Both write the result, the last one in the graph’s node order wins, and in chat only the one that spoke first is shown. Merge the branches into a single exit, through wait_all if they run in parallel. Separate exits are legitimate only for mutually exclusive branches — the arms of one if or switch. - An exit reached only by a data edge. It never runs, and the execution ends with an empty
result. The validator catches this as
graph.exit_no_exec_trigger: an execution edge is required along the whole path from the entry. - Expecting a message when there is nothing to say. An empty value on
endis not sent to the chat at all — and that is not an error: the run status stayscompleted.
Inputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Messageend | Execute + Dataexecute_data | — | Final value returned to the user. Overridden by the Output Expression field when that is non-empty. |
Filesfiles | Datadata | file | Files returned alongside the answer. accepts many edges |
Outputs
—
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
Error messageerror_text | string | "" | Text written to the chat when the workflow raises an unhandled exception. Leave empty to use the platform default message. supports templates |
Output Expressionoutput_mapping | string | "" | Expression producing the final output, e.g. {{nodes.llm_1.output}}. When non-empty it REPLACES whatever arrives on the End port; leave it empty to return the End value as-is. supports templates |
Shared fields
Every node has these three — the platform adds them, not the node author.
split_ports_in— Show separate execution and data input handles instead of one combined port.split_ports_out— Show separate execution and data output handles instead of one combined port.