---
title: "Public status page, SVG uptime badge (issue"
method: GET
path: "/{token}/badge.svg"
tags: ["Public"]
---

# Public status page, SVG uptime badge (issue

`GET /{token}/badge.svg`

## Request

- Base URL: `https://status.uptimemonitoring.com`
- URL: `https://status.uptimemonitoring.com/{token}/badge.svg`
- Auth: none required

A static, namespaced SVG — a fixed "uptime" label plus a
status-colored message, `<pct>% · <state>` (or `no data ·
<state>` when the 30-day average has no data yet) — rendered
from the same cached `View` the HTML page, RSS, Atom, and JSON
siblings share — requests landing on the same cache entry always
render identical state, but a rebuild after the entry's TTL
expires (or a downstream cache holding the two URLs
independently) can leave the badge and page briefly disagreeing
across that boundary. Resolved, cached, and error-handled
identically to those four siblings (same token-shape check, same
`GetStatusPageByToken` lookup folding an unknown/off/deleted/
suspended token into one 404, same view cache and
`Age`/`Cache-Control` computation, recomputed from the live clock
on every response). No
style element, no inline style attribute, no script element, and
no external reference — presentation attributes only, so the
document stays inside the status host's Content-Security-Policy
and renders safely through an image proxy such as GitHub's camo.

## Path parameters

- `token` string, required

## Response `200`

SVG uptime badge.

## Other responses

- `404`: Unknown or malformed token, a page that is off, a deleted monitor, or a suspended account — all indistinguishable, and all five status-host formats (`/{token}`, `/{token}/feed.rss`, `/{token}/feed.atom`, `/{token}/status.json`, `/{token}/badge.svg`) return this identical shape. A malformed token (wrong length, prefix, or a non-hex/uppercase character) never reaches the database lookup the other cases do.
- `500`: The token lookup, the view build, or the format's own render step failed for a reason other than the deliberately indistinguishable 404 cases above — a connection failure, query timeout, or scan error. Distinct from `503` below, which is specifically the shared view-build deadline expiring.
- `503`: The shared view-build deadline (`StatusPageBuildTimeout`, 10s) was exceeded while this request was still live — e.g. database slowness. Distinct from a client disconnecting mid-build, which writes no response at all. Every one of the five status-host formats returns this identical shape, including the `Retry-After` header.

---

[API](https://skmtc.dev/uptimemonitoring/apis/uptimemonitoring-com-api.md) · [All operations](https://skmtc.dev/uptimemonitoring/apis/uptimemonitoring-com-api/llms.txt) · [OpenAPI document](https://skmtc.dev/uptimemonitoring/apis/uptimemonitoring-com-api/revisions/ddcb2a8bc70f?raw)
