---
title: "Rotate the access key"
method: POST
path: "/status-pages/{statusPage}/access-key/rotate"
tags: ["Status pages"]
---

# Rotate the access key

`POST /status-pages/{statusPage}/access-key/rotate`

## Request

- Base URL: `https://api.spectate.net/v1`
- URL: `https://api.spectate.net/v1/status-pages/{statusPage}/access-key/rotate`
- Auth: HTTP bearer

Replaces the key in the page's `access_url`: the old link stops working, and every visitor
of the private page is signed out, including those who entered the password.

## Path parameters

- `statusPage` string, uuid, required

## Response `200`

The status page with its new access URL.

- StatusPage: A status page: the public page that shows your components' status, incidents and maintenance.
  - `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

## 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.
- `404`: `RESOURCE_NOT_FOUND`: there is no such resource in this 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)
