Skip to content

Automation nodes

Every node you can add to a flow in the automation editor, grouped as the Add node picker groups them. Fields marked * are required. Outputs are what later steps can reference as {{ steps.<reference name>.<output> }} (or {{ trigger.<field> }} for the trigger).

<!-- source: registerAutomationNodes(...) in packages/automation/src/server/nodes/index.ts, packages/{github,telegram,discord,twitter}/src/server/nodes/index.ts, packages/wiki/src/server/nodes.ts -->

Every node

SettingWhereWhat it does
Error outputAdvanced, on any node but a triggerAdds an On error output that runs when the node fails, so the flow continues instead of stopping. The failing node then also outputs error.
Reference nameright-click the node, RenameThe <reference name> in {{ steps.<reference name>.… }}.

Trigger

A flow has exactly one trigger. A new flow starts with an Event Trigger; right-click it and choose Replace to switch to another.

NodeStarts the flow whenFieldsOutputs ({{ trigger.… }})
Event Triggera chosen event happens in your organizationWhen this event fires*: an event from the grouped listthe event's fields (listed under Outputs), plus type, organizationId, actorId, occurredAt
Data Recorda record in one model is created, updated or deletedData model*; On*: Record created, Record updated or Record deletedthe record event's fields, plus the common event fields
Manual Triggeryou click Run now; never on its ownnonethe common event fields
HTTP Triggeranother system sends a POST to the flow's Endpoint URLnone; the node shows the Endpoint URL and a Secret (Generate secret), sent as an Authorization: Bearer headerbody: the request body
Schedulethe schedule comes roundSchedule*: On an interval (every 1 to 10,080 minutes), Daily, Weekly, Monthly (by date) or Monthly (by weekday), at a time you enter in your own time zonefiredAt, scheduledFor

The events available to Event Trigger are listed in Domain events. Connected GitHub repositories and Telegram bots add their own events there.

Control

NodeDoesFieldsOutputs
ConditionRuns only the True or the False branchValue*; Operator*: equals, does not equal, contains, greater than, less than, greater or equal, less or equal, is truthy, is empty; Compare to (ignored for is truthy and is empty)result
ConstantOutputs a fixed value; has no input and runs when a later node uses its valueType*: Text, Number, Boolean or JSON; Value*value
TransformComputes a value with a formula (the same formulas as formula fields); has no input and runs when a later node uses its valueExpression*, for example {{ trigger.count }} * 2. Put quotes round text you insert: CONCAT("Hi ", "{{ trigger.name }}")value
Set VariableStores a value as {{ vars.<name> }} for every later step, including after a DelayVariable name*; Value: text or a reference (its type is kept)name, value
DelayPauses the run, then continuesDelay (seconds)*: 1 to 86,400 (24 hours)delayedSeconds
For EachRuns the steps on its Each item output once per item in a list, then continues on DoneList*: a reference to a list, such as {{ steps.find_records.records }}item, index (from 0), count; after the loop, results

For Each handles up to 1,000 items. Its loop steps can't include a Delay or another For Each.

Communication

NodeDoesFieldsOutputs
Send NotificationSends an in-app notification, and an email if the person allows itRecipient* (a user); Subject*; Message*recipientUserId, delivered
Send EmailSends a plain email to any addressTo*; Subject*; Body*to, sent
WebhookSends an HTTP request; a response other than 2xx fails the stepURL*; Method: GET, POST (default), PUT, PATCH, DELETE; Body (JSON), sent for POST, PUT and PATCH. Times out after 10 secondsstatus, ok

Data

These act as the flow's owner and need the owner to have the matching record permission. They only reach records the owner can see.

NodeDoesFieldsOutputs
Create RecordAdds a record to a modelModel*; Data (JSON)*: values keyed by field key, such as {"title": "{{ trigger.name }}"}recordId
Update RecordChanges the fields you list on one recordRecord id*; Patch (JSON)*recordId
Delete RecordDeletes a recordRecord id*; Hard delete: remove it permanently instead of moving it to deleted recordsrecordId, deleted, hard
Find RecordFetches one recordRecord id*id, title, slug, data
Find RecordsLists records where one field matchesModel*; Field key*; Match*: contains (text), equals (exact), equals (number), equals (boolean); Value*; Max results: 1 to 100, default 10count (all matches), records

Rbac

Shown as Rbac in the picker. Both need the owner to be allowed to assign roles.

