--- title: 'If/Else' description: 'Evaluates a comparison and routes execution to the Yes or No branch.' --- # If/Else Evaluates `field value` and routes execution to one of two outgoing handles: - **Yes** (`true`) — the condition was true. - **No** (`false`) — the condition was false. Only one branch executes; the other is skipped entirely. ## When to use - Gate a side-effect on a business rule ("If amount > $1000, send to manager approval, otherwise auto-approve"). - Pick one of two follow-up paths. - Any classic "if-then-else" split. If you have more than two outcomes, use **Switch** instead. ## Configuration | Field | Required | What it does | |---|---|---| | `field` | Yes | The value to evaluate. Supports `{{...}}` refs. | | `operator` | Yes | Comparison operator (see below). | | `value` | — | The value to compare against. Required for all operators except `exists`. Supports `{{...}}` refs. | ### Available operators | Operator | Meaning | Example | |---|---|---| | `eq` | Equals | `{{trigger.data.country}} eq "US"` | | `neq` | Not equals | `{{trigger.data.status}} neq "cancelled"` | | `gt` | Greater than | `{{trigger.data.amount}} gt 1000` | | `lt` | Less than | `{{trigger.data.age}} lt 18` | | `gte` | Greater than or equal | `{{trigger.data.score}} gte 80` | | `lte` | Less than or equal | `{{trigger.data.retries}} lte 3` | | `contains` | Substring/element match | `{{trigger.data.tags}} contains "vip"` | | `exists` | Field is present and non-null | `{{trigger.data.refund_id}} exists` | Numeric operators automatically coerce numeric strings (so `{{trigger.data.amount}}` working with `"99.99"` and `99.99` both compare correctly). ## What it outputs Nothing is written to the context — this is a routing node, not a data node. ## Gotchas - **Empty string vs missing field**: `eq ""` matches an empty string, `exists` is false for both missing and null. Pick the right one for your check. - **Case-sensitive string comparisons**: `eq "US"` does not match `"us"`. Normalize casing upstream (with Transform) if needed.