Skip to main content
View as Markdown

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.

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, stop the run or skip to 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}}' }