---
title: "List status pages"
method: GET
path: "/status-pages"
tags: ["Status pages"]
---

# List status pages

`GET /status-pages`

## Request

- Base URL: `https://api.spectate.net/v1`
- URL: `https://api.spectate.net/v1/status-pages`
- Auth: HTTP bearer

Returns the team's status pages, by name unless you sort.

## Query parameters

- `page` integer
- `per_page` integer
- `filter[visibility]` 'public' | 'private': Who can open a status page. | | |---| | `public` <br/> Anyone. | | `private` <br/> Visitors with the access link, or the password when the page has one. Part of the Team plan and up. |
- `filter[search]` string
- `sort` string

## Response `200`

Paginated set of `StatusPage`

- object
  - `current_page` integer, required
  - `data` StatusPage[], required
    - `id` string, uuid, required: Status page ID
    - `name` string, required: Name, shown as the page title
    - `slug` string, required: The page's subdomain under spectate.page
    - `visibility` 'public' | 'private', required: Who can open a status page. | | |---| | `public` <br/> Anyone. | | `private` <br/> Visitors with the access link, or the password when the page has one. Part of the Team plan and up. |
    - `status` 'operational' | 'degraded_performance' | 'partial_outage' | 'major_outage' | 'under_maintenance', required: A status page component's status, derived from incidents and maintenance. | | |---| | `operational` <br/> Working normally. | | `degraded_performance` <br/> Slower or less reliable than usual. | | `partial_outage` <br/> Down for some visitors or some functions. | | `major_outage` <br/> Down. | | `under_maintenance` <br/> In planned maintenance. |
    - `public_url` string, uri, required: Where visitors open the page: the custom domain once it is verified, else the spectate.page address
    - `access_url` string, uri, required: Opens the page while it is private. Anyone with it gets in; `rotateStatusPageAccessKey` replaces it
    - `custom_domain` string, nullable, required: Your own domain for the page; `null` for none. Visitors use it once it is verified
    - `custom_domain_verification` StatusPageCustomDomainVerification, required: How to prove you own a status page's custom domain: create the TXT record, or point the domain at the CNAME target (which also routes visitors to the page). Then call `verifyStatusPageCustomDomain`.
      - `verified` boolean, required: Whether ownership is proven. A proven domain stays verified when a later check fails
      - `verified_at` string, date-time, nullable, required: When ownership was proven; `null` before
      - `txt_record_name` string, required: Name of the TXT record to create
      - `txt_record_value` string, required: Value of the TXT record
      - `cname_target` string, required: Host to point a CNAME at (subdomains), or an ALIAS (root domains); unique to the page
    - `password_protected` boolean, required: Whether visitors of a private page can also get in with the password
    - `has_password` boolean, required: Whether the page has a password. The password itself is never returned
    - `language` 'en' | 'nl' | 'de' | 'fr' | 'es' | 'it', required: Languages of the public status page chrome and the subscriber emails. Customer-written content (names, incident titles and updates) is never translated. | | |---| | `en` <br/> English. | | `nl` <br/> Dutch. | | `de` <br/> German. | | `fr` <br/> French. | | `es` <br/> Spanish. | | `it` <br/> Italian. |
    - `match_browser_language` boolean, required: Visitors get their browser's language when it is supported, and can switch languages in the footer
    - `logo_link_url` string, uri, nullable, required: Where the logo goes on the public page; `null` for the page's home
    - `contact_url` string, uri, nullable, required: Where the "Get in touch" button on the public page goes, an `https:` or `mailto:` address; `null` for no button
    - `theme` StatusPageTheme, required: How a status page looks. `null` values use the default.
      - `accent` string, nullable, required: Brand colour, as hex; `null` for Spectate's yellow (`#ffea00`)
      - `mode` 'light' | 'dark' | 'system', required: The colour scheme visitors of a status page get before they pick one. | | |---| | `light` <br/> Light. | | `dark` <br/> Dark. | | `system` <br/> The visitor's operating system setting. |
      - `preset` 'spectate' | 'paper' | 'graphite' | 'ocean' | 'forest' | 'lavender' | 'ember' | 'contrast', required: Colour presets of a status page. Colours set in `light` and `dark` override the preset. | | |---| | `spectate` <br/> Neutral greys (default). | | `paper` <br/> Warm cream and sepia ink. | | `graphite` <br/> Soft charcoal, strong lines. | | `ocean` <br/> Clear blues, navy in dark mode. | | `forest` <br/> Sage greens, deep pine in dark mode. | | `lavender` <br/> Lilac, aubergine in dark mode. | | `ember` <br/> Peach and terracotta, warm in dark mode. | | `contrast` <br/> High contrast: pure black and white, bold lines. |
      - `font` 'geist' | 'inter' | 'ibm-plex-sans' | 'dm-sans' | 'manrope' | 'space-grotesk' | 'source-serif' | 'system', required: Typefaces of a status page. | | |---| | `geist` <br/> Geist (default). | | `inter` <br/> Inter. | | `ibm-plex-sans` <br/> IBM Plex Sans. | | `dm-sans` <br/> DM Sans. | | `manrope` <br/> Manrope. | | `space-grotesk` <br/> Space Grotesk. | | `source-serif` <br/> Source Serif. | | `system` <br/> The visitor's system font. |
      - `light` StatusPageThemeColors, required: Colours that override the preset in one colour scheme, as hex (`#0f766e`). `null` keeps the preset's colour.
        - `background` string, nullable, required: Page background
        - `surface` string, nullable, required: Background of cards and panels
        - `foreground` string, nullable, required: Text
        - `muted` string, nullable, required: Secondary text
        - `border` string, nullable, required: Lines and borders
        - `success` string, nullable, required: Operational
        - `warning` string, nullable, required: Degraded performance and maintenance
        - `partial` string, nullable, required: Partial outage
        - `danger` string, nullable, required: Major outage
        - `info` string, nullable, required: Information, such as scheduled maintenance
      - `dark` StatusPageThemeColors, required: Colours that override the preset in one colour scheme, as hex (`#0f766e`). `null` keeps the preset's colour.
        - `background` string, nullable, required: Page background
        - `surface` string, nullable, required: Background of cards and panels
        - `foreground` string, nullable, required: Text
        - `muted` string, nullable, required: Secondary text
        - `border` string, nullable, required: Lines and borders
        - `success` string, nullable, required: Operational
        - `warning` string, nullable, required: Degraded performance and maintenance
        - `partial` string, nullable, required: Partial outage
        - `danger` string, nullable, required: Major outage
        - `info` string, nullable, required: Information, such as scheduled maintenance
      - `display` StatusPageDisplay, required: What a status page shows.
        - `show_uptime_history` boolean, required: Show each component's uptime history
        - `show_latency_charts` boolean, required: Show response time charts under components that have them on
        - `show_incidents` boolean, required: Show incidents
        - `show_maintenances` boolean, required: Show scheduled maintenance
        - `show_subscriptions` boolean, required: Show the Subscribe button. When false, visitors can't subscribe by email or with Discord. Feeds follow `show_feeds`
        - `show_email_subscriptions` boolean, required: Let visitors subscribe by email (when the plan includes subscribers)
        - `show_discord_subscriptions` boolean, required: Let visitors subscribe a Discord channel (when the plan includes subscribers)
        - `show_feeds` boolean, required: Offer the RSS and Atom feeds. When false, the feed URLs answer 404
        - `show_slack_feed` boolean, required: Show visitors the Slack `/feed` command for the RSS feed (public pages with `show_feeds` on). A Slack channel is not a subscriber and doesn't count towards the plan limit
        - `history_layout` 'calendar' | 'timeline', required: How a status page shows the uptime history of its components. | | |---| | `calendar` <br/> A calendar of days (default). | | `timeline` <br/> One row of bars per component. |
        - `uptime_bars` 'fill' | 'solid', required: How a day with problems is drawn in a status page's uptime history. | | |---| | `fill` <br/> Colour part of the bar, by how long the problem lasted (default). | | `solid` <br/> Colour the whole bar. |
      - `logo_url` string, uri, nullable, required: The logo, uploaded in the dashboard; `null` for none (the page shows its name)
      - `logo_dark_url` string, uri, nullable, required: The logo for dark mode; `null` shows `logo_url` in dark mode too
      - `favicon_url` string, uri, nullable, required: The favicon, uploaded in the dashboard; `null` for Spectate's
    - `collapsed_groups` string[], required: Component groups that start collapsed
    - `automation_enabled` boolean, required: Monitor automation: when a monitor linked to a component goes down, an incident "{component} is down" (major outage) opens with `automation_down_message`, and resolves with `automation_recovered_message` when the monitor recovers
    - `automation_down_message` string, nullable, required: Posted when a linked monitor goes down; `{component}` and `{status_page}` are filled in. `null` for a default message
    - `automation_recovered_message` string, nullable, required: Posted when the monitor recovers; `null` for a default message
    - `issue_reports_enabled` boolean, required: Visitors can report problems from the page
    - `issue_reports_show_on_page` boolean, required: While reports are above the threshold, the page says that users are reporting issues
    - `issue_reports_alerts_enabled` boolean, required: Reaching the threshold fires an alert
    - `issue_reports_threshold` integer, required: Reports within `issue_reports_window_minutes` that count as above the threshold, 1 to 1000
    - `issue_reports_window_minutes` integer, required: The window for the threshold, in minutes, 1 to 1440
    - `issue_reports_triggered_at` string, date-time, nullable, required: Since when reports are above the threshold; `null` when they aren't
    - `traffic_alerts_enabled` boolean, required: Alert when views reach `traffic_alert_multiplier` times the usual views for the time of day
    - `traffic_alert_multiplier` integer, required: How many times the usual views alert, 2 to 100
    - `traffic_alert_min_views` integer, required: Fewer views than this in 15 minutes never alert, 10 to 1000000
    - `escalation_paths` EscalationPathReference[], required: Escalation paths the page's alerts (issue reports and traffic spikes) follow; empty for the team's default path
      - `id` string, uuid, required: Escalation path ID
      - `name` string, required: Escalation path name
    - `paused_reason` 'plan_limit' | 'team_paused', required: Why the system (not the user) paused a monitor, host, domain or status page. | | |---| | `plan_limit` <br/> Over the plan limit (trial expired, downgrade); the oldest resources stay active. | | `team_paused` <br/> The whole team's monitoring is paused (no paid plan, staff action or scheduled deletion). |
    - `created_at` string, date-time, required: When the page was created
  - `first_page_url` string, nullable, required
  - `from` integer, nullable, required
  - `last_page_url` string, nullable, required
  - `last_page` integer, required
  - `links` object[], required: Generated paginator links.
    - `url` string, nullable, required
    - `label` string, required
    - `active` boolean, required
  - `next_page_url` string, nullable, required
  - `path` string, nullable, required: Base path for paginator generated URLs.
  - `per_page` integer, required: Number of items shown per page.
  - `prev_page_url` string, nullable, required
  - `to` integer, nullable, required: Number of the last item in the slice.
  - `total` integer, required: Total number of items being paginated.

## Other responses

- `401`: `UNAUTHENTICATED`: no token was sent. `INVALID_TOKEN`: the token is unknown or revoked. `TOKEN_EXPIRED`: the token has expired.
- `403`: `FORBIDDEN`: the token lacks an ability this endpoint requires (listed in `details.required_abilities`). `TEAM_PENDING_DELETION`: the team is scheduled for deletion. `TEAM_SUSPENDED`: Spectate suspended the team.
- `429`: `RATE_LIMITED`: too many requests for this token. Wait for the number of seconds in `Retry-After`.

---

[API](https://skmtc.dev/spectate/apis/spectate-api.md) - [All operations](https://skmtc.dev/spectate/apis/spectate-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spectate/apis/spectate-api/revisions/9b1a233997de?raw)
