Live badges for READMEs and dashboards, and the incident history as RSS
Badges & feeds
Public surfaces
The public, unauthenticated embed surface of a status page. No API key anywhere on this page: everything here is public information by design, same as the status page itself. The dashboard's Branding → Embed page generates feed and calendar URLs with copy buttons. Named badge and widget editors also appear when the account has the relevant access, but modern embeds are not released for general Cloud use. Widget delivery is disabled in production. The public badge routes below remain compatible for existing installations.
All examples use the permanent page address status.example.com. A live custom domain
can also serve the legacy public routes, but copied machine integrations should keep the
permanent address so a later custom-domain change does not strand them.
Legacy badge routes
These shields.io-style SVG routes remain available for compatibility with existing embeds and are cached for five minutes. The dashboard does not configure them. Named modern badges are available only in enabled development environments. See the Product preview guide for the conditional editor workflow.
| URL | What it shows |
|---|---|
/badge.svg | The whole page: operational, degraded
(some monitors down), down, or unknown. |
/badge/{service}.svg | One monitor, labelled with its name:
operational, down, or unknown. |
{service} is the monitor's slug, visible in the dashboard's monitor list, or
programmatically in GET /api/public/{slug}/summary (each entry's
slug field).
Styles
?style=uptime replaces the status word with a 30-day uptime figure, e.g.
99.97%. The window is fixed at 30 days regardless of the history window your page
displays. That is the badge convention, and the two are different measurements.
[](https://status.example.com/)JSON variant
/badge.json and /badge/{service}.json return the same data in the
shields.io endpoint-badge schema, so shields.io can render it in any of its own styles:
{
"schemaVersion": 1,
"label": "Checkout API",
"message": "operational",
"color": "#2F7A55"
}Never a dead end
A badge URL never 404s. An unrecognised service slug (renamed, deleted, or a typo) and even an
unrecognised hostname render the grey unknown badge, because a broken image icon in
someone else's README reads as the service itself being broken, so the badge always draws.
Feed
/feed.xml is the incident ledger (the latest 100 entries) as RSS 2.0, the
same data the page renders. One URL, two optional query filters:
| Filter | Effect |
|---|---|
?lang={code} | The feed in any language the page publishes
(en, ar, fr, es). An unpublished code
falls back to the default language. |
?service={slug} | Only incidents that touched that monitor. An unknown slug yields a valid empty feed, never a 404, because a renamed monitor must not hard-break a standing subscription. |
Filters combine with &:
https://status.example.com/feed.xml?service=api&lang=arThe feed is cached for five minutes, like the badges.