Node catalog
A node is the smallest unit of work in a workflow: one step, one job. This page is the catalogue of what ships. Dip into it once you know roughly what you are building; The workflow document shows how nodes connect, and Node configuration covers the fields inside one.
Fifty-two nodes ship with the platform's own node package today, in four working categories.
How a node is identified
A node type is identified as namespace:slug — revenexx:http-request, revenexx:json-transform. The namespace says who published it; the slug is stable across versions. Each node instance on your canvas pins a specific node version, so a new release of a node does not silently change a running workflow.
Every node also carries a category: one of action, transform, control, io, or trigger. The category is what groups a node in the palette. Nothing ships in the trigger category — triggers are separate records, not nodes, so there is no such thing as a trigger node to place on the canvas.
The Ports column below lists the output ports a node declares. A default port is the normal continuation, branch ports are alternatives of which exactly one fires, and an error port carries expected failures — and, when the node sets onError: "route", the failures that survived its retries as well. See Failure handling.
Actions
Actions reach outside the workflow and cause an effect.
| Node | Slug | Ports | What it does |
|---|---|---|---|
| HTTP Request | revenexx:http-request | response, error | Calls any URL with any standard method, and returns the response. Optionally uses an HTTP bearer credential. |
| Send Email | revenexx:send-email | sent, error | Sends an email over SMTP using a stored credential. from, to, cc, subject, and an HTML or text body, all expression-capable. |
| Generic API Call | revenexx:entity-api | response, error | Calls any Revenue Cloud API operation. You pick a resource and an operation; the parameter fields and the response port resolve from the API's own schema. Uses a Revenexx API credential. |
HTTP Request is the one you will reach for most. Between the URL, headers and body all accepting expressions, most "system A's data into system B's API" work is one of these plus a transform.
Generic API Call is worth knowing about before you hand-roll an HTTP Request against the platform's own gateway: it resolves the operation's fields for you and carries the credential, so you are not maintaining a URL and an auth header by hand. See Reaching Revenue Cloud.
Transforms
Transforms reshape data in memory. No external call, no side effect.
| Node | Slug | Ports | What it does |
|---|---|---|---|
| JSON Transform | revenexx:json-transform | out, error | Maps and reshapes an object using dot-path field mappings. Optionally passes unmapped fields through. |
| Set Fields | revenexx:set-fields | out, error | Sets, renames or removes fields by dot-path. Values accept expressions. Optionally keeps only what it set. |
| Array Tools | revenexx:array-tools | out, error | One array operation per node — sort, limit, dedupe, pluck, sum, count or group. Chainable. |
| Compare Datasets | revenexx:compare-datasets | out, error | Compares two datasets by key fields and emits added, removed, changed and unchanged items. |
| XML | revenexx:xml | out, error | Parses XML into JSON or builds XML from JSON. Attributes live under an @_ prefix; a parse-then-build round trip is lossless. |
| Extract From File | revenexx:extract-from-file | out, error | Parses CSV, Excel (XLSX) or JSON file content into an array of items. |
| Convert To File | revenexx:convert-to-file | out, error | Builds a CSV, Excel (XLSX) or JSON file from an array of items. The counterpart to Extract From File. |
| Regex Extract | revenexx:regex-extract | match, no-match | Extracts a value from text with a regular expression, and branches on whether it matched. |
| Text Replace | revenexx:text-replace | out | Replaces fragments in a string, with an optional regex mode. |
| Date Time | revenexx:date-time | out | Formats "now" or an input date into common date and time formats. |
| Base64 | revenexx:base64 | out | Encodes or decodes a value. |
| DeepL Translate | revenexx:deepl-translate | translated, error | Translates text through DeepL, with optional glossary support. Uses a DeepL credential. |
Compare Datasets is the one people rebuild by hand before they notice it. If a sync has to work out what changed since last time rather than re-writing everything, that is the node.
Control flow
Control nodes decide what runs and how often. They do not change the data.
| Node | Slug | Ports | What it does |
|---|---|---|---|
| If condition | revenexx:condition-if | true, false | Evaluates a field against a value with an operator and fires one branch. |
| Switch | revenexx:switch | one per configured case, plus a default | Routes to one of several named branches based on a field's value. |
| Filter | revenexx:filter | true, false | Evaluates a condition and routes to true or false — the gate form of a filter, not an array filter. |
| Iterator | revenexx:iterator | item, done | Iterates an array, firing item once per element and done when the array is exhausted. Optionally extracts the array from a path, and takes a limit. |
| No Operation | revenexx:no-op | out | Passes data through unchanged. A named junction for structuring a graph. |
| Stop and Error | revenexx:stop-and-error | one port, never emitted | Fails the run on purpose with a message and an optional error code. |
| SFTP: File Exists? | revenexx:sftp-file-exists | exists, missing, error | Checks whether a file exists on an SFTP server and branches — for a .ready marker file, for instance. |
| FTP: File Exists? | revenexx:ftp-file-exists | exists, missing, error | The same, over FTP or FTPS. |
Two notes that save an afternoon:
- Filter is a gate, not an array filter. It routes the whole input down
trueorfalse. To narrow an array, use Array Tools. - Iterator's fan-out is a branch. Nodes wired to
itemrun once per element; nodes wired todonerun after the loop. Inside the loop, the current element arrives on the node's input, so${{ in }}is the item.
Stop and Error is what makes a failure legible. Wire it to an error branch and a broken run says which step gave up and why, instead of surfacing as a bare engine error. It always fails the run regardless of the node's onError setting, so its single output port is never emitted.
Input and output
The largest category: files in, files out, and the platform's own storage and import services.
SFTP
| Node | Slug | Ports | What it does |
|---|---|---|---|
| SFTP: Download File | revenexx:sftp-download | out, error | Downloads a file (base64-encoded output). |
| SFTP: Upload File | revenexx:sftp-upload | out, error | Writes a file from workflow data (base64 or plain text). |
| SFTP: List Directory | revenexx:sftp-list | out, error | Lists a directory, optionally filtered by a glob pattern. |
| SFTP: Move File | revenexx:sftp-move | out, error | Moves or renames a file — into a processed/ folder, typically. |
| SFTP: Delete File | revenexx:sftp-delete | out, error | Deletes a file. |
FTP
The same five operations over FTP or FTPS, with the same ports: FTP: Download File (revenexx:ftp-download), FTP: Upload File (revenexx:ftp-upload), FTP: List Directory (revenexx:ftp-list), FTP: Move File (revenexx:ftp-move) and FTP: Delete File (revenexx:ftp-delete).
For the patterns these nodes are wired into, see File transfer.
Platform storage
| Node | Slug | Ports | What it does |
|---|---|---|---|
| Upload Asset | revenexx:storage-upload | out | Uploads a file, from a URL or from workflow data, into the tenant's media storage and emits the created asset. |
| Upload Assets (Bulk) | revenexx:storage-upload-bulk | out | Uploads an array of file objects in one batch, with a per-file result. |
| Unpack Archive | revenexx:storage-unpack | out | Unpacks an uploaded archive asset; its members become individual assets in a folder mirroring the archive. |
| List Assets | revenexx:storage-list-assets | out | Lists assets, filtered by folder, kind or search. Typically feeds an iterator. |
| Get Asset Link | revenexx:storage-get-link | out | Mints a signed, time-limited download URL for an asset, up to seven days. |
| Update Asset | revenexx:storage-update-asset | out | Renames, moves or retags an asset. Only the fields you configure change. |
| Delete Asset | revenexx:storage-delete-asset | out | Deletes an asset — into the trash by default, permanently when configured. |
| Ensure Folder exists | revenexx:storage-ensure-folder | out | Creates a folder by name below an optional parent if it is not there, and emits its id. Safe to re-run. |
See Storage for what these assets are on the platform side.
Generic files
| Node | Slug | Ports | What it does |
|---|---|---|---|
| Create File | revenexx:create-file | out | Wraps text or data into a file object that an upload node can take. |
| Download | revenexx:download | out, error | Downloads a file from a URL and passes it on as a binary buffer. |
| Upload | revenexx:upload | out, error | Uploads a file to a remote URL, as multipart/form-data or a raw PUT. |
Import and export
Eight nodes drive the platform's Import & Export service from inside a workflow — the same service behind the /v1/io/* endpoints on the public gateway. Use the nodes when the import is a step in a larger flow (pick the file up, import it, move it, notify); use the API when it is a standalone operation.
| Node | Slug | Ports | What it does |
|---|---|---|---|
| Ensure Profile exists | revenexx:baseline-io-ensure-profile | out | Creates the named import or export profile if it does not exist, optionally keeps it in sync, and emits its id. |
| Stage File | revenexx:baseline-io-stage-file | out | Uploads workflow data to the import service and emits the object key an import run needs. |
| Stage From SFTP | revenexx:baseline-io-stage-from-sftp | out | Streams a file straight from an SFTP server into the import service, however large it is, and emits the object key. |
| Import from profile | revenexx:baseline-io-run-profile | out | Runs an existing import profile against a staged file and optionally waits for the job to finish. |
| Import without profile (Ad-hoc) | revenexx:baseline-io-import | out | Imports a staged file into an entity with no stored profile — target, keys and apply mode are configured on the node. |
| Export from profile | revenexx:baseline-io-export | out | Runs an export profile, waits for the job, and emits a download URL for the result file. |
| Export without profile (Ad-hoc) | revenexx:baseline-io-export-adhoc | out | Exports an entity as a file with no stored profile, all columns, target and format on the node. |
| Deliver to SFTP | revenexx:baseline-io-deliver-to-sftp | out | Streams an export result from its download URL straight onto an SFTP server, however large the file is. |
The staging nodes exist because a catalog can be hundreds of megabytes. Stage From SFTP and Deliver to SFTP stream past the workflow rather than through it, which is why a 469 MB feed is an ordinary case rather than something to work around. The BMECAT catalog import is these nodes in a working flow.
Import and export nodes authenticate with a Revenexx API credential carrying the io scope.
When no node fits
When no built-in node does the job, write one. The contract is public, the package can ship its own credential types and templates alongside the nodes, and the deep authoring detail is the Integration Node SDK. Start at Custom nodes.
Where to go next
- Node configuration — the field types these nodes declare, and how the inspector renders them.
- Expressions — reading one node's output into the next node's config.
- Credentials — what the credential and secret fields on these nodes pick from.
- Extend the Studio — writing your own.