Bosca / Pipelines

The node vocabulary

Seven categories. One 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.

Input

The graph's entry point — receives the triggering value, typed as the accepted event.

Transform

Reshapes data and always produces an output. JSONata, bridges, and conversions live here.

Fetch

Resolves a full platform entity from a reference in the inbound value — events carry ids, not entities.

Combine

Fans in — merges multiple inbound branches into one value, keyed by each edge's port name.

Route

Branches — sends the value down one of several output ports. Condition and Switch.

Action

Performs a side effect or controls execution; some actions suspend the run and resume it later.

Output

Marks the pipeline's result. Optional — a pipeline that only performs actions needs none.

Transforms

JSONata, with a workbench

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.

  • Declare the expression's output type and downstream typed input slots accept the result.
  • Optionally validate the result against a JSON Schema before it flows on.
  • $eventCreated is bound to the run's occurrence timestamp in every expression.
jsonata — extract and rename
{
  "profileId": id,
  "displayName": name,
  "occurredAt": $eventCreated
}

Typed values

Types flow. JSON when you ask.

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.

  • Serializable → JSON encodes a typed value while remembering its origin; JSON → Typed restores it.
  • Edges also carry scalars — string, integer, number, boolean, UUID — and input slots declare which kinds they accept.
  • To String, To UUID, and Get Id make a type change explicit instead of relying on coercion.
a typed edge, refused
// 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 UUID

Actions

Do something with the result

Action nodes end most branches — and some control execution itself, suspending the run durably until a timer fires or a job finishes.

Execute Job

Enqueue a platform background job — fire-and-forget, or suspend until it finishes with failures routed out an error port.

Execute Script

Run a stored Kotlin script synchronously; its result flows to downstream nodes, so it can sit mid-graph.

Run Pipeline

Invoke another pipeline as a sub-graph and pass its result downstream — the composition building block.

For Each

Run a body pipeline once per item of an array, with configurable concurrency and per-item error handling.

Dispatch Event

Publish a catalogued platform event — the fan-out primitive; every active pipeline accepting it runs.

Delay / Wait Until

Suspend the run for a duration or until a timestamp — even one inside the flowing value — then resume.

Send Email

Send to recipient profiles through the platform's messaging service, as text or HTML.

Send Slack Message

Post to a Slack incoming webhook referenced by secret name — the URL is never stored in the graph.

Send Webhook

POST the inbound JSON to a secret-held URL, optionally signed with HMAC-SHA256 so the receiver can verify it.

When things fail

Failure is part of the graph

Error ports

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.

Retry policies

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.

Secrets

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

Your platform, in the palette

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.

Content

Set attributes, flip public/ready/searchable, run workflow transitions, compute embeddings, summarize.

Comments

A moderation toolkit — Moderate Text, evaluate verdicts, and set comment status, composable into custom flows.

Search

Index and remove documents, with a replace mode that clears an entity's previous documents first.

Audience

Profile event resolvers plus get and set profile attributes.

Work Ops

Spec, requirement, and task event resolvers plus project and sprint lookups.

Recommendations

Compute profile signals, infer interests, and classify content for personalization.

HubSpot

A family of CRM sync nodes — create and update objects, manage lists, route by sync state.

Keep exploring

More on Pipelines