Feed syndication

Feed syndication and webhook subscriptions.

Route normalized developer updates into signed webhooks, team digests, APIs, archives, and custom feeds without coupling delivery to source polling.

TriggerPoll, WebSub, provider webhook
MatchTenant and topic filters
DeliverSigned, idempotent events
RecoverRetry, dead letter, replay
Destinations

Generate several views from one canonical history.

Destination-specific formatting belongs after normalization, so the same source record can serve machines and people without disagreement.

Delivery contract

Accept once. Deliver idempotently. Replay deliberately.

A source update should be durable before any destination is called.

1
Commit change eventsRecord created, updated, or withdrawn state with the configuration version that matched.
2
Create destination jobsGenerate a stable event and idempotency key for each subscription and destination.
3
Sign and attemptUse per-destination secrets, bounded timeouts, and safe response capture.
4
Retry or replayKeep automatic backoff separate from an operator- or customer-requested replay.
feed.entry.created
{
  "event_id": "evt_01J...",
  "type": "feed.entry.created",
  "created_at": "2026-10-23T18:42:13Z",
  "subscription_id": "sub_01J...",
  "data": {
    "source_id": "src_01J...",
    "entry_id": "itm_01J..."
  }
}
Push plus reconciliation

Use WebSub for speed and polling for completeness.

A lease-based push signal lowers delay. Scheduled reconciliation recovers missed notifications and confirms the canonical feed state.

Keep delivery independent from ingestion.

One failing destination should never delay source discovery or corrupt canonical entry history.

Discuss syndication design