Badges & embedding
Not every visitor to your website goes to your status page. A small marker in the footer or the help section brings the information to where people already are.
All the pieces are under Status Pages → your page → Embed, each with a preview and ready-made code to copy.
Status badge
A narrow SVG showing the overall status — like the build badges in a repository.
https://your-page.statuswerk.eu/badge.svg
Parameters:
| Parameter | Values | Default |
|---|---|---|
style |
flat, flat-square, plastic |
flat |
theme |
light, dark |
light |
label |
any text | Status |
Example: /badge.svg?style=flat-square&theme=dark&label=API
In Markdown:
[](https://your-page.statuswerk.eu)
Because it is an image it works everywhere — README, wiki, intranet page.
Widget
Slightly larger than the badge, embedded as an <iframe>, with the overall status in words.
<iframe src="https://your-page.statuswerk.eu/embed/badge"
width="300" height="36" frameborder="0" scrolling="no"></iframe>
Parameter: theme (light or dark).
Feeds
Two feeds with no embedding at all:
- RSS/Atom at
/feed.rss— every incident with its updates. For feed readers or your own processing. - iCal at
/calendar.ics— scheduled maintenances as a calendar subscription. See Maintenance.
Both can be turned off under Subscriptions.
Status API
The status as JSON, no token needed — for scripts, dashboards and your own website. Meant for your customers: they read what the page shows publicly anyway.
curl https://status.example.com/summary.json
const res = await fetch('https://status.example.com/summary.json');
const { status } = await res.json(); // status.indicator: "operational", "major_outage" …
The response contains:
page— the page's name, address, language and time zone.status— the overall status as in the banner:indicator(operational,maintenance,degraded_performance,partial_outage,major_outage) anddescriptionas text in the page's language.uptime—percentoverdaysdays, as the page shows it;nullwhen uptime is hidden.groupsandcomponents— withid,name,status,group_idanduptimeper component (nullwhen it shows no uptime).incidents— the open incidents withtitle,status,impact,url,started_at, the affectedcomponentsand the latest update (latest_update, its message as HTML).maintenances— upcoming and ongoing maintenance, at most five, with their window andurl.
Times are ISO 8601, UTC. It holds only what the page shows: no hidden components or groups, no unlisted entries, none still waiting for approval — and never anything about subscribers. Past incidents are in the RSS feed and on the history page.
Any website may read the address from JavaScript (CORS is open). The response may be cached for 30 seconds; each visitor can fetch it 120 times a minute. The status page's footer links it as “API” while it is offered. Turn it off under Embed → Status API, or through the API with allow_public_api. Turned off, the address answers 404.
On a password-protected or network-restricted page it returns no data (see below). Whoever unlocked the page or sits in an allowed network does get it — but without open CORS and without caching, so neither another website nor a proxy passes it on. For private pages, writes and anything beyond this there is the API with a token.
Embedding and private pages
Badge, widget and the status API do not work on a password-protected or network-restricted page. An image loaded on someone else's website brings neither a password nor a session — it gets an error instead of a status.
That is not a bug but the logical consequence: a publicly embedded badge of a private page would be a way to read the status anyway. If you need both, run two status pages — a public one for the badge, a private one for the detail.
Freshness
Badge and widget are generated on every request. Some platforms — GitHub among them — cache images themselves, so the display can lag by a few minutes there.