Shapes
Node reference
This is every node in the library, grouped as the library groups them. Built-in node types are called shapes; you can switch a node's shape with the Shape dropdown in its settings. Most shapes receive the list of records from the steps before them and produce a new list. Each card lists the settings as the app labels them, with defaults in brackets.
Two kinds of steps. Record-by-record steps (adapters, HTTP request, Map fields, Transform items, Set fields, Rename fields, Edit fields, Split, Build text, Hash, Format date, Convert JSON, Compress, Render markdown, Scrape, Edit text, the EDI steps, and Code in Each record mode) handle each record on its own, so very large inputs flow through in bounded pieces. Whole-set steps (Sort, Remove duplicates, Aggregate, Group & summarize, Group into batches, Merge by key, Create Excel, Create file, Code in All records mode) need every record first.
Triggers
Webhook, Form (starts flow), Schedule, Poll for changes and Live stream. See Triggers and Streaming triggers. Triggers are not available inside a Loop body.
Logic
Filter
Keeps only the records that match a condition; the rest are dropped.
- Settings
- Condition: Field, Operator, Value (see Conditions).
- Output
- The matching records, unchanged.
- Example
- Field
status, equals,open.
Sort
Orders records by a field.
- Settings
- Field to sort by; Order: Ascending (A → Z, 0 → 9) [default] or Descending.
- Output
- The same records, reordered. Numbers (and numeric text) sort numerically; missing and empty values come first when ascending. Records with equal values keep their order.
Keep first N
Passes on only the first N records.
- Settings
- Maximum items to keep [10].
- Tip
- Sort first to get a "top 10".
Remove duplicates
Drops repeated records, or tags them so you can review them separately.
- Settings
- Compare records by field (several fields form a combined key; empty compares whole records). Match strategy: Exact match [default], Fuzzy - Jaro-Winkler, Fuzzy - edit distance (Levenshtein), Phonetic - Soundex. Similarity threshold (%) [90] for fuzzy strategies. Keep duplicates for branching.
- Output
- First occurrence wins. With Keep duplicates for branching every record is kept and tagged
_duplicate(true/false) and_dup_of, and the node shows two outputs, Unique and Duplicate, to wire a review path. - Note
- Exact matching is case-sensitive; fuzzy matching is not.
Split
Turns one record with a list into one record per list element.
- Settings
- List field to split out.
- Example
- An order with
lines: [a, b, c]becomes three records, one per line. A record without a list passes through unchanged.
Group into batches
Packs records into fixed-size groups for bulk APIs.
- Settings
- Batch size [100]; Array field [
items]. - Output
- One record per batch:
{items: [...], batchIndex, batchCount}.
Merge by key
Combines records that share a key into one record.
- Settings
- Key field.
- Output
- One record per distinct key, in first-seen order; later fields overwrite earlier ones.
- Example
- Merge a CRM record and a billing record for the same
customer_idafter both branches join.
Aggregate
Collapses all records into one.
- Settings
- Collect field (blank collects whole records); Into array field [
items]. - Output
- Exactly one record:
{items: [...], count: N}. Useful before sending one summary email.
Group & summarize
Groups by a field and calculates a figure per group.
- Settings
- Group by field; Aggregate: Count [default], Sum, Average, Minimum, Maximum; Value field (not needed for Count); Into field [
value]. - Output
- One record per group:
{region: "EU", value: 1234.5, count: 17}. Numeric text counts as numbers.
Loop
Runs a group of steps (the body) for each record, a fixed number of times, or while or until a condition holds.
- Settings
- Iteration: For each record [default], Repeat a fixed number of times, While a condition holds, Until a condition holds. Collection path (optional) loops over a list inside each record. Repeat count. Maximum iterations [100] for while/until. Condition. Next iteration input (JSON mapping) for repeat/while/until, using
output,stateandindex. Output: Collect body results [default] or Counts only. If a body fails: Stop the Loop [default] or Continue with the next iteration. - Body
- Click Edit body on the node to build the steps that repeat. Inside the body the mapper offers loop values (index, current item, state, input) and Code sees
loop_index,loop_item,loop_stateandloop_input. Loops can be nested up to 8 levels. - Output
- Collect: the combined results of the body's last steps. Counts only:
{completed, succeeded, failed, canceled}. With Continue, a failed iteration adds{"iteration": n, "status": "failed"}. A while/until loop that reaches its maximum while the condition still holds fails, so it can never spin forever. - Example
- Page through an API: Repeat while
next_cursorexists, carrying{"cursor": output.0.next_cursor}to the next iteration.
Run another flow
Calls another flow as a reusable sub-flow.
- Settings
- Flow to run.
- Output
- The sub-flow runs over this step's records as its own tracked run; its last steps' output continues here. Calls can nest up to 8 deep; a flow calling itself (directly or in a circle) is refused.
HTTP request
Calls any HTTP or HTTPS endpoint directly when no adapter covers it. Runs once per record.
- Settings
- Method [GET]; URL with
{name}placeholders filled from the record; Headers and Query parameters (JSON objects); Body (JSON); Body encoding: JSON [default], Form (x-www-form-urlencoded), Raw string, Multipart (file upload); Pagination (optional); Connection (a secret is sent as a Bearer token; an app connection applies that app's sign-in). - Pagination
{ "kind": "cursor", "cursor_param": "cursor", "next_path": "meta.next", "items_path": "items" }. Kinds: cursor, page, offset, link (Link header).- Output
- The response records, across all pages.
- Example
- URL
https://api.example.com/customers/{customer_id}, method GET.
Wait
Pauses before passing records on.
- Settings
- Delay (seconds) [60].
- Note
- The wait is durable: the run waits and resumes even across maintenance. A replay does not wait again.
Wait for event
Holds the run in Waiting until a matching event is delivered.
- Settings
- Correlation key: a fixed value or one taken from the data, such as the order id.
- Output
- The delivered event's JSON body.
- Delivering the event
- While a run is waiting here, the step on the canvas shows the delivery call and a Send event now button. Delivery is an authenticated workspace request: it needs a signed-in member with permission to run flows. It resumes every run waiting on that key.
Wait for form
Pauses the run and creates a human task with a form. See Human tasks & approvals.
- Settings
- Form; Output sample; Notify these people; Priority; Due in (minutes); Timeout (minutes) (0 waits forever); Escalation flow; Assign automatically (No - shared pool, Round robin, Least busy); Who may work this (emails); Required skills; Different person must decide.
- Output
- The submitted form data (the incoming records pre-fill the form). A decision button adds
_outcome; a timeout outputs{"_outcome": "timeout", "_timeout": true}.
Set value
Saves a named value for the rest of this run.
- Settings
- Value name; Value (fixed JSON or a mapping).
- Use
- Read it later with the Flow value mapper source, or in Rhai as
steps["$values"][0].name. The last write wins. - Example
- Store
batch_started=date_now()at the start, then stamp every record with it.
Error
Stops the run on purpose with your message.
- Settings
- Error message.
- Note
- Always fails the run, whatever its On error setting.
Assert Data Quality
Checks the batch and stops with precise details when a rule fails.
- Settings
- Checks (at least one): Row count between (min, max) [min 1], Required fields, Numeric range (field, min, max), Condition on every record.
- Output
- Records pass through unchanged when every check passes; otherwise the step fails with assert failed (N violations): ... listing up to five. Set On error to Route to handle it in the flow.
Validate Records
Checks each record, or one of its fields, against a JSON Schema and marks it valid or invalid.
- Settings
- JSON Schema (types, required fields, properties, list items, allowed values, lengths and ranges, patterns, and allOf, anyOf, oneOf, not); Field to check (empty checks the whole record).
- Output
- Every record is kept and tagged
_valid(true/false) and_validation_error(the first rule it broke, or null). The node shows two outputs, Valid and Invalid, to send each kind down its own path.
Pass through
Does nothing: a labelled join point or placeholder.
Transform
Map fields and Transform items
Build a new record from the incoming one, field by field. Both open the Transform Studio and behave the same; use the name that describes your intent.
- Studio
- Source fields with type badges on the left; target fields with Type, Transform, Preview and Status on the right. Mirror input fields copies all fields as a start. Each target uses a mapper kind: Direct, Code (Rhai expression), TXL, Match, Value, Flow value, Env var or Node. The Formula bar and Functions menu insert common operations: Uppercase, Lowercase, Trim, Find & replace, First N characters, Length, Combine, Convert to number, Round, Math, If/else, Fallback when empty. Output contract checks the result against a Data Model. Live output previews the result with sample data.
- Output
- One record per input record, containing only the target fields. An empty mapping passes records through.
- Example
full_name=item.first_name + " " + item.last_name;total=item.qty * item.unit_price.
Set fields
Adds or overwrites some fields and optionally removes others; every other field passes through.
- Settings
- Set fields (JSON object) of field names and values; Remove fields (comma list).
Rename fields
Renames field names.
- Settings
- Renames: one
oldName=newNameper line.
Edit fields
Several field operations in one step.
- Settings
- An ordered list of rules: + Set / compute field (value, from step, value map or expression), + Rename column, + Remove field.
- Note
- Every rule reads the record as it entered the step, so the order of rules never changes the result.
Data table
Reads and writes a built-in data table.
- Settings
- Data table; Operation: Insert [default], Insert or update, Get, Update, Delete, List all rows, Query rows, Describe columns; Key column (for insert-or-update, get, update, delete); row values mapped in Input.
- Query rows
- A safe query editor: joins (inner or left), return columns with friendly names, Where all are true conditions (equals, does not equal, >, ≥, <, ≤, contains, starts with, ends with, is empty, is not empty) with fixed values or incoming fields, sort column, Descending, and a row limit. No SQL is needed.
- Output
- Writes act per record and pass on the result; reads return rows as records.
Lookup
Enriches each record with a matching record from an earlier step, in memory.
- Settings
- Look up in (step); Match on (their field); Using (this record's field); Store the match as [
match]; When no match (a default JSON value). - Output
- Every record passes through with the first match (or the default) added. Keys are compared as text. A miss never drops the record.
Build text
Renders a template into a field.
- Settings
- Template, for example
Order {{id}} for {{customer.name}}; Into field [text]. - Note
- A missing path renders empty; lists and objects render as JSON.
Edit text
Simple text operations.
- Settings
- Operation: Trim whitespace [default], UPPERCASE, lowercase, Find & replace, Length; Field; Find / Replace with; Into field [
text].
Data
Adapter step (connector call)
Runs a real operation in a connected system. Every adapter in the library is this node with a different connector.
- Settings
- Connector, Operation and its parameters. Each parameter can be a Value, an Expression or Mapped from upstream. Databases, Redis, SFTP/FTP, SSH, IMAP, Neo4j, BigQuery and similar adapters show a SQL / command editor with
:namebind parameters, or Or pick a saved operation. Map with Matt proposes mappings. Connection. Test this step. Compensation (rollback on failure): an Undo operation and Undo input that run in reverse order if a later step fails the run. - Output
- The operation's result records.
- Example
- PostgreSQL, statement
INSERT INTO orders (id, amount) VALUES (:order_id, :amount), withorder_idandamountmapped in Input.
Hash value
Hashes a field or signs it with a key.
- Settings
- Algorithm: SHA-256 [default] or SHA-512; Field; Into field [
hash]; HMAC key (optional) to compute an HMAC signature instead. - Output
- Lowercase hexadecimal.
Format date
Reformats a date or time.
- Settings
- Field (a field, or a date call such as
add_days(created_at, 30)); Format (strftime) [%Y-%m-%d]; Into field [formatted]. - Input
- ISO-8601 text or Unix seconds.
Convert JSON
Converts between text formats and records.
- Settings
- Direction: Value -> JSON string [default], JSON string -> value, Value -> CSV, CSV -> records, Value -> XML, XML -> records; Field; Into field [
json]. - Limits
- CSV input up to 4 MB, 1,024 columns, 100,000 rows; XML input up to 1 MB. For larger files use Read file.
Compress (zip)
Gzip-compresses a text field and base64-encodes it.
- Settings
- Field; Into field [
compressed].
Scrape website
Extracts values from HTML with CSS selectors.
- Settings
- HTML field; CSS selector (for example
table.prices td.amount); Attribute (blank = text, or for examplehref); Collect every match into a list; Into field [value].
Render markdown
Turns Markdown into HTML, for example for email bodies.
- Settings
- Markdown field; Into field [
html]. Raw HTML and unsafe links are removed.
Files
Create Excel
Builds an .xlsx workbook from all records.
- Settings
- Worksheet name [
Sheet1]; File name [export.xlsx], placeholders allowed. - Output
- One record
{filename, contentType, rows, columns, bytes, contentBase64}, ready for an email attachment or file upload step.
Create file
Builds a CSV, JSON or text file from all records.
- Settings
- Format: CSV [default], JSON, Text (one per line); File name [
export.csv]. - Output
- One record
{filename, contentType, rows, bytes, contentBase64}. CSV columns are the union of all record fields.
Read file
Parses a file carried on a record into records.
- Settings
- Format: CSV, JSON, Text; Field holding the file [
contentBase64]; Content is: Plain text, Base64-encoded, or Detect. - Output
- CSV: one record per row (values as text). JSON: a list becomes records, an object one record. Text:
{text}per line. Large files stream through without being loaded at once. - Tip
- To read a workbook made by Create Excel or a file from a file-transfer adapter, set Field holding the file to the field that carries the content (for Create Excel and Create file output that is
contentBase64, the default).
Read EDI
Parses ANSI X12 or UN/EDIFACT into a navigable structure.
- Settings
- Standard: Detect automatically [default], ANSI X12, UN/EDIFACT; EDI text field; Output field [
edi]. - Output
{format, delimiters, segments}.
Build EDI
Generates EDI text from a parsed structure.
- Settings
- Structure field [
edi]; Output field [edi].
Validate EDI
Checks envelope integrity and transaction-set rules.
- Settings
- Structure field; Output field [
validation]; On violations: Attach the report and continue [default] or Fail the step. - Output
{valid, violations: [{code, severity, segment, position, message}]}.
Acknowledge EDI
Builds a functional acknowledgment to send back to the partner.
- Settings
- Structure field; Output field [
ack]; Rejected controls field (optional); X12 acknowledgment type: 997 [default] or 999. - Output
{text, standard, control_number, acknowledges}(997/999 for X12, CONTRL for EDIFACT).
Exchange EDI over AS2 and AS4
AS2 and AS4 are the protocols retailers, carriers, healthcare and government exchanges require. Every message is signed, encrypted and acknowledged with a signed receipt.
- Create the partner connection. Add an AS2 (or AS4) connection with the partner's URL, both AS2 IDs, the partner's certificate and your own certificate and private key. Leave signing and encryption on unless the partner says otherwise.
- Send. Add the adapter step AS2 › Send a document (or AS4 › Send a message), typically after Build EDI. It signs, encrypts, delivers and verifies the receipt; the step fails if the receipt does not acknowledge exactly what you sent.
- Receive. On a Webhook trigger set Authentication to AS2 trading partner (or AS4) and pick the partner connection. Inbound messages are verified and decrypted, the document arrives in the
payloadfield for Read EDI, and the signed receipt goes back automatically. A retransmitted message never starts a second run.
Manage partners and review every interchange under B2B Trading.
AI
AI agent
Runs an AI agent for each record: it reasons over the record, calls the tools you allow, and returns an answer.
- Settings
- Reusable Agent: pick a published agent (recommended; the flow pins that version and offers an update button). Or configure inline: Model provider, Connection, Model, System prompt, Max steps [6, up to 50], and Tools (adapter + operation + When to use this tool + connection; up to 40).
- Input
- The record's
promptfield is the question; without it the whole record is sent. - Output
{output, steps: [{tool, input, output, ok}], usage: {total_tokens, turns, tool_calls}, settled, stopped, pending_actions}.
For standalone assistants, knowledge search, memory and chat channels see AI agents.
Code
Code
Runs a sandboxed Rhai script for logic the other shapes don't cover.
- Settings
- Each record or All records mode; Imported modules (Transform Module names); a snippet library; the script (up to 100 KB).
- Output
- Each record: one record per input (the returned object or the changed
item). All records: the returned list becomes the records. - More
- See Scripting with Rhai.