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

# Core Concepts

> Understand nodes, edges, events, variables, and output handles

## Nodes

A **node** is a single unit of work in a flow — playing audio, collecting input, making an API call, or branching based on a condition. Each node has:

* **Type** — A unique identifier (e.g., `startNode`, `ivrsMenuNode`)
* **Category** — Grouping for the node palette (System, Audio, Logic, Input, Integration, Utility)
* **Configuration** — Settings specific to that node type
* **Output handles** — Named exit points that connect to the next node

***

## Edges

An **edge** is a connection from one node's output handle to another node's input. Edges define the path a call takes through the flow. Each output handle can connect to exactly one target node.

***

## Output handles

Output handles are the exit points of a node. They appear as connectable ports on the right side of a node in the visual editor. Each handle represents a possible **outcome** — where the flow goes next.

For example, a **Transfer** node has three output handles:

* **Successful** — the call was connected
* **Timeout** — nobody picked up
* **Failed** — the transfer could not be completed

You connect each output handle to the next node that should run for that outcome. This is how you build branching logic in a flow.

### Static vs. dynamic handles

Some nodes have **static** handles — a fixed set of outputs defined by the node type (e.g., Condition always has `True` and `False`).

Other nodes have **dynamic** handles — outputs that change based on configuration:

* **IVR Menu** creates a handle for each DTMF key option you configure
* **Switch** creates a handle for each case plus a default
* **Percent Routing** creates a handle for each route

***

## Variables

Variables store data that persists across nodes within a single call. They're used to:

* Store caller input (digits, speech transcripts)
* Save API response data
* Track loop counters
* Pass context between nodes

### Setting variables

Use the [Set Variable](/guides/flows/nodes/set-variable) node to set values from static text or expressions. Many nodes also automatically set output variables — for example, [Collect Digits](/guides/flows/nodes/collect-digits) stores the collected digits in a variable.

### Referencing variables

Reference variables in text fields using double curly braces:

```
Hello {{customer_name}}, your account balance is {{balance}}.
```

***

## Output variables

Certain nodes produce **output variables** — structured data that downstream nodes can reference. For example:

| Node           | Output variables                 |
| -------------- | -------------------------------- |
| Collect Digits | `digits`, `digit_count`          |
| Speech Input   | `transcript`, `confidence`       |
| API Call       | `body`, `status_code`, `headers` |
| Database       | `rows`, `row_count`              |
| Play Audio     | `duration`                       |
| AI Agent       | `transcript` (array)             |
| Transform      | `result`                         |
