Spectate API

Public pages that show the status of your components, your incidents and scheduled maintenance, on <slug>.spectate.page or your own domain. Visitors can subscribe to updates by email and report problems. The plan limits the number of pages; private pages, password protection and custom domains depend on the plan too. Logos and the favicon are uploaded in the dashboard.


List status pages

GET
https://api.spectate.net/v1
/status-pages

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

List status pages › query Parameters

page
​integer

Page number, from 1.

Default: 1
per_page
​integer

Status pages per page, 1 to 100.

Default: 25
filter[visibility]
​StatusPageVisibility · enum

Only pages with this visibility.

Who can open a status page.

public
Anyone.
private
Visitors with the access link, or the password when the page has one. Part of the Team plan and up.
Enum values:
public
private
filter[search]
​string

Case-insensitive text in the name, slug or custom domain.

sort
​string

Sort by name or created_at. Prefix - for descending. Default name.

List status pages › Responses

Paginated set of StatusPage

current_page
​integer · min: 1 · required
​StatusPage[] · required
first_page_url
​string | null · required
from
​integer | null · min: 1 · required
last_page_url
​string | null · required
last_page
​integer · min: 1 · required
​object[] · required

Generated paginator links.

next_page_url
​string | null · required
path
​string | null · required

Base path for paginator generated URLs.

per_page
​integer · min: 0 · required

Number of items shown per page.

prev_page_url
​string | null · required
to
​integer | null · min: 1 · required

Number of the last item in the slice.

total
​integer · min: 0 · required

Total number of items being paginated.


Create a status page

POST
https://api.spectate.net/v1
/status-pages

Creates the page on <slug>.spectate.page; without a slug it is derived from the name. Add components next (createStatusPageComponent). The plan limits the number of pages (403 PLAN_LIMIT_REACHED); private pages, password protection and custom domains need a plan that includes them (403 PLAN_FEATURE_UNAVAILABLE). Escalation paths must belong to the team.

Create a status page › Request Body

A new status page. Settings left out get their defaults.
name
​string · maxLength: 255 · required

Name, shown as the page title

