Skip to content

Core Concepts

This page explains the core entities you will work with when building automations. Understanding these concepts makes the UI and configuration straightforward.


An Event is a single unit of work. It is created when a Source fires and carries:

  • A Flow — what kind of task should run
  • A payload — a JSON document of data passed to the executing module
  • A state — tracks where the event is in its lifecycle
StateMeaning
QUEUEDWaiting for an available Sink
RUNNINGA Sink is currently executing the task
SUCCESSCompleted successfully
WARNINGCompleted with warnings
ERRORFailed
TIMED_OUTSuperseded by a newer schedule firing — the event was queued but never dispatched

Events are never deleted automatically. They accumulate as an audit trail and can be queried and filtered on the Events screen.


A Flow (the user-facing name for what the API calls an Event Type) is a named definition that describes:

  • Which Sink Type should execute the task (e.g. a Python sink, a PowerShell sink)
  • Which Source Type is allowed to fire it
  • Which Action to run when the event dispatches
  • The chain — what runs next on success or failure (see Chaining)

Think of a Flow as a template. One Flow can be triggered by many individual events over time. Flows are created and managed on the single Flows screen (sidebar → Flows): pick the trigger, the target, the action — and, once the flow exists, its chain.

Parameters are configured on the Action, never on the flow — see Actions.


An Action defines the code that executes when a Flow fires. It is a pure, reusable definition:

  • A module — a reference to a Library Module that contains the code to execute
  • Parameters — ordered key/value pairs injected at runtime (STATIC / DATA / SECRET)

Actions carry no chaining configuration — chaining is flow-scoped (see below). The same Action can be linked to many Flows, which makes it easy to share common tasks (e.g. a sendmail failure handler) across different triggers.

Chaining is defined per flow, because the same action means different follow-ups in different flows. A chain link is:

(from action, success|failure) → (next action, runs on …)
  • Fan-out: an action can have several successors per outcome — each runs as an independent branch, in the order you set.
  • Runs on: defaults to auto (the flow’s own sink type). Pick another sink type for steps that need a different machine; the next action’s module must be available on that type.
  • Depth: a chained action can itself chain further.

When an action finishes, the sink reports the outcome and result data. The Hub resolves the flow’s links and creates one chained event per matching link — the result data becomes the payload. No matching link → the run ends.

flowchart TD W["Webhook fires"] S1["copyfile"] S2["process"] S3["sendmail"] W --> S1 S1 -->|success| S2 S1 -->|failure| S3

See the Actions & Libraries guide for a full walkthrough.

Every event of a single trigger run shares a run id, stamped on the root event and inherited by every chained event — including fan-out branches. Click the run badge on the Events screen to see the whole run as one tree; the Logs screen shows the Flow and Action columns so each log entry points at its step.

The module-level Result.Next mechanism (modules naming the next event type) is deprecated — chaining is defined in the flow editor only.


A Library is a named collection of code modules attached to one or more Sink Types. It represents a package or bundle of related functionality.

FieldDescription
NameA human-readable label (e.g. base-utils, notification-modules)
VersionOptional version string for tracking changes
LinkOptional URL to the packaged code
DescriptionOptional free-text description
Sink TypesThe sink types the library is attached to

Libraries are managed on the Libraries screen (sidebar → Automation → Libraries): platform templates (multi-tenant, read-only, copied with Make my copy — the copy pins its version) and your libraries (created and edited by your tenant, including modules).


A Library Module represents a single importable code unit within a Library. It is the entity that an Action references as its executable code.

A module’s import name is what the sink agent resolves at runtime (e.g. my_package.process_data). Modules can carry an optional description, shown as helper text in module pickers. One Library typically contains several related modules.

The relationship chain is:

SinkType → Library → LibraryModule → Action → Flow

See the Actions & Libraries guide for details on creating and configuring Libraries and Modules.

A Source is a registered instance of a source client — for example, a specific webhook endpoint or a running EventGrid consumer.

Sources are associated with a Source Type, which defines what kind of source it is (webhook, scheduler, EventGrid, or custom).

The three layers:

  1. Source Type — the definition. Either a platform template (Webhook, Scheduler, EventGrid, MCP — system flag) or your tenant’s copy of one. Templates are inert: to use one, click Make my copy on the Types tab — the copy gets the template’s config params, secret, and node coverage verbatim, and shows “based on