Observer
Observer

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_visibility are unconditionally hidden, even when a customer JWT is present — feeds have no auth).
  • Drafts (published_at IS NULL and not a maintenance with scheduled_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).

Was this page helpful?