Shapes

Shapes

Node reference

13 min readOpen in Neblex
Browse the shapes one by oneWhat each shape does, when to use it and an example, with every setting.

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_id after 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, state and index. 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_state and loop_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_cursor exists, 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=newName per 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 :name bind 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), with order_id and amount mapped 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 example href); 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.

  1. 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.
  2. 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.
  3. 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 payload field 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 prompt field 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.