X-Nexio-Delivery header (see Effects).
Subscriptions are a capability Nexio operates. Tell Nexio what you want to happen and when; Nexio writes the subscription and turns it on. There is no customer API or portal page for subscriptions. This page explains what a subscription can do so you can ask for the right one, and what guarantees apply.
How it works
- A platform event is recorded, or a schedule slot comes due and the scheduler records a
schedule.firedevent. - About every 5 minutes, while your organization’s event log is in
shadoworlivemode, the dispatcher reads up to 500 events it has not yet evaluated, recorded in the last 24 hours and at least 30 seconds ago (so a slow commit is not missed), and matches each against your organization’s enabled subscriptions. - Each match goes through admission: loop check, shadow check, debounce, and budgets. The result is recorded as a dispatch, whether or not it runs.
- An admitted dispatch is queued. A worker runs the effect, with retries on transient failure.
- The dispatch records the outcome. Nexio operators can replay a dispatch or a whole subscription.
Triggers
A subscription has one trigger kind. Event trigger. Fires on events that match all of these:
Schedule trigger. Fires on a repeating slot. There are no cron expressions.
Each due slot records one
schedule.fired event with the slot start as its dedupe key, so a slot fires once even if the scheduler runs twice. The scheduler runs about every 5 minutes.
Effects
Each subscription has one effect. The effect kinds are a fixed set of four, defined in code. An effect’s configuration is checked strictly when Nexio saves the subscription; an unknown field is refused.
A retried dispatch keeps its dispatch ID, and each effect uses that ID so a retry does not repeat its work. The one exception is
deliver_webhook: a post can reach your receiver and then be sent again when the response is lost, so your receiver deduplicates.
run_engineuses the dispatch ID as the run’s idempotency key, so a retry finds the run it already submitted. If admission refuses the run (for example the run cap or a request limit), the dispatch fails permanently with the refusal code.emit_eventuses the dispatch ID as the child event’s dedupe key.run_eval_setstamps the evaluation run with the dispatch, so a retry finds it.deliver_webhookcan post more than once for one dispatch. Every attempt carries the dispatch ID asX-Nexio-Delivery; deduplicate on it.
code.deployed event matches a subscription (debounced on commit_sha) that emits eval.run.requested, and a second subscription on eval.run.requested runs run_eval_set. Repeated deploy events for one commit inside the debounce window start one evaluation.
Dispatch states
Every match is recorded as a dispatch, including matches that do not run. This is the only place the model is defined.
The four refused and skipped states run only if replayed, and do not count toward budgets or debounce windows.
Budgets and debounce
Loop refusal
An automation cannot loop forever. When a matched event has acaused_by parent (for example an event recorded by emit_event), the dispatcher walks its caused_by chain first:
- If the event has 4 or more ancestors on the chain, the match is
loop_refused. - If this same subscription emitted any ancestor of the event, the match is
loop_refused(re-entry).
Retries and automatic disable
Failures are either transient (retried) or permanent (not retried). An unclassified error is transient. For
deliver_webhook, a 2xx is success; 408, 429, and any status of 500 or greater (including nonstandard codes above 599) are transient; every other code is permanent. This differs from run webhook endpoints, whose retry policy decides; see Retry policies.
Replay
Nexio operators can replay work, with a named reason that is recorded:- Replay one dispatch. The dispatch is queued again under a fresh claim. It is refused while an attempt is still running.
- Replay a subscription from a date. Nexio scans every event since that date and creates a dispatch, marked
is_replay, for each matching event that has no dispatch for the subscription’s current version yet. Replay matches regardless of transition cause. It follows the organization’s mode, so inshadowit recordsskipped_shadow. It is refused when the event log isoff.
Versions and audit
Every change to a subscription, including an automatic disable, is saved as a new version with who made it and the reason. A dispatch keeps the version it matched and runs against that version, even if the subscription changes before the dispatch runs. New subscriptions are disabled by default.Limits and defaults
What you configure
Nothing directly. Tell Nexio the trigger you want (an event type or a schedule), the condition, and the effect. Nexio sets up the subscription and enables it. If the effect isdeliver_webhook, register the endpoint first with Create webhook endpoint and send Nexio its ID.
Platform events
The events a subscription can match.
Inbound events
Send your own events to trigger automations.