Event nodes
An event node is the starting point of a topology — the place a message comes in from. Orchesty exposes three flavours, each suited to a different trigger source:
| Event | Trigger | Callback URL exposed | Worker code needed |
|---|---|---|---|
| Start | External HTTP call (manual Run or your own client) | Yes — name-based, plus a strict ID-based variant | None — pure entry point |
| Cron | Platform-driven schedule (CRON expression) | No — the platform invokes the topology itself | None for the trigger; your handler runs as a normal node |
| Webhook | External service that registered a callback through an Application | Yes — token-protected, name-based | An AWebhookApplication that owns the subscribe / unsubscribe handshake |
For background see Concepts: Topologies. For the Webhook subscription lifecycle, the SDK contract, and orphan handling, see Patterns: Webhooks.
Common UI surface #
Every event node exposes the same skeleton in the topology canvas:
- A two-state label above the node summarising whether the event is active (
Disable/Enablefor Start and Cron;Off/Subscribedfor Webhook). - An inline action bar with the most common operations (
Disable | Run | Copy URLfor Start and Cron;Subscribe/Unsubscribe/Copy URLfor Webhook). - A right-click context menu with the same actions plus power-user variants (e.g.
Copy strict version URLfor Start).
Screenshot pending
Event node label and context menu
Selected Start node showing the inline label (Disable | Run | Copy URL) and the right-click menu with the Copy strict version URL entry.
target 1200 x 600
A node is greyed out on the canvas whenever it cannot fire:
- Start / Cron — when its
enabledflag is off in the topology detail. - Webhook — when no live subscription exists (
registered: false).
The visual treatment is unified across all three so an operator can tell at a glance which entry points are actually live.
Start event #
A Start event is the simplest externally-callable entry point. Drop the node into the canvas, connect it to the first action node, save and publish. There is no worker code and no Application — just a named node that resolves to a stable HTTP URL once the topology is published.
Name-based URL — recommended default #
{base}/topologies/{topologyName}/nodes/{nodeName}/run-by-name
- Resolves at request time to whichever topology version is currently enabled for the given name. Republish a new version and integrators keep hitting the same URL.
- Available from the inline
Copy URLaction and from theCopy URLentry in the right-click menu. - Returns
404for an unknown topology name and for a topology that has no enabled version. - Routed through the API gateway — calls must carry an authorization token.
Strict version URL — power-user only #
{base}/topologies/{topologyId}/nodes/{nodeId}/run
- Pinned to one specific topology version via Mongo ObjectIds. Useful for rollback testing, A/B comparison, or locking a tester to a specific build.
- Reachable only from the right-click menu under
Copy strict version URL— the inline label stays clean. - Same authentication requirements as the name-based variant.
Rule of thumb. Share the name-based URL with anyone outside the team. Reach for the strict URL only when you explicitly need version pinning.
Manual run #
The Run action on the canvas opens a small dialog where you can paste a JSON body and fire the topology in one click. This is the fastest way to debug a topology while you are wiring it up — no curl, no Bearer token, no second tool.
Calling from outside #
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"$BASE/topologies/order-sync/nodes/start/run-by-name" \
-d '{"orderId": 42}'
$BASE is the API gateway base URL exposed by your instance. Disable a Start event from the canvas (or the topology detail) to stop accepting calls without removing the node.
Cron event #
A Cron event runs the topology on a fixed schedule. There is no callback URL and no Application: the platform's cron-api service is what fires the trigger when the expression matches.
Screenshot pending
Cron node configuration modal
Cron node settings dialog showing Name field, Crontab field, optional Parameters JSON, the human-readable preview of the expression, and the next two scheduled runs.
target 1100 x 560
Per-node configuration #
Open the node (double-click or right-click → settings) and set:
- Name — a human-readable identifier scoped to the topology.
- Crontab — standard five-field expression (
minute hour day-of-month month day-of-week). - Parameters — optional JSON object passed as the body of every scheduled run.
The dialog renders a human-readable description of the expression and the next two fire times so you can verify the cadence at a glance.
Crontab examples #
| Cadence | CRON |
|---|---|
| Every 5 minutes | */5 * * * * |
| Hourly at minute 10 | 10 * * * * |
| Weekdays at 08:00 | 0 8 * * 1-5 |
| Nightly at 02:30 | 30 2 * * * |
| First Monday of each month at 06:00 | 0 6 1-7 * 1 |
Scheduled Tasks page #
Every Cron node across every topology is also listed on the global Scheduled Tasks page (/scheduled-tasks in the Admin UI). Use it to:
- Enable / disable individual schedules without opening the topology.
- Spot topologies that have a Cron node with
Cron is not set(an empty crontab) — the row shows a red warning and never fires until you fix it. - See the next run time per schedule.
Screenshot pending
Scheduled Tasks page
Global list of cron events across all topologies with toggle, crontab column, and next-run column. Highlight a row with the 'Cron is not set' warning.
target 1200 x 560
Behaviour notes #
- Per-node disable keeps the schedule entry on the topology but stops it from firing. Re-enable from the canvas, the topology detail, or the Scheduled Tasks page.
- No callback URL — Cron is push by the platform; integrators never call it.
ApplicationTypeEnum.CRONis not used for plain scheduled topology starts. That enum is reserved for applications whose lifecycle is cron-driven (typically polling syncs that need to refresh state on a tick); a topology with a Cron node needs no application at all.
For the handler patterns inside the topology that runs on a schedule (watermark vs full-snapshot, overlap, time zones, catch-up), see Patterns: Scheduled processes.
Webhook event #
A Webhook event is an entry point whose lifecycle is owned by an Application. The flow is:
- The user installs an Application that extends
AWebhookApplication. - The user drops a Webhook node into a topology and picks one of the events the Application advertises (
<application>.<event>). - The user clicks Subscribe in the topology detail. The platform calls the Application's subscribe DTO upstream and stores the live registration.
- The third-party service POSTs to the resulting token-protected URL whenever the event fires.
For the SDK contract, the Subscribe / Unsubscribe lifecycle, parameter handling, the cascade on topology enable / disable, and the orphan banner, see Patterns: Webhooks. This section covers only what the canvas exposes.
Picking a subscription in the editor #
The picker is built into the editor. After you drop a Webhook node:
- Double-click the node — opens a search-friendly submenu listing every webhook event from every installed
AWebhookApplication. Each entry shows<app>.<event>and the human-readable description the Application advertises. - Right-click → Pick subscription — same menu, accessed from the context menu instead.
Selecting an event sets the node's action and — importantly — its name to the canonical <application>.<event> form. Webhook nodes are not user-renameable: the editor hides the rename UI for Webhook circles and the schema parser re-derives the canonical name on save, so even hand-crafted schema imports cannot drift away from the convention.
Screenshot pending
Webhook subscription picker
Editor's actions submenu filtered to type 'webhook', showing two or three example entries with icon, app.event name, and description.
target 900 x 480
Lifecycle actions on the topology detail #
Once the topology is published, the detail page exposes the full lifecycle on the webhook node:
| Badge | Inline actions | Behaviour |
|---|---|---|
Off | Subscribe | Opens a small modal with one optional Parameters (JSON object) field. On submit the platform calls the Application upstream and persists the live registration plus the token used to receive callbacks. |
Subscribed | Unsubscribe, Copy URL | One-click Unsubscribe, idempotent on the backend. Copy URL returns the live token-protected callback URL. |
To change parameters on a live webhook, click Unsubscribe and then Subscribe again — the modal pre-fills the parameter field with the values used last time, so re-confirming is a single click.
Callback URL #
{startingPoint}/topologies/{topology}/nodes/{node}/token/{token}/run
- Token-protected, not Bearer. The token is generated when the webhook is subscribed and is the only authentication the route enforces. Treat the URL as a credential; anyone holding it can fire the event.
- Available only when the webhook is
Subscribed—Copy URLrefuses to copy a URL without a live token and shows a warning toast instead. There is no ID-based debug variant for webhooks because external providers cannot post to those. - The same canonical URL is used by the SDK when registering with the upstream provider and by the UI when you click
Copy URL.
curl -X POST \
-H "Content-Type: application/json" \
"$STARTING_POINT/topologies/order-sync/nodes/pipedrive.order.created/token/$TOKEN/run" \
-d '{ "id": 42, "status": "created" }'
$STARTING_POINT is the public starting-point URL of your instance.
See also #
- Concepts: Topologies
- Patterns: Webhooks — SDK contract, lifecycle, orphan handling
- Patterns: Scheduled processes — handler patterns for cron-driven topologies
- Operations: Webhook operations — self-hosted migrations and diagnostic CLI
- Reference: Node.js / AWebhookApplication
- Reference: Node.js / WebhookSubscription