RSS / Atom feed reference
Public feed shape, caching headers, and exclusion rules.
Every public status page exposes both Atom and RSS feeds:
GET https://<subdomain>.<host>/feed.atom
GET https://<subdomain>.<host>/feed.rss
Content
One entry per incident message + one per maintenance lifecycle event (scheduled / started / completed / canceled). The granularity matches what a feed reader expects: each update on a single incident is a separate item, sorted newest-first.
Headers
Content-Type: application/atom+xml; charset=utf-8 (or application/rss+xml)
Cache-Control: public, max-age=60
ETag: "obs-<count>-<latest-event-ms>"
The ETag is computed from the count of feed-eligible entries and the
maximum of (published_at, resolved_at, actual_start_at,
actual_end_at, canceled_at, message dates). A repeat fetch with
matching If-None-Match returns 304 Not Modified with no body.
Exclusions
The feed excludes:
- Customer-scoped incidents (rows in
update_customer_visibilityare unconditionally hidden, even when a customer JWT is present — feeds have no auth). - Drafts (
published_at IS NULLand not a maintenance withscheduled_start_at). - Soft-deleted rows.
Discoverability
Status pages emit a <link rel="alternate" type="application/atom+xml" href="/feed.atom"> in the page <head> so most feed readers auto-detect the URL.
Limit
Default 50 entries. Override via ?limit=200. The route caps at the
hard limit set on the underlying query (200 today).