Example: Acme status
slug
​string · maxLength: 63 · pattern: ^[a-z0-9](?:[a-z0-9-…

The page's subdomain under spectate.page: lowercase letters, digits and dashes. Leave out to derive it from the name

Example: acme
visibility
​StatusPageVisibility · enum

Who can open the page. Private pages are part of the Team plan and up (403 PLAN_FEATURE_UNAVAILABLE)

public
Anyone.
private
Visitors with the access link, or the password when the page has one. Part of the Team plan and up.
Enum values:
public
private
custom_domain
​string | null · maxLength: 253

Your own domain for the page, such as status.acme.com; null for none. Part of paid plans (403 PLAN_FEATURE_UNAVAILABLE otherwise). A new domain needs to be verified again: see custom_domain_verification and verifyStatusPageCustomDomain

Example: status.acme.com
password_protected
​boolean

Let visitors of a private page also get in with a password. Part of paid plans (403 PLAN_FEATURE_UNAVAILABLE otherwise); turning it on needs a password unless the page has one

password
​string | null · minLength: 8 · maxLength: 255

The password, 8 to 255 characters. Write-only; leave out or send null to keep the current one

Example: correct-horse-battery
language
​StatusPageLanguage · enum

Language of the public page and of subscriber emails

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.
Enum values:
en
nl
de
fr
es
it
match_browser_language
​boolean

Give visitors their browser's language when it is supported

How the page looks and what it shows

collapsed_groups
​string[] · maxItems: 100 · unique

Component groups that start collapsed; replaces the current list

automation_enabled
​boolean

Monitor automation: when a monitor linked to a component goes down, open an incident "{component} is down" (major outage), and resolve it when the monitor recovers

automation_down_message
​string | null · maxLength: 5000

Posted when a linked monitor goes down, up to 5000 characters; {component} and {status_page} are filled in. null for a default message

Example: We're looking into problems with {component}.
automation_recovered_message
​string | null · maxLength: 5000

Posted when the monitor recovers, up to 5000 characters; null for a default message

Example: {component} is working again.
issue_reports_enabled
​boolean

Let visitors report problems from the page

issue_reports_show_on_page
​boolean

While reports are above the threshold, say on the page that users are reporting issues

issue_reports_alerts_enabled
​boolean

Fire an alert when reports reach the threshold

issue_reports_threshold
​integer · min: 1 · max: 1000

Reports within issue_reports_window_minutes that count as above the threshold, 1 to 1000

issue_reports_window_minutes
​integer · min: 1 · max: 1440

The window for the threshold, in minutes, 1 to 1440

traffic_alerts_enabled
​boolean

Alert when views reach traffic_alert_multiplier times the usual views for the time of day

traffic_alert_multiplier
​integer · min: 2 · max: 100

How many times the usual views alert, 2 to 100

traffic_alert_min_views
​integer · min: 10 · max: 1000000

Fewer views than this in 15 minutes never alert, 10 to 1000000

escalation_path_ids
​string[]

Escalation paths for the page's alerts (issue reports and traffic spikes); replaces the current ones. Empty for the team's default path

Create a status page › Responses

The new status page.

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

Example: Acme status
slug
​string · required

The page's subdomain under spectate.page

Example: acme
visibility
​StatusPageVisibility · enum · required

Who can open the page

public
Anyone.
private
Visitors with the access link, or the password when the page has one. Part of the Team plan and up.
Enum values:
public
private
status
​ComponentStatus · enum · required

The headline status visitors see: the worst status of the components, and the impact of open incidents that affect no components

operational
Working normally.
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
under_maintenance
In planned maintenance.
Enum values:
operational
degraded_performance
partial_outage
major_outage
under_maintenance
public_url
​string · uri · required

Where visitors open the page: the custom domain once it is verified, else the spectate.page address

Example: https://acme.spectate.page
access_url
​string · uri · required

Opens the page while it is private. Anyone with it gets in; rotateStatusPageAccessKey replaces it

custom_domain
​string | null · required

Your own domain for the page; null for none. Visitors use it once it is verified

Example: status.acme.com
​required
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
​StatusPageLanguage · enum · required

Language of the public page and of subscriber emails

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.
Enum values:
en
nl
de
fr
es
it
match_browser_language
​boolean · required

Visitors get their browser's language when it is supported, and can switch languages in the footer

​StatusPageTheme · required

How the page looks and what it shows

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 | null · required

Posted when a linked monitor goes down; {component} and {status_page} are filled in. null for a default message

Example: We're looking into problems with {component}.
automation_recovered_message
​string | null · required

Posted when the monitor recovers; null for a default message

Example: {component} is working again.
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 | null · date-time · 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

​EscalationPathReference[] · required

Escalation paths the page's alerts (issue reports and traffic spikes) follow; empty for the team's default path

​required
created_at
​string · date-time · required

When the page was created


Get a status page

GET
https://api.spectate.net/v1
/status-pages/{statusPage}

Returns the page with its settings and headline status. Its components, incidents and maintenance have their own lists.

Get a status page › path Parameters

statusPage
​string · uuid · required

Status page ID.

Get a status page › Responses

The status page.

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

Example: Acme status
slug
​string · required

The page's subdomain under spectate.page

Example: acme
visibility
​StatusPageVisibility · enum · required

Who can open the page

public
Anyone.
private
Visitors with the access link, or the password when the page has one. Part of the Team plan and up.
Enum values:
public
private
status
​ComponentStatus · enum · required

The headline status visitors see: the worst status of the components, and the impact of open incidents that affect no components

operational
Working normally.
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
under_maintenance
In planned maintenance.
Enum values:
operational
degraded_performance
partial_outage
major_outage
under_maintenance
public_url
​string · uri · required

Where visitors open the page: the custom domain once it is verified, else the spectate.page address

Example: https://acme.spectate.page
access_url
​string · uri · required

Opens the page while it is private. Anyone with it gets in; rotateStatusPageAccessKey replaces it

custom_domain
​string | null · required

Your own domain for the page; null for none. Visitors use it once it is verified

Example: status.acme.com
​required
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
​StatusPageLanguage · enum · required

Language of the public page and of subscriber emails

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.
Enum values:
en
nl
de
fr
es
it
match_browser_language
​boolean · required

Visitors get their browser's language when it is supported, and can switch languages in the footer

​StatusPageTheme · required

How the page looks and what it shows

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 | null · required

Posted when a linked monitor goes down; {component} and {status_page} are filled in. null for a default message

Example: We're looking into problems with {component}.
automation_recovered_message
​string | null · required

Posted when the monitor recovers; null for a default message

Example: {component} is working again.
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 | null · date-time · 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

​EscalationPathReference[] · required

Escalation paths the page's alerts (issue reports and traffic spikes) follow; empty for the team's default path

​required
created_at
​string · date-time · required

When the page was created


Update a status page

PATCH
https://api.spectate.net/v1
/status-pages/{statusPage}

Changes only the settings you send; inside theme, also only the keys you send. A new slug moves the page: the old address stops working. A new custom_domain needs to be verified again before visitors use it. Turning off issue reports or traffic alerts ends the alerts they fired. Private pages, password protection and custom domains need a plan that includes them (403 PLAN_FEATURE_UNAVAILABLE); a page that is private already stays so.

Update a status page › path Parameters

statusPage
​string · uuid · required

Status page ID.

Update a status page › Request Body

Changes to a status page; settings left out keep their value.
name
​string · maxLength: 255

Name, shown as the page title

Example: Acme status
slug
​string · maxLength: 63 · pattern: ^[a-z0-9](?:[a-z0-9-…

The page's subdomain under spectate.page: lowercase letters, digits and dashes. The old address stops working

Example: acme
visibility
​StatusPageVisibility · enum

Who can open the page. Private pages are part of the Team plan and up (403 PLAN_FEATURE_UNAVAILABLE)

public
Anyone.
private
Visitors with the access link, or the password when the page has one. Part of the Team plan and up.
Enum values:
public
private
custom_domain
​string | null · maxLength: 253

Your own domain for the page, such as status.acme.com; null for none. Part of paid plans (403 PLAN_FEATURE_UNAVAILABLE otherwise). A new domain needs to be verified again: see custom_domain_verification and verifyStatusPageCustomDomain

Example: status.acme.com
password_protected
​boolean

Let visitors of a private page also get in with a password. Part of paid plans (403 PLAN_FEATURE_UNAVAILABLE otherwise); turning it on needs a password unless the page has one

password
​string | null · minLength: 8 · maxLength: 255

The password, 8 to 255 characters. Write-only; leave out or send null to keep the current one

Example: correct-horse-battery
language
​StatusPageLanguage · enum

Language of the public page and of subscriber emails

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.
Enum values:
en
nl
de
fr
es
it
match_browser_language
​boolean

Give visitors their browser's language when it is supported

How the page looks and what it shows

collapsed_groups
​string[] · maxItems: 100 · unique

Component groups that start collapsed; replaces the current list

automation_enabled
​boolean

Monitor automation: when a monitor linked to a component goes down, open an incident "{component} is down" (major outage), and resolve it when the monitor recovers

automation_down_message
​string | null · maxLength: 5000

Posted when a linked monitor goes down, up to 5000 characters; {component} and {status_page} are filled in. null for a default message

Example: We're looking into problems with {component}.
automation_recovered_message
​string | null · maxLength: 5000

Posted when the monitor recovers, up to 5000 characters; null for a default message

Example: {component} is working again.
issue_reports_enabled
​boolean

Let visitors report problems from the page

issue_reports_show_on_page
​boolean

While reports are above the threshold, say on the page that users are reporting issues

issue_reports_alerts_enabled
​boolean

Fire an alert when reports reach the threshold

issue_reports_threshold
​integer · min: 1 · max: 1000

Reports within issue_reports_window_minutes that count as above the threshold, 1 to 1000

issue_reports_window_minutes
​integer · min: 1 · max: 1440

The window for the threshold, in minutes, 1 to 1440

traffic_alerts_enabled
​boolean

Alert when views reach traffic_alert_multiplier times the usual views for the time of day

traffic_alert_multiplier
​integer · min: 2 · max: 100

How many times the usual views alert, 2 to 100

traffic_alert_min_views
​integer · min: 10 · max: 1000000

Fewer views than this in 15 minutes never alert, 10 to 1000000

escalation_path_ids
​string[]

Escalation paths for the page's alerts (issue reports and traffic spikes); replaces the current ones. Empty for the team's default path

Update a status page › Responses

The updated status page.

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

Example: Acme status
slug
​string · required

The page's subdomain under spectate.page

Example: acme
visibility
​StatusPageVisibility · enum · required

Who can open the page

public
Anyone.
private
Visitors with the access link, or the password when the page has one. Part of the Team plan and up.
Enum values:
public
private
status
​ComponentStatus · enum · required

The headline status visitors see: the worst status of the components, and the impact of open incidents that affect no components

operational
Working normally.
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
under_maintenance
In planned maintenance.
Enum values:
operational
degraded_performance
partial_outage
major_outage
under_maintenance
public_url
​string · uri · required

Where visitors open the page: the custom domain once it is verified, else the spectate.page address

Example: https://acme.spectate.page
access_url
​string · uri · required

Opens the page while it is private. Anyone with it gets in; rotateStatusPageAccessKey replaces it

custom_domain
​string | null · required

Your own domain for the page; null for none. Visitors use it once it is verified

Example: status.acme.com
​required
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
​StatusPageLanguage · enum · required

Language of the public page and of subscriber emails

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.
Enum values:
en
nl
de
fr
es
it
match_browser_language
​boolean · required

Visitors get their browser's language when it is supported, and can switch languages in the footer

​StatusPageTheme · required

How the page looks and what it shows

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 | null · required

Posted when a linked monitor goes down; {component} and {status_page} are filled in. null for a default message

Example: We're looking into problems with {component}.
automation_recovered_message
​string | null · required

Posted when the monitor recovers; null for a default message

Example: {component} is working again.
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 | null · date-time · 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

​EscalationPathReference[] · required

Escalation paths the page's alerts (issue reports and traffic spikes) follow; empty for the team's default path

​required
created_at
​string · date-time · required

When the page was created


Delete a status page

DELETE
https://api.spectate.net/v1
/status-pages/{statusPage}

The page goes offline at once, with its components, incidents, maintenance, subscribers and uploaded logos. Subscribers aren't emailed. Its firing alerts resolve. The team's own incidents are kept.

Delete a status page › path Parameters

statusPage
​string · uuid · required

Status page ID.

Delete a status page › Responses

No content

No data returned

Verify the custom domain

POST
https://api.spectate.net/v1
/status-pages/{statusPage}/custom-domain/verify

Looks up the page's custom domain in DNS. One passing record verifies it: a CNAME to the page's cname_target, or the TXT record from custom_domain_verification. A verified domain stays verified when a later check fails. routed tells whether visitors reach the page; its certificate is issued on the first visit. The page needs a custom domain (422 otherwise). Safe to repeat while DNS changes propagate.

Verify the custom domain › path Parameters

statusPage
​string · uuid · required

Status page ID.

Verify the custom domain › Responses

What DNS returned, and whether the domain is verified.

The result of looking up a custom domain's DNS records.
domain
​string · required

The domain

Example: status.example.com
verified
​boolean · required

Whether ownership is proven, now or earlier. A proven domain stays verified when a later check fails

verified_at
​string | null · date-time · required

When ownership was proven; null before

​StatusPageDnsRecordCheck[] · required

The records that can verify the domain; one passing record is enough

routed
​boolean · required

Whether visitors reach the page: the domain points at it by CNAME or resolves to the same addresses. The page and its certificate need this; the certificate is issued on the first visit

addresses
​string[] · required

Addresses the domain resolves to (A and AAAA records)

checked_at
​string · date-time · required

When DNS was checked


Rotate the access key

POST
https://api.spectate.net/v1
/status-pages/{statusPage}/access-key/rotate

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.

Rotate the access key › path Parameters

statusPage
​string · uuid · required

Status page ID.

Rotate the access key › Responses

The status page with its new access URL.

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

Example: Acme status
slug
​string · required

The page's subdomain under spectate.page

Example: acme
visibility
​StatusPageVisibility · enum · required

Who can open the page

public
Anyone.
private
Visitors with the access link, or the password when the page has one. Part of the Team plan and up.
Enum values:
public
private
status
​ComponentStatus · enum · required

The headline status visitors see: the worst status of the components, and the impact of open incidents that affect no components

operational
Working normally.
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
under_maintenance
In planned maintenance.
Enum values:
operational
degraded_performance
partial_outage
major_outage
under_maintenance
public_url
​string · uri · required

Where visitors open the page: the custom domain once it is verified, else the spectate.page address

Example: https://acme.spectate.page
access_url
​string · uri · required

Opens the page while it is private. Anyone with it gets in; rotateStatusPageAccessKey replaces it

custom_domain
​string | null · required

Your own domain for the page; null for none. Visitors use it once it is verified

Example: status.acme.com
​required
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
​StatusPageLanguage · enum · required

Language of the public page and of subscriber emails

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.
Enum values:
en
nl
de
fr
es
it
match_browser_language
​boolean · required

Visitors get their browser's language when it is supported, and can switch languages in the footer

​StatusPageTheme · required

How the page looks and what it shows

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 | null · required

Posted when a linked monitor goes down; {component} and {status_page} are filled in. null for a default message

Example: We're looking into problems with {component}.
automation_recovered_message
​string | null · required

Posted when the monitor recovers; null for a default message

Example: {component} is working again.
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 | null · date-time · 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

​EscalationPathReference[] · required

Escalation paths the page's alerts (issue reports and traffic spikes) follow; empty for the team's default path

​required
created_at
​string · date-time · required

When the page was created