Every step of a workflow runs one action. Parameters can be fixed values or expressions; the result lands in steps.<stepId>. Control-flow actions (branch, switch, loop, parallel, try/catch, stop, log) work in both client and server workflows.
Client actions
Data
| Action | Parameters | Result |
|---|---|---|
Set variablecore.setVarSets a variable, or a dotted path inside it (filters.category). | var Variable name or path, without vars.value New value. | The value that was set. |
Reset variablecore.resetVarRestores a variable to its default value. | var Variable name or path. | The value after the reset. |
Refetch querycore.refetchRuns a client query again and waits for it. | query Query name. | The query state after the run (data, error, updatedAt). |
Run operationcore.runOperationNot available in client workflows: plugin operations need secret keys and run in server workflows. | integrationId Integration id.operation Plugin operation id, e.g. rest.request.input? Operation input. | Nothing: the step always fails in a client workflow. |
Run server workflowcore.runServerWorkflowRuns a server workflow called from pages (plugin operations, tables, emails) and waits for its result. | workflow Server workflow with the trigger "Called from pages".input? Becomes input in that workflow. | The value of its Return step. |
Control flow
| Action | Parameters | Result |
|---|---|---|
If / elsecore.branchRuns then when the condition is truthy, otherwise else. | if Condition.[then] step list[else] step list | The branch that ran: "then" or "else". |
For eachcore.loopRuns body once per item, with item and index in scope (outer loop row in parent). At most 1000 items. | items An array (null or undefined runs zero times).[body] step list | The number of iterations. |
Try / catchcore.tryCatchRuns try; if a step fails, runs catch with error in scope. Limits and cancellation are not caught. | [try] step list[catch] step list | { ok: true }, or { ok: false, error } when catch ran. |
Switchcore.switchRuns the steps of the first case whose value equals value, otherwise default. | value Value to match.cases? Cases { id, label, equals } (at most 32); each id is a branch.[default] step list | The id of the case that ran, or "default". |
Run in parallelcore.parallelRuns every lane at the same time and waits for all (at most 8 lanes). A failing lane fails the step. | — | { a: true, b: true, … } once every lane finished. |
Breakcore.breakLeaves the nearest For each loop. Only inside a loop body. | — | Nothing. |
Continuecore.continueSkips to the next item of the nearest For each loop. Only inside a loop body. | — | Nothing. |
Waitcore.delayWaits a number of milliseconds (at most 60000). | ms Duration in ms. | The milliseconds waited. |
Stopcore.stopEnds this workflow successfully. Later steps do not run. | — | Nothing. |
Run workflowcore.runWorkflowRuns another workflow of the page and waits for it (call depth at most 8, no cycles). | workflow Workflow id.input? Becomes input in the called workflow. | The called workflow's step results (steps). |
Navigation
| Action | Parameters | Result |
|---|---|---|
Go to pagecore.navigateNavigates to a page of the site or a URL. | to A page ({ pageId }), a path (/about) or an http(s) URL. | Nothing. |
Open URLcore.openUrlOpens a URL (http, https, mailto, tel or a relative path). | url URL to open.newTab? Open in a new tab. | Nothing. |
Interface
| Action | Parameters | Result |
|---|---|---|
Show toastcore.toastShows a short notification. | message Text to show.variant? Style. | Nothing. |
Scroll to elementcore.scrollToScrolls an element into view. | node Node id.behavior? Scroll behavior. | Nothing. |
Copy to clipboardcore.copyToClipboardCopies text to the clipboard. | text Text to copy (non-strings are JSON-encoded). | Nothing. |
Play interactioncore.playInteractionPlays an interaction (animation) of the page. | interaction Interaction id. | Nothing. |
Visitor accounts
| Action | Parameters | Result |
|---|---|---|
Log in visitorcore.loginSigns a site visitor in with email and password and updates user. Published site only. | email Visitor email.password Visitor password (bind it to a form field). | The signed-in user. |
Sign up visitorcore.signupCreates a visitor account, signs it in and updates user. Published site only. | email Visitor email.password New password.name? Display name. | The new user. |
Log out visitorcore.logoutSigns the visitor out and resets user. Published site only. | — | null. |
Send sign-in linkcore.sendMagicLinkEmails the visitor a one-time sign-in link (same answer whether or not the account exists). Published site only. | email Visitor email. | true. |
Refresh usercore.refreshUserReloads the signed-in visitor into user. Published site only. | — | The signed-in user, or null. |
Debugging
| Action | Parameters | Result |
|---|---|---|
Logcore.logWrites a value to the run log (the browser console on the published site). | value Value to log. | The logged value. |
Server-only actions
Available in server workflows, with optional retries per step.
| Action | Parameters | Does |
|---|---|---|
HTTP requestcore.httpRequest | url, method, headers, body | Calls an external HTTPS URL from the server (no private addresses, 15 s, 1 MB). |
Send emailcore.sendEmail | to, subject, text, html | Sends a transactional email. |
Run operationcore.runOperation | integrationId, operation, input | Runs an integration operation with its secrets. |
Run server workflowcore.runServerWorkflow | workflow, input | Runs another server workflow and waits for its result. |
Run JavaScriptcore.runJs | code, input | Runs sandboxed code with input and steps in scope; no network, bindings or secrets. |
Returncore.return | value | Ends the run with a result; for endpoints, the response body. |
Query tablecore.tableQuery | table, filter, limit, cursor | Reads rows of a native table. Result: { rows, nextCursor }. |
Get rowcore.tableGet | table, id | Reads one row by id. |
Insert rowcore.tableInsert | table, values | Inserts a row. |
Update rowcore.tableUpdate | table, id, values | Updates a row. |
Delete rowcore.tableDelete | table, id | Deletes a row. |
Set visitor rolescore.visitorSetRoles | userId, roles | Replaces the roles of a visitor. Roles must exist in the site. |
Sleepcore.sleep | duration | Pauses the run, e.g. "5 minutes". Makes the workflow durable. |
Wait for eventcore.waitForEvent | event, timeout | Pauses until an event of this type arrives; the result is its payload. Durable. |
Emit eventcore.emitEvent | runId, type, payload | Resumes a run waiting for this event type. |