Integration hub

Overview
The hub moves data across system boundaries: out to external services and in from them. This is built as a flow — a chain of blocks that records travel through.
Two things distinguish the hub from automation: it works at the boundary to FOREIGN systems, and it processes lists of records rather than single events. Rules inside the system remain the business of automation — there is deliberately only one rule engine.
A block without incoming records does not run. That is not a fault but the rule: a flow without data has nothing to do.
Core tasks
Build a flow. In the editor you assemble blocks and connect their outputs. Values are formed with formulas of the form {{= … }} — there is no code here.
Maintain mappings. A mapping translates fields between two systems. A lookup table translates values (for example foreign status names into your own).
Start from a template. Templates bring ready-made flows for common tasks.
Trace runs. The run journal shows every pass with the data per block. A failed run can be resumed instead of started over.
Read from the store. The store keeps values between runs — for example the position of the last fetch, so a flow continues where it left off.
Fields in detail
A flow connects system boundaries: it fetches records from outside, reshapes them and writes them in — or the other way round. Rules inside the system belong in automation; two rule engines side by side would be one too many.
| Field | Required | Values / format | What it does |
|---|---|---|---|
Key flowKey | yes | text, max. 100 characters | The flow's technical identifier. Do not change it once it runs. |
Name name | yes | text, max. 160 characters | What the flow is called in the list. |
Description description | no | text | What it does. The paragraph that answers, a year from now, whether it may be switched off. |
Trigger triggerType | yes | event, schedule, webhook, manual | When it runs. Webhook means a foreign system calls in. |
Trigger settings triggerConfig | no | depending on the type | Which event, which schedule. The time mechanics come from automation — here they are only named. |
Webhook secret webhookSecret | with webhook | text | How an incoming call identifies itself. Without a secret a flow cannot even be enabled — an open webhook would be a door without a lock. |
Signature scheme webhookScheme | no | text, max. 40 characters | How the signature is formed. |
Queue queueName | no | text, max. 60 characters | Which queue the flow runs in. A queue of its own stops a large import from holding up mail dispatch. |
Acting user runAsUserUlid | yes | an existing account | In whose name writing happens. Every writing block runs through this identity — the flow can do nothing this account may not, and the audit log says so. |
Brand brandId | no | one of your brands | Which brand the flow works for. |
Variables variables | no | label-to-value mapping | Values valid across the flow — addresses, identifiers, thresholds. Secrets belong here, not in individual blocks. |
Blocks nodes / connections edges | yes | list | The flow itself: what happens and in what order. A block with no incoming records does not run — empty does not mean "once without data" but not at all. |
Block node / after after | — | a single block and its predecessor | Inserts a block at a position while editing. |
Test data testPayload | no | structure | Sample data for the trial run. The trial run shows per block what came in and what came out — the only usable way to develop a flow. |
Payload payload | — | structure | The data of a concrete run. |
Bundle bundle | — | structure | An exported flow for import and export. Secrets are not included; they are set anew at the destination. |
Settings & permissions
- Read:
connect.flow.view· Run journal including per-block data:connect.run.view - Build and change:
connect.flow.manage - Start, test, resume:
connect.flow.execute
Module flag: module.connect. Every writing block goes through the internal API in the name of a user — a flow can therefore never do more than the human it runs as.
FAQ & troubleshooting
The flow runs but nothing happens. Check whether any records arrive at the first block. Without incoming data the chain stands still.
The test run works, the real one does not. The test run uses sample data. Check the real values in the run journal.
A field arrives empty. Usually the mapping is missing, or the foreign system delivers a different field name than expected.