Block reference
Reference for the block types in a workflow definition, with the type name, purpose and a link to the configuration page for each block.
A block is one kind of step you can place in a workflow. This page lists each block in the registry, the step it becomes in the workflow definition, and where its settings are documented. For the plain-language view of the same steps, see Steps: what a workflow can do.
How a block becomes a step
The editor saves each block as one entry in the workflow's steps array. The block decides the step's type and, for integration blocks, its action:
| Block | Step type | Step action |
|---|---|---|
| Condition, Loop, Parallel, Wait, Transform, AI Agent, Code, Approval, Sub-Workflow, Data Table, Workspace Files, Slack, Gmail, legacy Email | The block type (condition, loop, parallel, wait, transform, agent, code, approval, subworkflow, data_table, workspace_files, slack, gmail, email) | Not set |
| API Request | action | api.request |
action | pdf.readText, pdf.extractPages or pdf.getInfo | |
| Stagehand | action | stagehand.navigate, stagehand.act, stagehand.extract, stagehand.observe, stagehand.download, stagehand.screenshot or stagehand.agent |
| Send Email and any other integration block | action | <block type>.<operation>, for example quickbooks.createInvoice |
Settings go in the step's config object, keyed by the field ids shown on each block page. Later steps read a step's result with {{steps.<step id>.<path>}}. See Workflow definition format for the full step shape and Variable references for the reference syntax.
The fields a later step can read are the ones the step's executor returns. On some blocks these differ from the output list the editor shows; each block page lists what the executor returns.
Core blocks
These blocks run logic, data and people steps. They need no connection.
| Block | type | What it does | Reference |
|---|---|---|---|
| AI Agent | agent | Runs a model with your prompt, optional document, structured output and tools | AI Agent block |
| API Request | api | Calls an HTTP endpoint and parses the response | API Request block |
| Approval | approval | Pauses the run until a named person approves or rejects | Approval block |
| Code | code | Runs JavaScript in a sandbox | Code block |
| Condition | condition | Chooses a branch from a true or false test | Condition block |
| Data Table | data_table | Reads and writes rows, tables and folders in Loopfour tables | Data Table block |
| Loop | loop | Runs a set of steps once for each item in a list | Loop block |
| Parallel | parallel | Runs branches at the same time | Parallel block |
pdf | Reads text from a PDF, keeps selected pages, or reports page count | PDF block | |
| Send Email | resend | Sends an email | Email actions |
| Stagehand | stagehand | Drives a hosted browser with plain-language instructions | Stagehand block |
| Sub-Workflow | subworkflow | Starts another workflow as a step | Sub-Workflow block |
| Transform | transform | Maps or filters a list of records | Transform block |
| Wait | wait | Pauses the run for a set duration | Wait block |
| Workspace Files | workspace_files | Saves, reads, moves and lists files in Files | Workspace Files block |
Trigger blocks
Trigger blocks start a workflow. They set the workflow's trigger object rather than adding a step.
| Block | type | What starts the workflow | Reference |
|---|---|---|---|
| API | api_trigger | A call to the run API | API trigger |
| Schedule | schedule_trigger | A recurring schedule | Schedule trigger |
| Inbound Email | email_trigger | An email to the workflow's dedicated address | Inbound email trigger |
| Airwallex | airwallex_trigger | An Airwallex payment event | App event triggers |
HubSpot and Slack events are registered as triggers rather than blocks. See App event triggers and Slack triggers.
Integration blocks
Each integration block calls one connected system. Its operations, inputs and outputs are on the system's action page.
| Block | type | Reference |
|---|---|---|
| Airwallex | airwallex | Airwallex actions |
| Attio | attio | Attio actions |
| Avalara | avalara | Avalara actions |
| Box | box | Box actions |
| DocuSign | docusign | DocuSign actions |
| Dropbox Sign | dropbox-sign | Dropbox Sign actions |
| Email (legacy, hidden from the editor) | email | Email actions |
| Finances (Plaid) | plaid | Plaid actions |
| Gmail | gmail | Email actions |
| Google Sheets | google-sheets | Google Sheets actions |
| HubSpot | hubspot | HubSpot actions |
| NetSuite | netsuite | NetSuite actions |
| Odoo | odoo | Odoo actions |
| Outlook | outlook | Email actions |
| PandaDoc | pandadoc | PandaDoc actions |
| QuickBooks | quickbooks | QuickBooks actions |
| Rillet | rillet | Rillet actions |
| Sage Intacct | sage-intacct | Sage Intacct actions |
| Salesforce | salesforce | Salesforce actions |
| Slack | slack | Slack actions |
| Stripe | stripe | Stripe actions |
| Xero | xero | Xero actions |
| Zoho Inventory | zoho-inventory | Zoho Inventory actions |
| Zuora | zuora | Zuora actions |
Read the live catalog
The block list above is read from the registry. To read it from a running deployment, call the blocks endpoint with an API key that has the workflows:read scope:
curl https://workflow.loopfour.ai/api/v1/blocks \
-H 'x-api-key: wfk_live_your_api_key'GET /api/v1/blocksreturns each block the editor shows. Add?kind=core,?kind=integrationsor?kind=triggersto filter.GET /api/v1/blocks/<type>returns one block, with its fields, inputs and outputs.GET /api/v1/blocks/<type>/actions/<operation>/examplesreturns the stored input and output examples for one action.
The legacy email block is hidden from the editor, so the endpoint does not return it. See Block and action discovery for the response shape.
Settings every step accepts
Besides its block settings, each step can carry errorHandling (fail, continue or retry), retryConfig and timeoutMs. These are covered in Errors, retries and timeouts.
Loopfour