NodeDoesFieldsOutputs
Assign RoleGives a person a roleUser*; Role key*, such as editorassignmentId, alreadyActive
Remove RoleTakes a role away; fails if they don't hold itUser*; Role key*revoked, roleKey

User

Every node here works only on members of your organization.

NodeDoesFieldsOutputs
Get UserLooks a person upLook up by*: User id or Email; Value*id, email, displayName
Set User MetadataStores a value against a person for a moduleUser*; Module*; Key*; Value (JSON or text)*ok
Update User ProfileChanges display name, bio or language; blank fields stay as they areUser*; Display name; Bio; Locale (en / fr)id, displayName
Deactivate / Reactivate UserBlocks or restores a person's sign-inUser*; Action*: Deactivate or ReactivateuserId, disabled

Wiki

Each needs the flow owner's matching wiki permission (create, edit or delete pages).

NodeDoesFieldsOutputs
Wiki: Create pageCreates a pageTitle*; Parent page id (blank for top level); Icon (emoji); Body: each line becomes a paragraphpageId, title
Wiki: Update pageChanges a pagePage id*; New title; New icon (emoji); New body (replaces the body)pageId
Wiki: Delete pageDeletes a page and all its sub-pagesPage id*pageId, deletedCount

Github

Shown as Github in the picker. Every node has Token secret*: a secret holding a GitHub token with access to the repository. All but search also have Repository*, written owner/name.

NodeDoesOther fieldsOutputs
GitHub: Create issueOpens an issueTitle*; Body; Labels (comma-separated)issueNumber, url, id
GitHub: Get issueFetches an issueIssue number*number, title, body, state, url, author
GitHub: List issuesLists a repository's issuesState: Open, Closed or All; Labels; Max results (default 30, up to 100)count, issues
GitHub: Comment on issue/PRAdds a commentIssue / PR number*; Comment*commentId, url
GitHub: Add labelsAdds labelsIssue / PR number*; Labels* (comma-separated)labelCount
GitHub: Set issue stateCloses or reopens an issueIssue number*; State*: Closed or Opennumber, state
GitHub: Create pull requestOpens a pull requestTitle*; Head branch*; Base branch*; Body; DraftprNumber, url, id
GitHub: Get pull requestFetches a pull requestPR number*number, title, state, merged, url, headRef, baseRef, author
GitHub: Request reviewRequests reviewersPR number*; Reviewers* (comma-separated GitHub logins)requested
GitHub: List commitsLists recent commitsBranch / SHA (default branch if blank); Max resultscount, commits
GitHub: Search issues/PRsSearches with GitHub's search syntaxQuery*, such as repo:octo/hello is:issue is:open label:bug; Max resultscount, total, items

Telegram

Uses the bot your admin connected for the organization. Every node has Chat ID*: a numeric chat id or @channelusername.

NodeDoesOther fieldsOutputs
Telegram: Send messageSends a text messageMessage*; Format: Plain text, Markdown or HTML; Send silentlymessageId, chatId
Telegram: Edit messageReplaces the text of a message the bot sentMessage ID*; New text*; FormatmessageId
Telegram: Delete messageDeletes a messageMessage ID*ok
Telegram: Send photoSends a photo from a URLPhoto URL*; Caption; FormatmessageId, chatId
Telegram: Get chatFetches a chat's detailsnoneid, type, title, username

Discord

Most nodes have Bot token secret* (a secret holding a bot token; the bot must have access to the channel) and Channel ID*.

NodeDoesOther fieldsOutputs
Discord: Send messagePosts a message with the botMessage*messageId, channelId
Discord: Send via webhookPosts through a channel webhook, no bot neededonly Webhook URL secret* (no bot token or channel); Message*; Override usernamesent
Discord: Edit messageEdits a message the bot sentMessage ID*; New content*messageId
Discord: Add reactionReacts to a messageMessage ID*; Emoji*: a unicode emoji or a custom one as name:idok
Discord: List messagesReads recent messagesMax results (default 20)count, messages
Discord: Get channelFetches a channel's detailsnoneid, name, type, topic

Twitter

Shown as Twitter in the picker. Uses the X account your admin connected for the organization.

NodeDoesFieldsOutputs
X: Post tweetPosts from the connected accountText*: up to 280 characters, or your account's limittweetId, text
X: Reply to tweetReplies to a postIn reply to tweet ID*; Text*tweetId
X: Delete tweetDeletes a post the account ownsTweet ID*deleted

Related: Build a flow, How automations run.