Content
Set attributes, flip public/ready/searchable, run workflow transitions, compute embeddings, summarize.
The node vocabulary
Every node belongs to a category that determines its role in the graph, and the palette is the authoritative list for your installation — platform modules contribute nodes for their own domains alongside the built-ins.
InputThe graph's entry point — receives the triggering value, typed as the accepted event.
TransformReshapes data and always produces an output. JSONata, bridges, and conversions live here.
FetchResolves a full platform entity from a reference in the inbound value — events carry ids, not entities.
CombineFans in — merges multiple inbound branches into one value, keyed by each edge's port name.
RouteBranches — sends the value down one of several output ports. Condition and Switch.
ActionPerforms a side effect or controls execution; some actions suspend the run and resume it later.
OutputMarks the pipeline's result. Optional — a pipeline that only performs actions needs none.
Transforms
The JSONata node shapes or extracts JSON with a single expression. Its inspector expands into a workbench: paste a sample input on one side, edit the expression on the other, and preview the result without leaving the editor.
$eventCreated is bound to the run's occurrence timestamp in every expression.{
"profileId": id,
"displayName": name,
"occurredAt": $eventCreated
}Typed values
The event that seeds the Input node is a real typed object, not a JSON blob, and values keep their serialization as they flow. Nodes that work structurally — JSONata, Condition, Switch — operate on a JSON view; two bridge nodes cross the boundary explicitly.
// the editor checks value kinds as you draw
ProfileCreated → Event → Profile ✓ typed event
Profile → JSONata ✓ json view
JSONata → Get Project (UUID) ✗ not a UUID
Get Id → Get Project (UUID) ✓ typed UUIDActions
Action nodes end most branches — and some control execution itself, suspending the run durably until a timer fires or a job finishes.
Enqueue a platform background job — fire-and-forget, or suspend until it finishes with failures routed out an error port.
Run a stored Kotlin script synchronously; its result flows to downstream nodes, so it can sit mid-graph.
Invoke another pipeline as a sub-graph and pass its result downstream — the composition building block.
Fan a body pipeline out once for every current member of an audience segment, carrying the segment, profile, context, and caller identity into each durable run.
Run a body pipeline once per item of an array, with configurable concurrency and per-item error handling.
Publish a catalogued platform event — the fan-out primitive; every active pipeline accepting it runs.
Suspend the run for a duration or until a timestamp — even one inside the flowing value — then resume.
Send to recipient profiles through the platform's messaging service, as text or HTML.
Post to a Slack incoming webhook referenced by secret name — the URL is never stored in the graph.
POST the inbound JSON to a secret-held URL, optionally signed with HMAC-SHA256 so the receiver can verify it.
When things fail
Some nodes expose a red error port alongside their output. When the node fails, the error routes out that port instead of aborting the run — wire it to notify someone, fall back, or retry another way.
Every node can carry a retry policy: on failure the executor re-runs it up to the configured attempts with fixed or exponential backoff. Retries re-execute the node, so reserve them for idempotent work.
Webhook URLs and signing keys are named, encrypted secrets, resolved only at execution time. The graph JSON, run history, and dry-run traces never contain the value.
Domain nodes
Beyond the built-ins, platform modules contribute nodes for their own domains — resolvers that turn lean events into full entities, and actions that operate on them.
Set attributes, flip public/ready/searchable, run workflow transitions, compute embeddings, summarize.
A moderation toolkit — Moderate Text, evaluate verdicts, and set comment status, composable into custom flows.
Index and remove documents, with a replace mode that clears an entity's previous documents first.
Profile event resolvers, get and set profile attributes, and durable segment-wide pipeline fan-out.
Spec, requirement, and task event resolvers plus project and sprint lookups.
Compute profile signals, infer interests, and classify content for personalization.
A family of CRM sync nodes — create and update objects, manage lists, route by sync state.
Keep exploring
What a pipeline is, how it executes, and what it can do.
A three-pane graph workspace with typed connections and versioned saves.
Trace a sample event through the graph before anything goes live.
Event-triggered, durable execution with every run logged.