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

# Understand flow execution

> Use runtime behavior to diagnose branching, waiting, and incomplete responses.

A flow processes a conversation turn by following connected nodes. Conversation nodes can generate a response; other nodes can assign values, evaluate conditions, perform actions, provide filler, or end the conversation.

## Why one message can visit several nodes

A visitor's answer may lead through Extraction, Logic, and a Tool before the next Conversation response. This is expected when the steps are connected. A branch that loops through processing nodes without a conversational pause can exhaust the turn's transition budget.

Keep each turn's path short and provide a recovery destination. When diagnosing a pause, look for an unwired branch or an action that has not returned before changing the model.

## Streaming responses

The editor receives a stream of structured updates from the flow runtime. It handles text, filler, discarded partial text, tool details, completion state, and errors. Discarded partial text means the runtime changed which response should be shown; it is not a second message to deliver to the visitor.

If building your own client, use the current integration contract and handle completion and errors as well as text. Do not derive an API contract from the labels displayed by the editor.

## Bounded work per turn

The runtime limits node transitions and repeated tool rounds and trims retained history. HTTP requests also have a timeout. These bounds prevent a single turn from running indefinitely; they are not a target for flow design or a promise that an external write was canceled.

For long-running work, design an explicit acknowledgement and a completion path supported by the integration. Keep the next conversational step independent of any result that is still pending.

## Draft versus published behavior

The editor test runs the draft. An assigned assistant uses a published flow. Saving a change is not sufficient to update that assistant: publish the flow, then verify the actual assistant channel.

## Diagnose a failure

* **Conversation stops at a condition:** inspect branch connections and the default destination.
* **Repeated transitions:** simplify the loop and add a question or clear exit.
* **Action times out:** check the external system before retrying a write.
* **Earlier details disappear:** store required information in explicit variables or your CRM rather than relying only on retained conversation history.

See [testing](/v3/guides/flows/test), [Request nodes](/v3/guides/flows/api-requests), and [variables](/v3/guides/flows/variables).

## Runtime limits

These are execution bounds, not configurable editor settings or delivery guarantees.

| Limit | Current behavior |
| - | - |
| Node transitions | Up to 10 processing iterations in a turn. Break loops with a conversational pause or a clear exit. |
| Tool rounds | Up to 5 model/tool rounds in a conversation step. |
| Retained history | Capped at 40 entries, then repaired to keep valid tool-call pairs. Stored counters based on history are not lifetime totals. |
| Model request | 30-second timeout per model attempt. Retries or fallback can extend total turn duration. |
| Direct HTTP request | 10-second request timeout. A timeout does not undo an external write. |
| Initialization webhook | Editor offers 500–30,000 ms; default 3,000 ms. Runs when initializing a fresh session. |
| Background tool callback | Signed callback expires after 30 minutes when callback support is configured. |

## End Convo settings

| Control | Behavior and constraints |
| - | - |
| Name | Identifies the end node in test details and the end webhook. |
| Static end message | Literal closing text returned when the end node runs. Variable placeholders are currently not substituted in this field. |
| Send end message / Prompt mode | These controls are visible, but runtime currently uses the stored Static text regardless of mode. Clear the Static field to end without that message. For a generated or personalized closing, use a Conversation node before End Convo. |
| Generate with AI | Edits the selected end-message field; review the text. It does not make Prompt mode execute at runtime. |
| Webhook on end | Off by default. Enable and enter a reachable URL to send a JSON POST after the node ends the conversation. |
| Webhook headers | Additional header name/value pairs. URL and header values are used literally, without variable substitution. |

The webhook body contains `event` (`conversation.ended`), `flow_id`, `session_key`, `end_node_id`, `end_node_label`, `variables`, `history`, and `summary`. Summary contains `total_messages`, `total_turns`, `nodes_visited`, and `ended_at`. Counts reflect retained history; `ended_at` is an ISO timestamp. The webhook is sent without waiting for delivery, so inspect the receiver and make its processing safe to retry.

An end node is separate from the [call lifecycle webhooks](/v3/guides/call-results/webhooks). Ending a flow does not itself establish delivery of either webhook.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.