Automation Actions Overview
Actions are the individual steps an automation runs. Every action shares the same shape: a type and an operator that together select the operation, plus a props object carrying its inputs. Steps run sequentially (top to bottom) unless a path or loop action branches execution.
actions:
- name: fetchUser # step name — referenced as {{fetchUser.result}}
type: http # action family
operator: get # operation within the family
props: # operation-specific inputs
url: 'https://api.example.com/users/{{trigger.data.userId}}'
connection: example-api
The Action Model
| Element | Description |
|---|---|
type |
The action family (e.g. http, record, email). Selects the broad capability. |
operator |
The operation within the family (e.g. get, create, send). Determines the shape of props. |
props |
Operation-specific inputs. String values support template variables. |
Common Base Properties
Every action — regardless of type/operator — accepts these base fields:
| Property | Description |
|---|---|
name |
Step name for referencing outputs (e.g. fetchUser). Must match ^[a-zA-Z][a-zA-Z0-9_]*$. Required. |
label |
Human-readable label for the step. |
retry |
Per-action retry policy — { maxAttempts, delayMs?, strategy? }. See Retry & Failure. |
continueOnError |
Boolean. When true, the workflow continues even if this action fails. Defaults to false. |
timeout |
Per-action timeout in milliseconds (1000–900000). Terminates the action uniformly when exceeded — distinct from per-type props.timeout. |
Two timeouts, two scopes. The top-level timeout field fences the whole action and is enforced for every action type. A props.timeout (e.g. on http, code, automation/call) fences the handler's internal operation. The smaller of the two wins.
Conditional Execution
Branching and conditional skipping are handled by dedicated control-flow actions rather than a per-action condition field:
filter/continue— evaluate a condition group; on false,stopthe run orskipto the next action.path/branch— route into named branches based on per-branch conditions.
See Flow Control and Data & State Actions.
The ~22 Action Families
Each family groups one or more operators. The pages below document every operator.
| Family | Operators | Page |
|---|---|---|
data |
set, aggregate, sort, limit, deduplicate, merge, split, compare, lookup | Data & State |
state |
get, set, increment, delete, list | Data & State |
filter |
continue | Data & State |
crypto |
hash, hmac | Data & State |
digest |
collect, release | Data & State |
http |
request, get, post, put, patch, delete | HTTP & Webhooks |
webhook |
send, response | HTTP & Webhooks |
record |
create, read, update, delete, upsert, batchCreate, batchUpdate, batchDelete, batchUpsert | Record & File |
file |
upload, download, delete, copy, move, list, getMetadata, signUrl, generatePdf, generateCsv, parseCsv, extractText, transformImage, compress | Record & File |
path |
branch | Flow Control |
loop |
each | Flow Control |
automation |
call, return | Flow Control |
flow |
stop | Flow Control |
email |
send | Email & Notifications |
analytics |
track | Email & Notifications |
ai |
generate, classify, extract, agent | AI Actions |
approval |
request | Approval & Delay |
delay |
wait, queue, webhook | Approval & Delay |
auth |
createUser, assignRole, banUser, unbanUser | Auth Actions |
code |
runTypescript | Code Actions |
cloud |
provision-db, spawn-app, route-add, disable-app, destroy-app | Cloud Actions |
ref |
(no operator) | this page |
Reusable Action Templates (ref)
Define a reusable action under the top-level app.actions[] array, then invoke it from any automation with a ref action. The ref action has no operator — it carries a $ref (template name) and optional $vars (substitution overrides).
| Property | Description |
|---|---|
$ref |
Name of the action template to invoke (must match a template in app.actions[]). |
$vars |
Variables to substitute in the referenced template (overrides the template defaults). |
# Top-level reusable template
actions:
- name: notify-slack
type: http
operator: post
props:
url: $env.SLACK_WEBHOOK_URL
body: { text: '{{message}}' }
# Invoking it inside an automation
automations:
- name: order-alert
trigger: { type: record, table: orders, events: [create] }
actions:
- name: alert
type: ref
$ref: notify-slack
$vars: { message: 'New order {{trigger.data.id}}' }
Related Pages
- Automations Overview — the trigger + actions anatomy.
- Triggers — events that start a workflow.
- Retry & Failure — retry, timeout, idempotency.
- Connections — credentials for authenticated actions.