Skip to main content

Event Delivery

Event Delivery sends you an HTTP request whenever something changes in your Helix feeds and fact-checks — new articles, event updates, fact-check completions — so your systems can react without polling.

A destination is not tied to one kind of event

Event Delivery separates where a delivery goes from what triggers it. A destination receives whatever its subscriptions match: news, event and fact-check events can all arrive at the same URL. Do not assume a destination only ever receives one kind of event.

Two objects, not one​

Destinations — where​

A destination is an HTTP endpoint that can receive deliveries: a URL, optional static headers, a debounce window, and one or more signing secrets. A destination knows nothing about which events it will receive — it is purely "here is a place to send things, and here is how to prove it came from us."

POST /events/destinations
{
"name": "Newsroom CMS",
"transport": "webhook",
"config": { "url": "https://cms.acme.com/hx" }
}

Subscriptions — what​

A subscription belongs to a destination and declares which events it receives: a set of event-type patterns (exact types or wildcards, such as news.*) and a feed scope (every feed the organization can see, every feed of one kind, or a specific pinned list).

POST /events/destinations/{ref}/subscriptions
{
"eventTypes": ["news.*"],
"scopeKind": "feeds",
"feeds": [{ "feedType": "news", "feedId": "…" }]
}

A pinned feed's feedType is news or events (plural).

One destination can hold several subscriptions. A single URL can therefore receive news.* from two specific feeds and factcheck.* for the whole organization at once, with the URL registered once.

Why destinations and subscriptions are separate​

Splitting "where to send it" from "what to send" means:

  • One endpoint, many rules. Register the URL once as a destination, then layer as many subscriptions on it as you need.
  • Routing is data, not a hardcoded per-domain switch. Adding a new event type never requires a new integration point — it is just another value a subscription's eventTypes pattern can match.
  • Scope is explicit. scopeKind: "all", "feed_type", or "feeds" says exactly what each subscription can see.

What's next​

  • Concepts — the envelope, the event type taxonomy, wildcards, feed scoping, and debounce.
  • Quickstart — create a destination, subscribe, send a test delivery, and receive your first delivery.
  • Signature Verification — verify that a delivery came from Helix.
  • Reliability — retries, auto-disable, replay, and backfill.
  • API Reference — the full /events/* surface.