---
title: "Public status page, JSON (issue"
method: GET
path: "/{token}/status.json"
tags: ["Public"]
---

# Public status page, JSON (issue

`GET /{token}/status.json`

## Request

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

## Path parameters

- `token` string, required

## Response `200`

JSON status page.

- StatusPageJSON: The public `GET /{token}/status.json` response (issue #368). Served from the status host (`STATUS_PAGE_URL`), unauthenticated — the token is the only credential.
  - `monitor_name` string, required
  - `monitor_host` string, required
  - `status` 'up' | 'down' | 'flapping' | 'paused' | 'unknown', required
  - `headline` string, required
  - `last_checked_at` string, date-time
  - `down_since` string, date-time
  - `region_clause` string: Present only when status is down and the open incident carries a region tally.
  - `days` StatusPageDay[], required
    - `date` string, date, required
    - `uptime_pct` number, float, nullable, required
    - `not_monitored_yet` boolean, required: True for a day before the monitor existed — rendered grey, never a fabricated 0% or 100%.
  - `uptime_pct_30d` number, float, nullable, required: Plain average of the days whose uptime_pct is not null.
  - `avg_response_ms` number, float, nullable, required
  - `history` StatusPageIncident[], required
    - `id` integer, required
    - `started_at` string, date-time, required
    - `clipped_start` boolean, required: True when the incident actually began before the 30-day window.
    - `resolved_at` string, date-time
    - `ongoing_over_30_days` boolean, required: True for a still-open incident older than 30 days — rendered as "Down for more than 30 days".
  - `claimed` boolean, required
  - `generated_at` string, date-time, required

## 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)
