A workflow is a visual diagram of nodes connected by arrows. Triggers start runs, logic nodes shape the flow, and action nodes do the work. You build it, save it, and Rills handles execution, retries, and versioning.
#Node categories
There are three categories: triggers (start a run), logic (shape control flow), and actions (do work).
#Triggers
| Node | When it fires |
|---|---|
| Manual Trigger | You click “Run” in the builder. |
| Schedule | A cron schedule. Timezone-aware (defaults to UTC). |
| Webhook | An external system POSTs to a unique URL. See Webhooks . |
| Integration Event | A connected integration emits an event (Gmail message, Stripe charge, Slack message, etc.). Pick the integration and the event in the node config. |
| Data Change | A row is added to a workspace table, or a bound form is submitted. |
| Inbound Email | An email arrives at your workflow’s inbound address. |
A workflow can have multiple triggers: Manual Trigger plus Schedule plus Webhook can all be active at once. Triggers cost 0 credits. See Triggers for the full setup of every trigger type.
#Logic
| Node | What it does |
|---|---|
| Condition | Branch based on rules. Each branch evaluates a field with an operator (Equals, Contains, Greater Than, Is Empty, etc.). Compound rules supported with AND/OR. |
| Loop | Iterate over a collection. Configure the items expression, item/index variable names, optional max iterations, concurrency for parallel iteration, and batching. |
| Delay | Pause for a duration (“2 hours”), until a specific time, until a variable resolves, or for a relative period (business days, calendar days, weeks). Free. |
| Human Review | Pause for human review. See Modes & Confidence for full config. |
| Any (First) | After a branching split, continue as soon as one branch finishes. Optionally cancel the rest. |
| All (Wait) | After a branching split, wait for every branch. Pick a failure mode: Fail Fast, Collect Errors, or Partial Success (configurable minimum success count). |
#Actions
| Node | What it does |
|---|---|
| AI | Call a language model with a prompt. Configurable model, temperature, max tokens, output mode (text or JSON schema), plus research tools. |
| HTTP Request | Call any REST endpoint with optional auth. |
| Send Email | Send email from Rills. Supports HTML/text bodies, CC/BCC, attachments, and a base template. |
| Custom Code | Run JavaScript or Python in a sandbox. See Custom Code . |
| Transform Data | Reshape data between steps (map, filter, pick, omit, etc.). |
| Integration Action | Any action exposed by a connected integration: send Slack message, refund a Stripe charge, create a Notion page. |
| Data | Add, find, update, or delete rows in a workspace table, to persist and read data across runs. |
| Aggregate Rows | Group table rows and compute sum, average, min, max, count, or percentile. |
| Save File to Storage | Save a file to your workspace storage from a web link, text, or file data. |
| Get File URL | Look up a stored file’s link and details by key. |
| Delete File | Permanently delete a stored file. |
#Variables
Reference data from earlier nodes with {{node_name.field}}. The builder shows what’s available at each step.
#Approval gates
Add a Human Review node anywhere a step needs a human in the loop. The Human Review node has two approval modes, Always ask (every run pauses) and Confidence gated (auto-approve when the run’s confidence score clears your bar, otherwise route to your queue).
See Modes & Confidence for the full picture.
#Retry and error handling
HTTP Request, Custom Code, AI, Send Email, and Integration Action nodes support a retry policy. When a step fails with a retryable error, Rills retries before marking the step failed.
| Setting | Default | Range |
|---|---|---|
| Max retries | 3 | 1–10 |
| Strategy | Exponential | Fixed or Exponential |
| Base delay | 1,000 ms | 100–60,000 ms |
| Backoff multiplier | 2 | 1–3 |
| Max delay | 60,000 ms | 1,000–300,000 ms |
| Retryable HTTP codes | 408, 429, 500, 502, 503, 504 | Any HTTP status codes |
Exponential backoff: delay = min(maxDelay, baseDelay × multiplier^attempt) with jitter to prevent thundering herd.
Each part of the workflow lifecycle has its own page below. For optimization suggestions drawn from your run history, see Learning & Insights (Pro+).