Spectate API

ActivityCauserType

string · enum
Enum values:
user
api_token
employee

Who caused an activity log entry.

user
A team member.
api_token
A team API token.
employee
Spectate staff.

Alert

An alert: a problem a monitor, host, domain, status page or alert source detected. It escalates along its escalation path until someone acknowledges it, and resolves when the problem is over.
id
​string · uuid · required

Alert ID

title
​string · required

What's wrong

Example: Website is down
description
​string | null · required

More about it, as the source described it

status
​AlertStatus · enum · required

Whether the problem is ongoing

firing
The problem is ongoing; it escalates until acknowledged.
resolved
The problem is over.
Enum values:
firing
resolved
severity
​Severity · enum · required

How urgent it is

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
source_type
​AlertSourceType · enum · required

What raised it

uptime
A monitor went down.
certificate
A monitor's certificate is invalid or expires soon.
performance
A monitor got slow.
dns
The answer of a DNS monitor changed (when it alerts on changes).
host_metric
A host's metric condition held, or it stopped sending data.
domain
A domain expires soon, expired or its registration changed.
external
An alert source (external tool) fired it.
status_page
Visitor issue reports over the threshold or a traffic spike (metadata.type: issue_reports, traffic_spike).
Enum values:
uptime
certificate
performance
dns
host_metric
domain
external
status_page
​required
fired_at
​string · date-time · required

When it fired

acknowledged_at
​string | null · date-time · required

When it was acknowledged, which stopped its escalation; null while unacknowledged

acknowledged_by
​string | null · required

Who acknowledged it: a member's name, an API token, or how (for example a phone call)

Example: Jane Doe
resolved_at
​string | null · date-time · required

When it resolved; null while firing

resolved_by
​string | null · required

Who resolved it by hand: a member's name or an API token. null while firing, and when it resolved on its own because the problem was over

Example: Jane Doe
​object | null · required

Labels the source sent (Prometheus, Grafana); null when it sent none

​AlertLink[] · required

Links the source sent along

A link the alert source sent along.
label
​string · required

What it opens

Example: View issue in Sentry
url
​string · uri · required

Where it goes

AlertResource

The resource an alert is about.
type
​AlertResourceType · enum · required

What kind of resource

Enum values:
monitor
host
domain
status_page
alert_source
id
​string · uuid · required

The resource's ID, for example a monitor ID

name
​string | null · required

Its name or label

Example: Website

AlertResourceType

string · enum
Enum values:
monitor
host
domain
status_page
alert_source

What kind of resource an alert is about.

AlertSource

An alert source: an external tool (Prometheus Alertmanager, Grafana, Sentry, a script…) whose requests to `webhook_url`, or mails to `email_address`, fire and resolve alerts. The URL and address contain the source's secret token: whoever has them can fire alerts.
id
​string · uuid · required

Alert source ID

name
​string · required

Name shown on its alerts

Example: Production Alertmanager
type
​AlertSourceProvider · enum · required

The tool, which decides how requests are read

webhook
Spectate's own JSON format, for scripts, CI and anything that can call a URL.
email
Emails to the source's own address (subject becomes the alert).
alertmanager
Prometheus Alertmanager webhook_configs.
grafana
Grafana Alerting webhook contact point (Alertmanager format plus Grafana links).
sentry
Sentry internal integration webhooks (SaaS and self-hosted), or the legacy WebHooks plugin.
Enum values:
webhook
email
alertmanager
grafana
sentry
enabled
​boolean · required

Whether requests fire alerts; a disabled source rejects them

webhook_url
​string · uri · required

Where the tool sends its webhooks. Secret: rotate it with rotateAlertSourceToken if it leaks

email_address
​string | null · email · required

email sources: the address to send mails to. Secret like the URL

has_secret
​boolean · required

Whether a signing secret is set (Sentry client secret, Grafana HMAC secret, Alertmanager bearer token); it's never returned

default_severity
​Severity · enum · required

Severity of alerts the tool sends without one

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
auto_resolve_minutes
​integer | null · required

Minutes after which an alert the tool stopped repeating resolves; null keeps it until the tool resolves it

Example: 60
​AlertSourceSettings · required

Type-specific settings

project_id
​string | null · uuid · required

The project whose escalation paths apply when the source has none of its own; null for none

​EscalationPathReference[] · required

Escalation paths the source's alerts follow. Empty: the project's paths, else the team's default path

last_event_at
​string | null · date-time · required

When the source last received a request

events_count
​integer · required

Requests the source has received in total

firing_alerts_count
​integer · required

Alerts of the source that are firing now

created_at
​string · date-time · required

When the source was created

AlertSourceEvent

A request an alert source received, kept for 7 days.
id
​string · uuid · required

Event ID

received_at
​string · date-time · required

When the request arrived

outcome
​AlertSourceEventOutcome · enum · required

What became of it

fired
It fired at least one new alert.
resolved
It resolved at least one alert.
updated
It repeated alerts that were already firing.
test
A test request from the tool's own "test" button; no alert.
ignored
Valid, but nothing to do (for example a resolve of an alert that isn't firing).
rejected
Refused: bad signature, unreadable payload or a disabled source; see error.
Enum values:
fired
resolved
updated
test
ignored
rejected
summary
​string | null · required

What happened, in words

Example: 2 alerts fired
error
​string | null · required

Why it was rejected, with outcome rejected

​AlertSourceEventAlert[] · required

What it did per alert

​object | null · required

The request body as received: the tool's JSON, or {body, truncated} for mail and non-JSON bodies. Its shape is the tool's

AlertSourceEventAction

string · enum
Enum values:
fired
updated
resolved
ignored

What a request did to one alert.

fired
A new alert fired.
updated
The alert was already firing; it was updated.
resolved
The alert resolved.
ignored
A resolve for an alert that wasn't firing.

AlertSourceEventAlert

What a request did to one alert.
action
​AlertSourceEventAction · enum · required

What happened to the alert

fired
A new alert fired.
updated
The alert was already firing; it was updated.
resolved
The alert resolved.
ignored
A resolve for an alert that wasn't firing.
Enum values:
fired
updated
resolved
ignored
title
​string · required

The alert's title

Example: HighErrorRate
dedupe_key
​string · required

The key the tool groups repeats by; requests with the same key update one alert

Example: 4c3d9a…
alert_id
​string | null · uuid · required

The alert; null when none was touched

AlertSourceEventOutcome

string · enum
Enum values:
fired
resolved
updated
test
ignored
rejected

What became of a request an alert source received.

fired
It fired at least one new alert.
resolved
It resolved at least one alert.
updated
It repeated alerts that were already firing.
test
A test request from the tool's own "test" button; no alert.
ignored
Valid, but nothing to do (for example a resolve of an alert that isn't firing).
rejected
Refused: bad signature, unreadable payload or a disabled source; see error.

AlertSourceProvider

string · enum
Enum values:
webhook
email
alertmanager
grafana
sentry

The external tool behind an alert source; decides how its requests are read.

webhook
Spectate's own JSON format, for scripts, CI and anything that can call a URL.
email
Emails to the source's own address (subject becomes the alert).
alertmanager
Prometheus Alertmanager webhook_configs.
grafana
Grafana Alerting webhook contact point (Alertmanager format plus Grafana links).
sentry
Sentry internal integration webhooks (SaaS and self-hosted), or the legacy WebHooks plugin.

AlertSourceSettings

Settings of some source types; the others ignore them.
alert_on_new_issues
​boolean | null · required

Sentry: also alert on every new issue (issue created webhooks), not only on alert rules

signature_header
​string | null · required

Grafana: the header carrying the HMAC signature; null means X-Grafana-Alerting-Signature

Example: X-Grafana-Alerting-Signature
timestamp_header
​string | null · required

Grafana: the timestamp header, when the contact point signs {timestamp}:{body}

AlertSourceSettingsInput

Settings to set; settings you leave out keep their value.
alert_on_new_issues
​boolean

Sentry: also alert on every new issue

signature_header
​string | null · maxLength: 100

Grafana: the header carrying the HMAC signature, up to 100 characters; null for the default

Example: X-Grafana-Alerting-Signature
timestamp_header
​string | null · maxLength: 100

Grafana: the timestamp header, when the contact point signs {timestamp}:{body}; null for none

AlertSourceType

string · enum
Enum values:
uptime
certificate
performance
dns
host_metric
domain
external
status_page

What raised an alert.

uptime
A monitor went down.
certificate
A monitor's certificate is invalid or expires soon.
performance
A monitor got slow.
dns
The answer of a DNS monitor changed (when it alerts on changes).
host_metric
A host's metric condition held, or it stopped sending data.
domain
A domain expires soon, expired or its registration changed.
external
An alert source (external tool) fired it.
status_page
Visitor issue reports over the threshold or a traffic spike (metadata.type: issue_reports, traffic_spike).

AlertStatus

string · enum
Enum values:
firing
resolved

Whether an alert's problem is ongoing.

firing
The problem is ongoing; it escalates until acknowledged.
resolved
The problem is over.

ApiError

An error. The HTTP status tells the class of problem, `error.code` the exact one.
​object · required

What went wrong.

ApiToken

The API token that made the request.
id
​string · uuid · required

Token ID

name
​string · required

Name given to the token when it was created

Example: Terraform
last_four
​string · required

Last four characters of the token, to tell tokens apart

Example: a1B2
abilities
​ApiTokenAbility[] · required

What the token may do. Each endpoint lists the ability it requires

Enum values:
monitors:read
monitors:write
monitors:delete
hosts:read
hosts:write
hosts:delete
domains:read
domains:write
​ApiTokenTeam · required

The team the token acts for

expires_at
​string | null · date-time · required

When the token stops working; null if it never expires

created_at
​string · date-time · required

When the token was created

ApiTokenAbility

string · enum
Enum values:
monitors:read
monitors:write
monitors:delete
hosts:read
hosts:write
hosts:delete
domains:read
domains:write

An ability of a team API token: what it may do. Each endpoint requires one. Abilities are the team permissions of the same name, so a member can only give a token what their own role allows. Tokens list their abilities explicitly; there is no wildcard, so a token never gains an ability it wasn't created with.

monitors:read
Read monitors, their checks, uptime and certificates.
monitors:write
Create and change monitors, and pause or resume them.
monitors:delete
Delete monitors.
hosts:read
Read hosts, their metrics and metric conditions.
hosts:write
Change hosts, install tokens and metric conditions.
hosts:delete
Delete hosts.
domains:read
Read domains and their registration and DNS state.
domains:write
Add and change domains.
domains:delete
Delete domains.
projects:read
Read projects.
projects:write
Create and change projects.
projects:delete
Delete projects.
alerting:read
Read alerts, channels, escalation paths, alert sources and on-call schedules.
alerting:write
Create and change channels, escalation paths, alert sources and on-call schedules.
alerting:delete
Delete channels, escalation paths, alert sources, on-call schedules and resolved alerts.
alerts:acknowledge
Acknowledge alerts, which stops their escalation.
alerts:resolve
Resolve alerts by hand, which stops their escalation and tells everyone notified that they're over.
incidents:read
Read incidents, their updates, timeline and postmortem.
incidents:write
Declare, update, acknowledge and resolve incidents.
incidents:delete
Delete incidents.
status-pages:read
Read status pages, components, status page incidents, maintenances and subscribers.
status-pages:write
Create and change status pages, components, status page incidents and maintenances.
status-pages:delete
Delete status pages, components, status page incidents, maintenances and subscribers.
members:read
Read team members and pending invites.
members:write
Invite members, change their roles and remove them.
team:update
Change the team's name and settings.
billing:read
Read the subscription, notification credits and plan usage.

ApiTokenTeam

The team an API token acts for.
id
​string · uuid · required

Team ID

name
​string · required

Team name

Example: Acme

AssignIncidentRole

Who gets an incident role.
member_id
​string · uuid · required

The member who takes the role; they replace whoever had it

Billing

The team's billing state. Subscriptions are changed in the dashboard.
plan
​Plan · enum · required

The plan whose limits apply now: the trial plan during the trial, none without a plan

none
No paid plan and no trial: monitoring is paused until the team subscribes.
starter
Starter: up to 3 members and 1 status page, the team default escalation path only.
team
Team: unlimited members, 5 status pages, on-call, more escalation paths and private status pages.
business
Business: everything in Team, with unlimited status pages and more subscribers and notification credits.
Enum values:
none
starter
team
business
subscribed
​boolean · required

Whether the team has a paid subscription

on_trial
​boolean · required

Whether the team is on its trial

trial_ends_at
​string | null · date-time · required

When the trial ends; null without one

plan_ends_at
​string | null · date-time · required

End of a plan Spectate granted without a subscription; null without one

​required
​NotificationCredits · required

SMS and voice notification credits

BillingInterval

string · enum
Enum values:
month
year

Billing interval of a subscription; the values are Vatly's interval values.

month
Billed every month.
year
Billed every year, for the price of 10 months.

CertificateStatus

string · enum
Enum values:
pending
valid
invalid
expires_soon
expired

The state of a monitor's TLS certificate, from its latest certificate check.

pending
Not checked yet.
valid
Valid and not about to expire.
invalid
Not trusted, for example self-signed, for another host or with a broken chain.
expires_soon
Valid, but expires within the monitor's certificate_expiry_threshold_days.
expired
Past its expiry date.

Channel

A notification channel: where escalation paths send alerts. The settings of its type are in the object of that name (`email`, `slack`…); the others are `null`. Secrets (webhook URLs, tokens, header values) are never returned.
id
​string · uuid · required

Channel ID

name
​string · required

Name shown in escalation paths

Example: On-call email
type
​ChannelType · enum · required

Where the channel delivers

Enum values:
email
slack
discord
microsoft_teams
telegram
webhook
pushover
sms
enabled
​boolean · required

Whether the channel delivers. false when a member turned it off or Spectate did after repeated failures (auto_disabled)

auto_disabled
​boolean · required

Whether Spectate turned the channel off because deliveries kept failing. Fix the cause, then enable it or send a test with enable

disabled_at
​string | null · date-time · required

When the channel was turned off automatically

disabled_reason
​string | null · required

Why it was turned off automatically

consecutive_failures
​integer · required

Failed deliveries since the last successful one

failing_since
​string | null · date-time · required

Since when deliveries fail

last_failure_at
​string | null · date-time · required

When a delivery last failed

last_failure_reason
​string | null · required

Why the last delivery failed

last_delivered_at
​string | null · date-time · required

When a delivery last succeeded

​required
​required
​required
​required
​required
​required
​required
created_at
​string · date-time · required

When the channel was created

ChannelEmail

Where an `email` channel sends.
address
​string · email · maxLength: 255 · required

The address alerts go to

Example: oncall@example.com

ChannelPhone

The phone an `sms` or `voice` channel reaches. Each message or call uses the team's notification credits.
phone_number
​string · maxLength: 32 · required

The phone number in international format

Example: +31612345678

ChannelPushover

Who a `pushover` channel notifies. The application token is write-only.
user_key
​string · required

The Pushover user or group key

Example: uQiRzpo4DXghDmr9QzzfQu27cmVRsG
priority
​integer | null · required

Pushover priority, -2 (lowest) to 2 (emergency); null for normal (0)

Example: 1

ChannelPushoverInput

Who a `pushover` channel notifies, and with which Pushover application.
user_key
​string · maxLength: 255 · required

The Pushover user or group key

Example: uQiRzpo4DXghDmr9QzzfQu27cmVRsG
api_token
​string · maxLength: 255 · required

Your Pushover application's API token. Write-only: never returned

Example: azGDORePK8gMaC0QOYAMyEEuzJnyUi
priority
​integer · min: -2 · max: 2

Pushover priority, -2 (lowest) to 2 (emergency). Default 0

Example: 1

ChannelReference

A channel something sends to.
id
​string · uuid · required

Channel ID

name
​string · required

Channel name

Example: On-call email
type
​ChannelType · enum · required

Where it delivers

Enum values:
email
slack
discord
microsoft_teams
telegram
webhook
pushover
sms
enabled
​boolean · required

Whether it delivers; disabled channels are skipped

ChannelSlack

Where a `slack` channel posts: a channel of a Slack workspace connected under Integrations.
installation_id
​string | null · uuid · required

The team's Slack installation (workspace) that posts. null for older channels with their own bot token

channel
​string · required

The Slack channel ID

Example: C0123456789
channel_name
​string | null · required

The channel's name, for display

Example: #alerts

ChannelSlackInput

Where a `slack` channel posts. Connect the Slack workspace under Integrations in the dashboard first; the installation's ID is in the Slack integration.
installation_id
​string · uuid · required

The team's Slack installation (workspace) that posts

channel
​string · maxLength: 255 · required

The Slack channel ID (not its name); invite the Spectate app to private channels

Example: C0123456789
channel_name
​string | null · maxLength: 255

The channel's name, for display

Example: #alerts

ChannelTelegram

The chat a `telegram` channel sends to. Telegram channels are connected from the dashboard (Alerting → Channels), not through the API.
chat_id
​string · required

The Telegram chat ID

Example: -1001234567890
chat_title
​string | null · required

The chat's title, for display

Example: Ops alerts

ChannelTestResult

A test notification that was delivered.
message
​string · required

What was sent

Example: Test notification sent
​Channel · required

The channel after the test: its failure count is cleared, and with enable it's enabled again

ChannelType

string · enum
Enum values:
email
slack
discord
microsoft_teams
telegram
webhook
pushover
sms

ChannelWebhook

What a `webhook` channel sends. The URL and header values can hold credentials, so only the host and the header names are returned.
host
​string | null · required

The host of the URL the channel posts to

Example: hooks.example.com
header_names
​string[] · required

Names of the headers it sends

ChannelWebhookHeader

A header a `webhook` channel sends with every request.
key
​string · maxLength: 128 · required

Header name. Hop-by-hop and connection headers are refused

Example: Authorization
value
​string · maxLength: 1024 · required

Header value; write-only, never returned

Example: Bearer s3cr3t

ChannelWebhookInput

Where a `webhook` channel posts its JSON. The URL and header values are write-only.
url
​string · uri · maxLength: 2048 · required

The URL to POST to; must be a public HTTP or HTTPS address

Example: https://hooks.example.com/spectate

Headers to send with every request, for example for authentication

ChannelWebhookUrlInput

The incoming webhook a `discord` or `microsoft_teams` channel posts to. It's a secret: it's never returned.
webhook_url
​string · uri · maxLength: 2048 · required

The incoming webhook URL from Discord (Server settings → Integrations → Webhooks) or a Teams workflow. Must be a public HTTPS address

Example: https://discord.com/api/webhooks/123/abc

ComponentImpact

string · enum
Enum values:
degraded_performance
partial_outage
major_outage

How badly an incident affects a component. A component's status is the worst impact it has at the moment.

degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.

ComponentStatus

string · enum
Enum values:
operational
degraded_performance
partial_outage
major_outage
under_maintenance

A status page component's status, derived from incidents and maintenance.

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.

CreateAlertSource

A new alert source. The response has the `webhook_url` (and `email_address`) to configure in the tool.
name
​string · maxLength: 255 · required

Name shown on its alerts, up to 255 characters

Example: Production Alertmanager
type
​AlertSourceProvider · enum · required

The tool that will send requests

webhook
Spectate's own JSON format, for scripts, CI and anything that can call a URL.
email
Emails to the source's own address (subject becomes the alert).
alertmanager
Prometheus Alertmanager webhook_configs.
grafana
Grafana Alerting webhook contact point (Alertmanager format plus Grafana links).
sentry
Sentry internal integration webhooks (SaaS and self-hosted), or the legacy WebHooks plugin.
Enum values:
webhook
email
alertmanager
grafana
sentry
default_severity
​Severity · enum

Severity of alerts sent without one. Default high

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
auto_resolve_minutes
​integer | null · min: 5 · max: 10080

Minutes, 5 to 10080, after which an alert the tool stopped repeating resolves; null keeps it until resolved. Default null, or 60 for email sources

secret
​string | null · maxLength: 255

Signing secret the tool uses: Sentry client secret, Grafana HMAC secret or Alertmanager bearer token. Write-only

Type-specific settings

project_id
​string | null · uuid

Project whose escalation paths apply when the source has none of its own

escalation_path_ids
​string[] · unique

Escalation paths for the source's alerts

CreateChannel

A new notification channel: a name, a type, and the settings object of that type (`email` for `email`, `slack` for `slack`…). Send only that one object. Telegram channels are connected from the dashboard.
name
​string · maxLength: 255 · required

Name shown in escalation paths

Example: On-call email
type
​ChannelType · enum · required

Where the channel delivers; telegram can't be created through the API

Enum values:
email
slack
discord
microsoft_teams
telegram
webhook
pushover
sms
enabled
​boolean

Whether it delivers from the start. Default true

​ChannelEmail

Settings of an email channel

Settings of a slack channel

Settings of a discord channel

​ChannelWebhookUrlInput

Settings of a microsoft_teams channel

Settings of a webhook channel

Settings of a pushover channel

Settings of an sms channel

​ChannelPhone

Settings of a voice channel

CreateDomain

A domain to monitor.
name
​string · maxLength: 255 · required

The registered domain, without www. or a path; internationalised names may be in Unicode or punycode

Example: example.com
enabled
​boolean

Whether to start monitoring at once. Default true

expiry_threshold_days
​integer · min: 1 · max: 365

Days before expiry, 1 to 365, that the "expires soon" alert fires. Default 30

Example: 30
alert_on_registry_changes
​boolean

Raise an alert when the registrar, nameservers or DNSSEC keys change. Default true

project_id
​string | null · uuid

Project to add the domain to; default the team's default project, null for none

escalation_path_ids
​string[]

Escalation paths for the domain's alerts. Leave out or send [] to follow the project's paths, else the team's default path

CreateEscalationPath

A new escalation path.
name
​string · maxLength: 255 · required

Name, up to 255 characters

Example: On-call engineers
description
​string | null · maxLength: 1000

What the path is for, up to 1000 characters

enabled
​boolean

Whether alerts follow the path. Default true

is_default
​boolean

Make it the team's default path; the current default stops being one. Default false

​

The steps, in order, up to 99 in total. Leave out or [] for a path that does nothing yet

CreateIncident

A new incident.
title
​string · maxLength: 255 · required

What's going on, up to 255 characters

Example: Checkout fails for some customers
severity
​Severity · enum · required

How bad it is

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
summary
​string | null

More about it, in Markdown

CreateIncidentUpdate

An update to post to an incident.
body
​string · required

What's known now, in Markdown

Example: Rolled back the deploy; error rates are dropping.
status
​IncidentStatus · enum

Move the incident to this status with the update; leave out to keep it

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved

CreateInvite

Someone to invite to the team.
email
​string · email · maxLength: 255 · required

Their email address; disposable addresses aren't accepted

Example: jane@example.com
role
​TeamRole · enum

The role they get when they accept (default member); owner can't be given

owner
Everything, including billing and deleting the team. One per team.
manager
Everything but billing and deleting the team.
admin
Configure monitoring, alerting, incidents and status pages; can't manage members or API tokens.
member
Read everything; manage monitors and incidents, acknowledge alerts.
billing
Billing and support only.
Enum values:
owner
manager
admin
member
billing

CreateMetricCondition

A new metric condition. Attach it to hosts, to projects (all their hosts), or both.
metric
​MetricPoint · enum · required

The metric to watch

Enum values:
cpu_usage
system.cpu.user
system.cpu.system
system.cpu.iowait
system.cpu.stolen
system.cpu.idle
system.cpu.guest
system.cpu.interrupt
​MetricCondition · required

How the metric's value is compared with threshold

threshold
​number · required

Compared with the metric's value as the agent reports it, in the unit the host's charts show

Example: 90
severity
​Severity · enum · required

Severity of the alert it raises

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
duration_minutes
​integer · min: 0 · max: 60

Minutes, 0 to 60, the condition must hold before the alert fires. Default 0: on the first breach

Example: 5
host_ids
​string[] · unique

Hosts of the team it applies to

project_ids
​string[] · unique

Projects of the team whose hosts it applies to

CreateMonitor

A new monitor. Only `label`, `protocol`, `uri` and `interval` are required; everything else has a sensible default.
label
​string · maxLength: 255 · required

Name shown in the dashboard, alerts and status pages

Example: Website
protocol
​MonitorProtocol · enum · required

What to check; decides the format of uri

https
An HTTPS request to the URL in uri, with a certificate check.
http
An HTTP request to the URL in uri.
icmp
A ping (ICMP echo) to the host in uri.
tcp
A TCP connect to host:port, optionally with a TLS handshake and a banner keyword.
dns
A DNS query for a record of the name in uri, optionally compared with expected values.
smtp
An SMTP greeting from host:port (port optional), with STARTTLS by default.
imap
An IMAP greeting from host:port (port optional), over TLS by default.
pop3
A POP3 greeting from host:port (port optional), over TLS by default.
Enum values:
https
http
icmp
tcp
dns
smtp
imap
pop3
uri
​string · maxLength: 2048 · required

The target: a URL for http and https, a host for icmp, host:port for tcp, host or host:port for mail, a DNS name for dns. Private and reserved addresses are refused. For http and https the scheme is optional: example.com/health and https://example.com/health give the same monitor, stored without the scheme. A scheme that differs from protocol (http:// for an https monitor) is refused with 422

Example: https://example.com/health
interval
​MonitorInterval · enum · required

Seconds between checks. Plans set the shortest allowed interval (422 below it)

Enum values:
30
60
120
180
300
600
900
1800
enabled
​boolean

Whether the monitor starts running at once. Default true

primary_location
​MonitorLocation · enum

Region the checks run from. Default eu

eu
Europe.
us
North America.
as
Asia.
oc
Oceania.
Enum values:
eu
us
as
oc
timeout
​integer · min: 1 · max: 60

Seconds before a check times out, 1 to 60. Default 30

Example: 30
max_redirects
​integer | null · min: 0 · max: 10

HTTP: redirects to follow, 0 to 10; null follows up to 10

​MonitorHeader[]

HTTP: up to 25 headers to send

​MonitorAdvancedSettingsInput

Protocol-specific settings

allow_insecure_requests
​boolean

HTTPS: accept invalid certificates for the check itself. Default false

expected_http_status_code
​string | null · minLength: 1 · maxLength: 200

HTTP: status codes that count as up, comma-separated, * as a wildcard digit; null accepts 2xx and 3xx

Example: 2**,301
certificate_check_enabled
​boolean

Check the TLS certificate for validity and expiry (HTTPS, and TCP or mail with TLS). Default false

certificate_expiry_threshold_days
​integer · min: 1 · max: 90

Days before the certificate expires that the "expires soon" alert fires, 1 to 90. Default 14

Example: 14
performance_check_enabled
​boolean

Raise alerts for slow responses. Default false

performance_hard_threshold
​integer | null · min: 1 · max: 30000

Milliseconds, 1 to 30000: a response slower than this raises an alert

Example: 2000
performance_deviation_percentage
​integer | null · min: 1 · max: 500

Percent, 1 to 500: alert when recent response times are this much above the earlier ones (see the two timeframes)

Example: 50
performance_deviation_timeframe
​integer | null · min: 15 · max: 120

Minutes of recent checks to compare: 15, 30, 45, 60, 75, 90, 105 or 120. Must be shorter than performance_deviation_before_timeframe

Example: 30
performance_deviation_before_timeframe
​integer | null · min: 60 · max: 1440

Minutes before those to compare with, a whole number of hours from 60 to 1440

Example: 240
regional_performance_enabled
​boolean

Also measure response time from the regions other than primary_location, every minute (or at the interval, when longer). Shown with the monitor's performance; not used for uptime or alerts. Team plan and up. Default false

project_id
​string | null · uuid

Project to add the monitor to; default the team's default project, null for none

escalation_path_ids
​string[]

Escalation paths for the monitor's alerts. Leave out or send [] to follow the project's paths, else the team's default path

CreateOnCallOverride

Someone to cover a schedule for a while, at most 90 days.
member_id
​string · uuid · required

The member who covers

starts_at
​string · date-time · required

From when, as an ISO 8601 date and time

ends_at
​string · date-time · required

Until when; after starts_at

note
​string | null · maxLength: 500

Why, for the team; up to 500 characters

Example: Covering for Jane's holiday

CreateOnCallRotation

A new rotation layer of a schedule.
name
​string · maxLength: 255 · required

Name, up to 255 characters

Example: Weekly primary
shift_unit
​OnCallShiftUnit · enum · required

The unit of the shift length

hours
Absolute hours: shifts keep their length across DST changes.
days
Calendar days in the schedule's time zone: the handoff stays at the same wall-clock time.
weeks
Calendar weeks in the schedule's time zone.
Enum values:
hours
days
weeks
shift_length
​integer · min: 1 · max: 720 · required

Shift length in shift_units: up to 720 hours, 90 days or 12 weeks

Example: 1
start_date
​string · date · pattern: ^\d{4}-\d{2}-\d{2}$ · required

The first handoff's date in the schedule's time zone; turns are counted from it

Example: 2026-11-02
handoff_time
​string · required

Handoff time as HH:MM in the schedule's time zone

Example: 09:00
position
​integer · min: 0 · max: 100

Layer order, 0 for the top. Default: below the existing layers

​
participant_ids
​string[] · minItems: 1 · maxItems: 50 · unique

1 to 50 team members taking turns, in order

CreateOnCallSchedule

A new on-call schedule. Add rotation layers to it afterwards.
name
​string · maxLength: 255 · required

Name, up to 255 characters

Example: Primary
timezone
​string · required

IANA time zone the rotations' dates, handoffs and restrictions are in

Example: Europe/Amsterdam
description
​string | null · maxLength: 1000

What the schedule covers, up to 1000 characters

CreateProject

A new project.
name
​string · maxLength: 255 · required

Project name

Example: Production
escalation_path_ids
​string[] · unique

Escalation paths for alerts of the project's monitors and hosts. Leave out for none

CreateScheduledMaintenance

Maintenance to announce on a status page.
title
​string · maxLength: 255 · required

Title shown on the page, up to 255 characters

Example: Database upgrade
scheduled_at
​string · date-time · required

Planned start, in the future

description
​string | null

What happens and what visitors notice, in Markdown; null for none

Example: The API is read-only for about ten minutes.
scheduled_until
​string | null · date-time

Planned end, after scheduled_at; null for none

automatic
​boolean

true (default): starts at scheduled_at and completes at scheduled_until by itself (without a planned end, complete it by setting status). false: only changes when you set status

Components it affects; components of the status page only

notify_subscribers
​boolean

Email confirmed subscribers about it (default true)

CreateStatusPage

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

CreateStatusPageComponent

A new component of a status page. Its status follows incidents and maintenance.
name
​string · maxLength: 255 · required

Name shown on the page

Example: API
description
​string | null

Text shown with the name; null for none

Example: Our public REST API.
group
​string | null · maxLength: 255

Group to show the component in; null for the page's default group

Example: Backend
position
​integer · min: 0

Order within the group, lowest first, from 0. New components go last when left out

monitor_id
​string | null · uuid

A monitor of the team whose uptime history and response times the component shows, and whose downtime opens an incident when monitor automation is on; null for none

show_latency_chart
​boolean

Show the monitor's response time chart under the component

CreateStatusPageImpactPeriod

A period during which a public incident affected a component. Periods of one component may not overlap within the incident.
component_id
​string · uuid · required

A component of the status page

impact
​ComponentImpact · enum · required

How badly

degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
degraded_performance
partial_outage
major_outage
started_at
​string · date-time · required

When it started, now or in the past

ended_at
​string | null · date-time

When it ended, after started_at and not in the future; null or left out while it goes on

CreateStatusPageIncident

A new public incident on a status page.
title
​string · maxLength: 255 · required

Title shown on the page

Example: Elevated API error rates
status
​IncidentStatus · enum · required

Where it stands

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
body
​string | null

The first update, in Markdown. Leave out to create the incident without one

Example: We're looking into errors on the API.
published_at
​string | null · date-time

When it happened, now or in the past (default now)

impact
​ImpactLevel · enum

The incident's own impact, used while it affects no components; otherwise it follows the components

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
none
degraded_performance
partial_outage
major_outage
incident_id
​string | null · uuid

The team's incident this one is for; null for none. Publishing from that incident (publishIncidentStatusPageUpdate) then posts here

The components it affects as of published_at, with their impact; components left out are no longer affected. Leave out to keep the impacts as they are; send [] for none. Components of the status page only

notify_subscribers
​boolean

Email confirmed subscribers about the new incident (default true). false changes the page without emails

CreateStatusPageIncidentUpdate

An update to publish on a public incident.
status
​IncidentStatus · enum · required

The incident's status with this update. resolved closes every open impact period

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
body
​string · required

The message, in Markdown

Example: We found the cause and are rolling out a fix.
published_at
​string | null · date-time

When it happened, now or in the past (default now)

The components it affects as of published_at, with their impact; components left out are no longer affected. Leave out to keep the impacts as they are; send [] for none. Components of the status page only

notify_subscribers
​boolean

Email confirmed subscribers about the update (default true). false changes the page without emails

DnsMatch

string · enum
Enum values:
contains
exact

How a DNS monitor compares the answer with dns_expected_values.

contains
Every expected value is in the answer; the answer may have more.
exact
The answer is exactly the expected values, in any order.

DnsRecordType

string · enum
Enum values:
A
AAAA
CNAME
MX
NS
TXT
CAA
SOA

The DNS record type a DNS monitor queries.

Domain

A monitored domain registration: Spectate looks it up at its registry (RDAP or WHOIS) every few hours and alerts before it expires and, optionally, when its registrar, nameservers or DNSSEC change.
id
​string · uuid · required

Domain ID

name
​string · required

The registered domain, lowercase, internationalised names in punycode

Example: example.com
enabled
​boolean · required

Whether the domain is monitored. false when paused by a member or by the system (see paused_reason)

​required
registrar
​string | null · required

The registrar, as the registry reports it

Example: Example Registrar, Inc.
registered_at
​string | null · date-time · required

When the domain was registered

expires_at
​string | null · date-time · required

When the registration expires

registry_changed_at
​string | null · date-time · required

When the registration last changed at the registry

days_until_expiration
​integer | null · required

Days until the registration expires; negative once expired

Example: 212
is_expired
​boolean · required

Whether the registration has expired

is_expiring_soon
​boolean · required

Whether it expires within expiry_threshold_days

nameservers
​array | null · required

The domain's nameservers

dnssec
​boolean · required

Whether the registry publishes DNSSEC keys for the domain

​array | null · required

The DNSSEC delegation signer records

statuses
​array | null · required

EPP status codes, for example client transfer prohibited

​required
​required
last_checked_at
​string | null · date-time · required

When the registry was last checked

expiry_threshold_days
​integer · required

Days before expiry that the "expires soon" alert fires

Example: 30
alert_on_registry_changes
​boolean · required

Whether changes of the registrar, nameservers or DNSSEC keys raise an alert

project_id
​string | null · uuid · required

The project the domain belongs to; null for none

​EscalationPathReference[] · required

Escalation paths the domain's alerts follow. Empty: the project's paths, else the team's default path

created_at
​string · date-time · required

When monitoring of the domain started

DomainDnssecKey

A DNSSEC delegation signer (DS) record the registry publishes for the domain.
key_tag
​integer | null · required

Key tag of the DNSKEY the record points at

Example: 2371
algorithm
​integer | null · required

DNSSEC algorithm number, for example 13 (ECDSA P-256 with SHA-256)

Example: 13
digest_type
​integer | null · required

Digest type number, for example 2 (SHA-256)

Example: 2
digest
​string | null · required

The digest, in hexadecimal

DomainLookupError

string · enum
Enum values:
unsupported
not_registered
unavailable

Why the last registry lookup of a domain gave no data.

unsupported
The registry publishes neither RDAP nor WHOIS (e.g. .gr, .vn).
not_registered
The registry has no such domain: not registered (or a subdomain was entered).
unavailable
The registry didn't answer usefully, even after retries; tried again at the next check.

DomainRegistrySource

string · enum
Enum values:
rdap
whois

Where a domain's registry data came from.

rdap
The registry's RDAP service.
whois
The registry's WHOIS server, for registries without RDAP.

DomainView

string · enum
Enum values:
attention
unsigned
paused

Domain list views; a domain can be in several.

attention
Expired, or expiring within its expiry_threshold_days.
unsigned
No DNSSEC keys.
paused
Monitoring is paused.

EscalationCondition

A condition of a branch. The branch continues on its `then` side when every condition holds, else on its `else` side.
field
​EscalationConditionField · enum · required

What is tested

severity
working_hours
Whether the branch is reached inside the path's working hours.
source
The kind of check or integration that raised the alert (uptime, certificate, external…).
label
A label sent along by an alert source (metadata.labels), e.g. env=production.
Enum values:
severity
working_hours
source
label
operator
​EscalationConditionOperator · enum · required

How it's tested; each field allows some operators (see the operator values)

is_one_of
The value is one of values.
is_not_one_of
The value is none of values.
within
Reached inside the path's working hours.
outside
Reached outside the path's working hours.
exists
The label is set.
not_exists
The label isn't set.
Enum values:
is_one_of
is_not_one_of
within
outside
exists
not_exists
key
​string | null · required

label conditions: the label name sent by the alert source

Example: env
values
​string[] · required

Values to match, for is_one_of and is_not_one_of: severities (critical, high, medium, low), sources (uptime, performance, certificate, dns, domain, host_metric, status_page, external, or external:<tool> such as external:grafana) or label values

description
​string · required

The condition in words

Example: Severity is Critical or High

EscalationConditionField

string · enum
Enum values:
severity
working_hours
source
label

What an escalation branch can test about an alert (incident.io-style "if/else" branches).

severity
working_hours
Whether the branch is reached inside the path's working hours.
source
The kind of check or integration that raised the alert (uptime, certificate, external…).
label
A label sent along by an alert source (metadata.labels), e.g. env=production.

EscalationConditionInput

A condition of a branch. `severity` and `source` take `is_one_of` and `is_not_one_of` with `values`; `working_hours` takes `within` and `outside`; `label` takes a `key` and any of the four list and presence operators.
field
​EscalationConditionField · enum · required

What to test

severity
working_hours
Whether the branch is reached inside the path's working hours.
source
The kind of check or integration that raised the alert (uptime, certificate, external…).
label
A label sent along by an alert source (metadata.labels), e.g. env=production.
Enum values:
severity
working_hours
source
label
operator
​EscalationConditionOperator · enum · required

How to test it

is_one_of
The value is one of values.
is_not_one_of
The value is none of values.
within
Reached inside the path's working hours.
outside
Reached outside the path's working hours.
exists
The label is set.
not_exists
The label isn't set.
Enum values:
is_one_of
is_not_one_of
within
outside
exists
not_exists
key
​string | null · maxLength: 100

label conditions: the label name sent by the alert source, up to 100 characters

Example: env
values
​string[] · maxItems: 20

Up to 20 values to match, for is_one_of and is_not_one_of: severities, sources (uptime, external:grafana…) or label values

EscalationConditionInputRequest

A condition of a branch. `severity` and `source` take `is_one_of` and `is_not_one_of` with `values`; `working_hours` takes `within` and `outside`; `label` takes a `key` and any of the four list and presence operators.
field
​EscalationConditionField · enum · required

What to test

severity
working_hours
Whether the branch is reached inside the path's working hours.
source
The kind of check or integration that raised the alert (uptime, certificate, external…).
label
A label sent along by an alert source (metadata.labels), e.g. env=production.
Enum values:
severity
working_hours
source
label
operator
​EscalationConditionOperator · enum · required

How to test it

is_one_of
The value is one of values.
is_not_one_of
The value is none of values.
within
Reached inside the path's working hours.
outside
Reached outside the path's working hours.
exists
The label is set.
not_exists
The label isn't set.
Enum values:
is_one_of
is_not_one_of
within
outside
exists
not_exists
key
​string | null · maxLength: 100

label conditions: the label name sent by the alert source, up to 100 characters

Example: env
values
​string[] · maxItems: 20

Up to 20 values to match, for is_one_of and is_not_one_of: severities, sources (uptime, external:grafana…) or label values

EscalationConditionOperator

string · enum
Enum values:
is_one_of
is_not_one_of
within
outside
exists
not_exists

How an escalation branch condition tests its field. severity and source take is_one_of and is_not_one_of; working_hours takes within and outside; label takes all four list and presence operators.

is_one_of
The value is one of values.
is_not_one_of
The value is none of values.
within
Reached inside the path's working hours.
outside
Reached outside the path's working hours.
exists
The label is set.
not_exists
The label isn't set.

EscalationDelayUntil

string · enum
Enum values:
working_hours_start
working_hours_end

Instead of a fixed delay, an escalation step can wait for the path's working hours to begin (no wait during working hours) or to end (no wait outside them).

working_hours_start
Wait until working hours begin; no wait during working hours.
working_hours_end
Wait until working hours end; no wait outside them.

EscalationPath

An escalation path: what happens when an alert fires, step by step, until someone acknowledges it. Monitors, hosts, domains and alert sources use their own paths, their project's, or the team's default path.
id
​string · uuid · required

Escalation path ID

name
​string · required

Name

Example: On-call engineers
description
​string | null · required

What the path is for

enabled
​boolean · required

Whether alerts follow the path. Alerts of a disabled path don't escalate

is_default
​boolean · required

Whether this is the team's default path, for resources without paths of their own or of their project. One per team

​WorkingHours · required

The working hours that branch conditions and "until working hours" waits use

​EscalationStep[] · required

The steps, in order; a branch continues in its then and else steps

​EscalationPathWarning[] · required

Problems that keep the path from reaching someone; empty when it can deliver

created_at
​string · date-time · required

When the path was created

EscalationPathReference

An escalation path a resource's alerts follow.
id
​string · uuid · required

Escalation path ID

name
​string · required

Escalation path name

Example: On-call engineers

EscalationPathWarning

A delivery problem of an escalation path.
code
​EscalationPathWarningCode · enum · required

What's wrong

no_deliverable_steps
Every notify step targets a disabled channel or a deleted schedule: alerts reach nobody.
disabled_channels
Some channels are disabled; their steps are skipped.
missing_schedules
An on-call step's schedule was deleted; the step is skipped.
Enum values:
no_deliverable_steps
disabled_channels
missing_schedules
message
​string · required

The problem in words

Example: Channel Ops Slack is disabled and will be skipped.

EscalationPathWarningCode

string · enum
Enum values:
no_deliverable_steps
disabled_channels
missing_schedules

A problem that keeps an escalation path from reaching someone.

no_deliverable_steps
Every notify step targets a disabled channel or a deleted schedule: alerts reach nobody.
disabled_channels
Some channels are disabled; their steps are skipped.
missing_schedules
An on-call step's schedule was deleted; the step is skipped.

EscalationStep

A step of an escalation path. Steps run in order, each after its wait. A `branch` is always the last step of its list: alerts go on with its `then` steps when its conditions hold, else with its `else` steps.
type
​EscalationStepAction · enum · required

What the step does

notify_channel
Send the alert to a channel.
create_incident
Declare an incident for the alert.
notify_on_call
Page whoever is on call in a schedule, by email and their own phone.
branch
If/else: alerts meeting every condition continue on its then side, the rest on its else side.
Enum values:
notify_channel
create_incident
notify_on_call
branch
delay_minutes
​integer | null · required

Minutes to wait before the step runs; null for a branch (decided at once) or when delay_until applies

Example: 5
​required
​required
​required
​array | null · required

branch steps: the conditions; all must hold for then

​array | null · required

branch steps: what happens when the conditions hold

​array | null · required

branch steps: what happens otherwise

EscalationStepAction

string · enum
Enum values:
notify_channel
create_incident
notify_on_call
branch

What an escalation step does.

notify_channel
Send the alert to a channel.
create_incident
Declare an incident for the alert.
notify_on_call
Page whoever is on call in a schedule, by email and their own phone.
branch
If/else: alerts meeting every condition continue on its then side, the rest on its else side.

EscalationStepInput

A step to run. `notify_channel` needs `channel_id`, `notify_on_call` needs `schedule_id`, `branch` needs `conditions` and ends its list: what follows goes in its `then` and `else`.
type
​EscalationStepAction · enum · required

What the step does

notify_channel
Send the alert to a channel.
create_incident
Declare an incident for the alert.
notify_on_call
Page whoever is on call in a schedule, by email and their own phone.
branch
If/else: alerts meeting every condition continue on its then side, the rest on its else side.
Enum values:
notify_channel
create_incident
notify_on_call
branch
delay_minutes
​integer · min: 0 · max: 1440

Minutes, 0 to 1440, to wait before the step runs. Default 0. Not for branches

Example: 5
​
channel_id
​string · uuid

notify_channel: the channel to send to

schedule_id
​string · uuid

notify_on_call: the schedule whose person on call is paged (on-call is part of the Team plan and up)

branch: 1 to 10 conditions; all must hold for then

branch: the steps when the conditions hold; empty ends the escalation there

branch: the steps otherwise; empty ends the escalation there

EscalationStepInputRequest

A step to run. `notify_channel` needs `channel_id`, `notify_on_call` needs `schedule_id`, `branch` needs `conditions` and ends its list: what follows goes in its `then` and `else`.
type
​EscalationStepAction · enum · required

What the step does

notify_channel
Send the alert to a channel.
create_incident
Declare an incident for the alert.
notify_on_call
Page whoever is on call in a schedule, by email and their own phone.
branch
If/else: alerts meeting every condition continue on its then side, the rest on its else side.
Enum values:
notify_channel
create_incident
notify_on_call
branch
delay_minutes
​integer · min: 0 · max: 1440

Minutes, 0 to 1440, to wait before the step runs. Default 0. Not for branches

Example: 5
​
channel_id
​string · uuid

notify_channel: the channel to send to

schedule_id
​string · uuid

notify_on_call: the schedule whose person on call is paged (on-call is part of the Team plan and up)

branch: 1 to 10 conditions; all must hold for then

branch: the steps when the conditions hold; empty ends the escalation there

branch: the steps otherwise; empty ends the escalation there

HealthStatus

string · enum
Enum values:
ok
warning
critical
unknown

Verdict of a host health check.

ok
Nothing to do.
warning
Needs attention soon: a reboot or security updates pending, the clock not synchronised.
critical
Needs attention now: a service failed, processes were killed for lack of memory.
unknown
The agent does not report it (yet): an older agent, or nothing to report on this host.

Host

A server with the Spectate agent, which reports CPU, memory, disk and network metrics. Hosts are added by installing the agent with an install token, not through the API.
id
​string · uuid · required

Host ID

label
​string | null · required

Name shown in the dashboard and alerts; the agent sets the hostname until you change it

Example: web-1
state
​HostState · enum · required

Whether the agent reports

up
Reported in the last 15 minutes.
stale
Reported before, but not in the last 15 minutes.
pending
The agent never reported.
Enum values:
up
stale
pending
​object | null · required

What the agent reports about the system, as key-value pairs (for example hostname, os, platform, kernel_version); the keys depend on the agent version and platform

cpu_info
​array | null · required

The CPUs, each as key-value pairs (for example model_name, cores, mhz)

agent_version
​string | null · required

Version of the agent

Example: 2.0.3
agent_update_version
​string | null · required

A newer agent release, when the host runs an older one (sudo spectate-agent update)

clock_offset_ms
​integer | null · required

Server time minus the host's clock, in milliseconds, as last measured by a v2 agent; null when unknown

last_seen_at
​string | null · date-time · required

When the agent last reported

no_data_alert_minutes
​integer | null · required

Minutes without data before the "no data received" alert fires; null when that alert is off

Example: 10
​required
project_id
​string | null · uuid · required

The project the host belongs to; null for none

​EscalationPathReference[] · required

Escalation paths the host's alerts follow. Empty: the project's paths, else the team's default path

created_at
​string · date-time · required

When the host registered

​HostHealthCheckResult[] · required

Health checks (agent 2.1 or later): failed services, out of memory, reboot, updates, clock, file handles and pressure. Checks of collectors that are switched off, and Linux-only checks on other systems, are left out

health_issues
​integer · required

Number of health checks that need attention (warning or critical)

HostHealthCheck

string · enum
Enum values:
services
oom
reboot
updates
clock
files
pressure

A host health check, computed from what agent 2.1+ reports.

services
Failed systemd services.
oom
Processes killed for lack of memory (OOM kills) in the last 24 hours.
reboot
The system needs a reboot (after kernel or library updates).
updates
Pending package updates, security updates in particular.
clock
Whether the clock is synchronised (NTP) and close to the server's.
files
Open file handles against the system's maximum.
pressure
Tasks stalled waiting for memory or I/O (pressure stall information).

HostHealthCheckResult

One health check of a host, computed from what agent 2.1 or later reports.
check
​HostHealthCheck · enum · required

What is checked

services
Failed systemd services.
oom
Processes killed for lack of memory (OOM kills) in the last 24 hours.
reboot
The system needs a reboot (after kernel or library updates).
updates
Pending package updates, security updates in particular.
clock
Whether the clock is synchronised (NTP) and close to the server's.
files
Open file handles against the system's maximum.
pressure
Tasks stalled waiting for memory or I/O (pressure stall information).
Enum values:
services
oom
reboot
updates
clock
files
pressure
status
​HealthStatus · enum · required

The verdict

ok
Nothing to do.
warning
Needs attention soon: a reboot or security updates pending, the clock not synchronised.
critical
Needs attention now: a service failed, processes were killed for lack of memory.
unknown
The agent does not report it (yet): an older agent, or nothing to report on this host.
Enum values:
ok
warning
critical
unknown
detail
​string | null · required

What was found, in one line

Example: nginx.service failed
since
​string | null · date-time · required

Since when the problem has lasted (for out of memory: the last kill); null when there is none

HostInstallToken

An install token: agents use it to register hosts with the team. Any number of hosts can use one token until it expires or is revoked.
id
​string · uuid · required

Install token ID

token
​string · required

The token to give the agent's installer (--token)

Example: hct_0b7c…
expires_at
​string | null · date-time · required

When the token stops registering new hosts. Hosts that registered keep reporting

created_at
​string · date-time · required

When the token was created

HostReference

A host something applies to.
id
​string · uuid · required

Host ID

label
​string | null · required

Host name shown in the dashboard; null until set or reported

Example: web-1

HostState

string · enum
Enum values:
up
stale
pending

Whether a host's agent reports.

up
Reported in the last 15 minutes.
stale
Reported before, but not in the last 15 minutes.
pending
The agent never reported.

ImpactLevel

string · enum
Enum values:
none
degraded_performance
partial_outage
major_outage

An impact on a status page, including none: how an incident or maintenance affects a component, or an incident's overall impact.

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.

Incident

An incident: a problem that affects customers, worked on by the team, with updates, roles and eventually a postmortem. Incidents are declared by hand, through the API, from Slack, or by an escalation path's `create_incident` step.
id
​string · uuid · required

Incident ID

number
​integer | null · required

The team's sequence number: INC-42 is 42. null for some older incidents

Example: 42
reference
​string · required

The human reference

Example: INC-42
title
​string · required

What's going on

Example: Checkout fails for some customers
summary
​string | null · required

More about it, in Markdown

severity
​Severity · enum · required

How bad it is

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
status
​IncidentStatus · enum · required

Where it stands

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
started_at
​string · date-time · required

When it started

acknowledged_at
​string | null · date-time · required

When someone acknowledged it

resolved_at
​string | null · date-time · required

When it was resolved

alert_id
​string | null · uuid · required

The alert that opened it, for incidents declared by an escalation path

​IncidentRoleAssignment[] · required

Who has which role

created_at
​string · date-time · required

When it was declared

IncidentPostmortem

An incident's postmortem: what happened, why, and what changes.
content
​string | null · required

The postmortem, in Markdown

published
​boolean · required

Whether it is marked as published (final). It is not shown on status pages

updated_at
​string · date-time · required

When it last changed

IncidentPostmortemResult

An incident's postmortem, if it has one.
​required

IncidentRole

string · enum
Enum values:
commander
communications_lead

A role in handling an incident; one member each.

commander
Leads the response and makes the calls.
communications_lead
Keeps customers and the company informed, for example through the status page.

IncidentRoleAssignment

Who has a role in an incident.
role
​IncidentRole · enum · required

The role

commander
Leads the response and makes the calls.
communications_lead
Keeps customers and the company informed, for example through the status page.
Enum values:
commander
communications_lead
​MemberReference · required

The member who has it

IncidentStatus

string · enum
Enum values:
investigating
identified
monitoring
resolved

Where an incident stands.

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.

IncidentTimelineEntry

Something that happened in an incident.
description
​string · required

What happened

Example: Incident acknowledged
actor
​string | null · required

Who did it: a member's name, API token "…", or Spectate staff; null for Spectate itself

Example: Jane Doe
​required
created_at
​string · date-time · required

When it happened

IncidentUpdate

An update posted to an incident: what's known now, and its status at that moment.
id
​string · uuid · required

Update ID

status
​IncidentStatus · enum · required

The incident's status with this update

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
body
​string · required

The update, in Markdown

Example: Rolled back the deploy; error rates are dropping.
created_at
​string · date-time · required

When it was posted

Invite

An invite to join the team, sent by email. The invitee accepts it in the dashboard with an account for that address.
id
​string · uuid · required

Invite ID

email
​string · email · required

The invitee's email address

Example: jane@example.com
role
​TeamRole · enum · required

The role they get when they accept

owner
Everything, including billing and deleting the team. One per team.
manager
Everything but billing and deleting the team.
admin
Configure monitoring, alerting, incidents and status pages; can't manage members or API tokens.
member
Read everything; manage monitors and incidents, acknowledge alerts.
billing
Billing and support only.
Enum values:
owner
manager
admin
member
billing
expired
​boolean · required

Whether it expired without being accepted. Expired invites don't count towards the member limit and can be sent again

expires_at
​string · date-time · required

When it expires, 7 days after it was sent

created_at
​string · date-time · required

When it was sent

Member

A member of the team. Use member IDs for on-call rotations and incident roles.
id
​string · uuid · required

Member (user) ID

name
​string · required

Name

Example: Jane Doe
email
​string · email · required

Email address

Example: jane@example.com
role
​TeamRole · enum · required

Role in the team

owner
Everything, including billing and deleting the team. One per team.
manager
Everything but billing and deleting the team.
admin
Configure monitoring, alerting, incidents and status pages; can't manage members or API tokens.
member
Read everything; manage monitors and incidents, acknowledge alerts.
billing
Billing and support only.
Enum values:
owner
manager
admin
member
billing
joined_at
​string | null · date-time · required

When they joined the team

MemberReference

A member of the team.
id
​string · uuid · required

Member (user) ID

name
​string · required

Name

Example: Jane Doe
email
​string · email · required

Email address

Example: jane@example.com

MetricCondition

An alert rule for host metrics, for example "CPU usage above 90% for 5 minutes". It applies to its hosts and to every host of its projects.
id
​string · uuid · required

Metric condition ID

metric
​MetricPoint · enum · required

The metric to watch

Enum values:
cpu_usage
system.cpu.user
system.cpu.system
system.cpu.iowait
system.cpu.stolen
system.cpu.idle
system.cpu.guest
system.cpu.interrupt
​MetricCondition · required

How the metric's value is compared with threshold

greater_than
Fires when the value is above the threshold.
less_than
Fires when the value is below the threshold.
equals
Fires when the value equals the threshold.
threshold
​number · required

Compared with the metric's value as the agent reports it, in the unit the host's charts show (percent for cpu_usage, memory_usage and disk_usage)

Example: 90
duration_minutes
​integer · required

Minutes the condition must hold before the alert fires; 0 fires on the first breach

Example: 5
severity
​Severity · enum · required

Severity of the alert it raises

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
​HostReference[] · required

Hosts it applies to

​ProjectReference[] · required

Projects whose hosts it applies to

MetricPoint

string · enum
Enum values:
cpu_usage
system.cpu.user
system.cpu.system
system.cpu.iowait
system.cpu.stolen
system.cpu.idle
system.cpu.guest
system.cpu.interrupt

A host metric the agent reports. cpu_usage, memory_usage, disk_usage, load_average, network_in and network_out are the summaries the dashboard charts; the system.* metrics are the agent's raw values.

Monitor

A monitor: a check of a URL, host or DNS name from Spectate's regions, with its settings and latest results.
id
​string · uuid · required

Monitor ID

label
​string · required

Name shown in the dashboard, alerts and status pages

Example: Website
protocol
​MonitorProtocol · enum · required

What is checked; decides the format of uri

https
An HTTPS request to the URL in uri, with a certificate check.
http
An HTTP request to the URL in uri.
icmp
A ping (ICMP echo) to the host in uri.
tcp
A TCP connect to host:port, optionally with a TLS handshake and a banner keyword.
dns
A DNS query for a record of the name in uri, optionally compared with expected values.
smtp
An SMTP greeting from host:port (port optional), with STARTTLS by default.
imap
An IMAP greeting from host:port (port optional), over TLS by default.
pop3
A POP3 greeting from host:port (port optional), over TLS by default.
Enum values:
https
http
icmp
tcp
dns
smtp
imap
pop3
uri
​string · required

The target as stored: a URL without the scheme for http and https (the protocol is the scheme), a host for icmp, host:port for tcp and mail, a DNS name for dns. url has the full URL

Example: example.com/health
url
​string · required

The target as the dashboard shows it, for example smtp://mail.example.com:587 for SMTP

Example: https://example.com/health
interval
​MonitorInterval · enum · required

Seconds between checks

Enum values:
30
60
120
180
300
600
900
1800
primary_location
​MonitorLocation · enum · required

Region the checks run from; a failed check is repeated from the same region about 5 seconds later before the monitor goes down

eu
Europe.
us
North America.
as
Asia.
oc
Oceania.
Enum values:
eu
us
as
oc
timeout
​integer · required

Seconds before a check times out

Example: 30
max_redirects
​integer | null · required

HTTP: redirects followed before the check fails; null follows up to 10

​MonitorHeader[] · required

HTTP: headers sent with every check

​MonitorAdvancedSettings · required

Protocol-specific settings

enabled
​boolean · required

Whether the monitor runs. false when paused by a member or by the system (see paused_reason)

​required
allow_insecure_requests
​boolean · required

HTTPS: whether invalid certificates are accepted for the check itself (the certificate check still reports them)

expected_http_status_code
​string | null · required

HTTP: status codes that count as up, comma-separated, * as a wildcard digit (2**,301); null accepts 2xx and 3xx

Example: 2**,301
certificate_check_enabled
​boolean · required

Whether the TLS certificate is checked for validity and expiry

certificate_expiry_threshold_days
​integer · required

Days before the certificate expires that the "expires soon" alert fires

Example: 14
uses_tls
​boolean · required

Whether a check reports a certificate: HTTPS, and TCP or mail with TLS

​required
certificate_expires_at
​string | null · date-time · required

When the certificate expires

certificate_valid_from
​string | null · date-time · required

When the certificate became valid

certificate_issuer
​string | null · required

Who issued the certificate

Example: R11
certificate_error
​string | null · required

Why the certificate isn't valid, with certificate_status invalid or expired

certificate_checked_at
​string | null · date-time · required

When the certificate was last checked

performance_check_enabled
​boolean · required

Whether slow responses raise alerts (performance_hard_threshold, performance_deviation_percentage)

performance_hard_threshold
​integer | null · required

Milliseconds: a response slower than this raises an alert

Example: 2000
performance_deviation_percentage
​integer | null · required

Percent: an alert fires when the average response time of the last performance_deviation_timeframe minutes is this much above the average of the performance_deviation_before_timeframe minutes before

Example: 50
performance_deviation_timeframe
​integer | null · required

Minutes of recent checks compared (15 to 120, in steps of 15)

Example: 30
performance_deviation_before_timeframe
​integer | null · required

Minutes before those that they're compared with (60 to 1440, in whole hours)

Example: 240
regional_performance_enabled
​boolean · required

Also measure response time from the regions other than primary_location, every minute (or at the interval, when longer). Shown with the monitor's performance; not used for uptime or alerts. Team plan and up

uptime_status
​UptimeStatus · enum · required

Whether the target answers, from the latest checks

pending
Not checked yet.
up
The latest check succeeded.
down
Checks fail: a failed check, repeated from the same region about 5 seconds later, failed again.
Enum values:
pending
up
down
uptime_status_changed_at
​string | null · date-time · required

When uptime_status last changed

last_checked_at
​string | null · date-time · required

When the monitor was last checked

response_time
​integer | null · required

Milliseconds the latest check took

Example: 182
​required
​MonitorUptime · required

Uptime over rolling windows

project_id
​string | null · uuid · required

The project the monitor belongs to; null for none

​EscalationPathReference[] · required

Escalation paths the monitor's alerts follow. Empty: the project's paths, else the team's default path

created_at
​string · date-time · required

When the monitor was created

updated_at
​string · date-time · required

When the monitor's settings last changed

MonitorAdvancedSettings

Protocol-specific settings of a monitor. Settings that don't apply to its protocol are `null`. The password is never returned; `has_auth_password` says whether one is set.
connection_timeout
​integer | null · required

Seconds to wait for the connection; null uses the monitor's timeout

​required
auth_user
​string | null · required

HTTP: user name for basic and digest

has_auth_password
​boolean · required

HTTP: whether a password or bearer token is stored

keyword
​string | null · required

HTTP: text the response body must contain (or must not, with keyword_inverted). TCP: the same for the server's banner

Example: OK
keyword_inverted
​boolean | null · required

Whether the check fails when keyword is found, instead of when it's missing

useragent
​string | null · required

HTTP: the User-Agent header; null sends Spectate's

​required
​required
​required
dns_resolver
​string | null · required

DNS: the resolver to query, as ip or ip:port; null uses the checker's resolver

Example: 1.1.1.1
dns_authoritative
​boolean | null · required

DNS: whether to ask the zone's authoritative nameservers directly

dns_expected_values
​array | null · required

DNS: values the answer must contain or equal (see dns_match); null or empty accepts any answer

​required
dns_alert_on_change
​boolean | null · required

DNS: whether a changed answer raises an alert

MonitorAdvancedSettingsInput

Protocol-specific settings to set. On update, settings you leave out keep their value; send `null` to reset one to its default.
connection_timeout
​integer | null · min: 1 · max: 60

Seconds to wait for the connection, 1 to 60; null uses the monitor's timeout

​
auth_user
​string | null · maxLength: 255

HTTP: user name for basic and digest

auth_password
​string | null · maxLength: 2500

HTTP: password, or the token for bearer. Write-only: never returned. Leave out or send an empty string to keep the stored one

keyword
​string | null · maxLength: 255

HTTP: text the response body must contain (or must not, with keyword_inverted). TCP: the same for the server's banner

Example: OK
keyword_inverted
​boolean | null

Fail the check when keyword is found, instead of when it's missing

useragent
​string | null · maxLength: 255

HTTP: the User-Agent header; null sends Spectate's

​
​
​
dns_resolver
​string | null · maxLength: 64

DNS: the resolver to query, as a public ip or ip:port; null uses the checker's resolver

Example: 1.1.1.1
dns_authoritative
​boolean | null

DNS: ask the zone's authoritative nameservers directly

dns_expected_values
​array | null · maxItems: 20

DNS: up to 20 values the answer must contain or equal (see dns_match)

​
dns_alert_on_change
​boolean | null

DNS: raise an alert when the answer changes

MonitorAuthMethod

string · enum
Enum values:
basic
bearer
digest

How an HTTP monitor authenticates its request.

basic
HTTP Basic: auth_user and auth_password.
bearer
Authorization: Bearer <auth_password>.
digest
HTTP Digest: auth_user and auth_password.

MonitorCheckDetails

Protocol details of the latest check, as the checker reported them. Fields that don't apply to the protocol are `null`.
banner
​string | null · required

TCP and mail: the first line of the server's greeting or banner

Example: 220 mail.example.com ESMTP
reply_code
​integer | null · required

SMTP: the greeting's reply code

Example: 220
starttls
​boolean | null · required

Mail: whether the session was upgraded with STARTTLS (or STLS)

tls_version
​string | null · required

The negotiated TLS version

Example: TLS 1.3
cipher_suite
​string | null · required

The negotiated cipher suite

Example: TLS_AES_128_GCM_SHA256
dns_answers
​array | null · required

DNS: the answer's values of the queried record type, sorted

dns_server
​string | null · required

DNS: the server that answered, as ip:port

Example: 1.1.1.1:53
dns_rcode
​string | null · required

DNS: the response code

Example: NOERROR

MonitorHeader

A request header an HTTP monitor sends.
key
​string · required

Header name

Example: X-Health-Check
value
​string · required

Header value

Example: spectate

MonitorHttpMethod

string · enum
Enum values:
HEAD
GET
POST
PUT
PATCH
DELETE

The HTTP method an HTTP monitor sends.

MonitorInterval

integer · enum
Enum values:
30
60
120
180
300
600
900
1800

Seconds between checks. Plans set the shortest interval a team may use.

MonitorLocation

string · enum
Enum values:
eu
us
as
oc

A region checks run from. A monitor's primary region decides its uptime and alerts (a failed check is repeated from the same region about 5 seconds later before it is marked down); on the Team plan and up the other regions can also measure its response time.

eu
Europe.
us
North America.
as
Asia.
oc
Oceania.

MonitorProtocol

string · enum
Enum values:
https
http
icmp
tcp
dns
smtp
imap
pop3

What a monitor checks, and so the format of its uri.

https
An HTTPS request to the URL in uri, with a certificate check.
http
An HTTP request to the URL in uri.
icmp
A ping (ICMP echo) to the host in uri.
tcp
A TCP connect to host:port, optionally with a TLS handshake and a banner keyword.
dns
A DNS query for a record of the name in uri, optionally compared with expected values.
smtp
An SMTP greeting from host:port (port optional), with STARTTLS by default.
imap
An IMAP greeting from host:port (port optional), over TLS by default.
pop3
A POP3 greeting from host:port (port optional), over TLS by default.

MonitorReference

A monitor something follows.
id
​string · uuid · required

Monitor ID

label
​string · required

Monitor name

Example: Website

MonitorState

string · enum
Enum values:
down
pending
up
paused

A monitor's state as the dashboard shows it: paused when disabled, otherwise its uptime status.

down
Checks fail: a failed check, repeated from the same region about 5 seconds later, failed again.
pending
Not checked yet.
up
The latest check succeeded.
paused
Disabled by a member or the system.

MonitorUptime

Share of successful checks, in percent, over rolling windows; `null` until there is data.
twenty_four_hours
​number | null · required

Last 24 hours

Example: 99.95
seven_days
​number | null · required

Last 7 days

thirty_days
​number | null · required

Last 30 days

ninety_days
​number | null · required

Last 90 days

NotificationCredits

Credits for SMS and voice notifications. The monthly allowance is spent first; bought credits never expire.
balance
​integer · required

Credits that can be spent now: what's left of this month's allowance plus bought credits

allowance
​integer · required

What's left of this month's allowance

purchased
​integer · required

Bought credits left

monthly
​integer · required

The plan's monthly allowance; 0 during the trial

reset_at
​string | null · date-time · required

When the allowance was last reset; null before the first reset

OnCallNow

Who is on call at a moment.
​required

OnCallOverride

Someone covering a schedule for a while, whatever the rotations say.
id
​string · uuid · required

Override ID

​MemberReference · required

Who covers

starts_at
​string · date-time · required

From when

ends_at
​string · date-time · required

Until when

note
​string | null · required

Why, for the team

Example: Covering for Jane's holiday
​required
created_at
​string · date-time · required

When it was added

OnCallRestrictions

When a rotation layer covers, each week; outside it the layers below take over.
days
​integer[] · required

ISO weekdays the layer covers, 1 (Monday) to 7 (Sunday)

start_time
​string | null · required

From when on those days, as HH:MM in the schedule's time zone; null with end_time null for the whole day

Example: 09:00
end_time
​string | null · required

Until when, as HH:MM; before start_time runs past midnight

Example: 17:00

OnCallRestrictionsInput

When a rotation layer covers, each week.
days
​integer[] · minItems: 1 · maxItems: 7 · unique · required

ISO weekdays the layer covers, 1 (Monday) to 7 (Sunday), at least one

start_time
​string | null

From when on those days, as HH:MM in the schedule's time zone; leave out with end_time for the whole day

Example: 09:00
end_time
​string | null

Until when, as HH:MM

Example: 17:00

OnCallRotation

A rotation layer: its participants take turns of `shift_length` `shift_unit`s, from `start_date` at `handoff_time`. Where layers overlap, the top layer (`position` 0) wins.
id
​string · uuid · required

Rotation ID

name
​string · required

Name

Example: Weekly primary
position
​integer · required

Layer order; 0 is the top layer and wins where layers overlap

shift_unit
​OnCallShiftUnit · enum · required

The unit of the shift length

hours
Absolute hours: shifts keep their length across DST changes.
days
Calendar days in the schedule's time zone: the handoff stays at the same wall-clock time.
weeks
Calendar weeks in the schedule's time zone.
Enum values:
hours
days
weeks
shift_length
​integer · required

Shift length in shift_units

Example: 1
start_date
​string · date · required

The first handoff's date in the schedule's time zone

Example: 2026-11-02
handoff_time
​string · required

Handoff time as HH:MM in the schedule's time zone

Example: 09:00
​required
​MemberReference[] · required

The members taking turns, in order

created_at
​string · date-time · required

When the rotation was created

OnCallSchedule

An on-call schedule: rotation layers and overrides that decide who gets paged when an escalation path's `notify_on_call` step runs.
id
​string · uuid · required

Schedule ID

name
​string · required

Name

Example: Primary
description
​string | null · required

What the schedule covers

timezone
​string · required

IANA time zone the rotations' dates, handoffs and restrictions are in

Example: Europe/Amsterdam
​required
next_handoff_at
​string | null · date-time · required

When the person on call changes next, within 4 weeks

​required
​OnCallRotation[] · required

Rotation layers, top first

​OnCallOverride[] · required

Overrides that haven't ended

​EscalationPathReference[] · required

Escalation paths with a step that pages this schedule

created_at
​string · date-time · required

When the schedule was created

OnCallScheduleReference

An on-call schedule something pages.
id
​string · uuid · required

On-call schedule ID

name
​string · required

Schedule name

Example: Primary

OnCallShift

A stretch of time someone is on call.
​required
starts_at
​string · date-time · required

When the shift starts

ends_at
​string · date-time · required

When it ends

source
​OnCallShiftSource · enum · required

Whether a rotation or an override gives the shift

rotation
A rotation layer's turn.
override
An override someone added.
Enum values:
rotation
override
rotation_id
​string | null · uuid · required

The rotation layer, for rotation shifts

override_id
​string | null · uuid · required

The override, for override shifts

OnCallShiftSource

string · enum
Enum values:
rotation
override

Where an on-call shift comes from.

rotation
A rotation layer's turn.
override
An override someone added.

OnCallShiftUnit

string · enum
Enum values:
hours
days
weeks

The unit of a rotation's shift length.

hours
Absolute hours: shifts keep their length across DST changes.
days
Calendar days in the schedule's time zone: the handoff stays at the same wall-clock time.
weeks
Calendar weeks in the schedule's time zone.

OnCallTimeline

Who is on call over a window: each layer's shifts, the overrides, and the result.
from
​string · date-time · required

Start of the window

to
​string · date-time · required

End of the window

timezone
​string · required

The schedule's time zone

Example: Europe/Amsterdam
​OnCallTimelineLayer[] · required

Each layer's shifts, top layer first

​OnCallShift[] · required

Override shifts

​OnCallShift[] · required

Who actually gets paged when: overrides first, then the highest layer. Gaps are absent

OnCallTimelineLayer

One rotation layer's shifts in a timeline.
rotation_id
​string · uuid · required

Rotation ID

name
​string · required

Rotation name

Example: Weekly primary
position
​integer · required

Layer order; 0 is the top layer

​OnCallShift[] · required

The layer's own shifts, before overrides and higher layers

Plan

string · enum
Enum values:
none
starter
team
business

Billing plans (docs/billing.md). The plan sets the features; the number of monitors + hosts is the subscription's quantity, priced per monitor (config/billing.php). None is a team without a paid plan: on the trial (which uses the trial plan's limits) or unpaid (paused).

none
No paid plan and no trial: monitoring is paused until the team subscribes.
starter
Starter: up to 3 members and 1 status page, the team default escalation path only.
team
Team: unlimited members, 5 status pages, on-call, more escalation paths and private status pages.
business
Business: everything in Team, with unlimited status pages and more subscribers and notification credits.

Project

A project: a group of monitors and hosts that share escalation paths. Every team has one default project, which can't be deleted.
id
​string · uuid · required

Project ID

name
​string · required

Project name

Example: Production
is_default
​boolean · required

Whether this is the team's default project, which new monitors and hosts join when no project is given. It can't be deleted

​EscalationPathReference[] · required

Escalation paths that alerts of this project's monitors and hosts follow, unless a monitor or host sets its own

created_at
​string · date-time · required

When the project was created

ProjectReference

A project a resource belongs to or applies to.
id
​string · uuid · required

Project ID

name
​string · required

Project name

Example: Production

PublishStatusPageUpdate

An update of the team's incident to publish on a status page.
status_page_id
​string · uuid · required

The status page to publish on

status
​IncidentStatus · enum · required

The public incident's status with this update. resolved closes every open impact period

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
body
​string · required

The message visitors read, in Markdown

Example: We found the cause and are rolling out a fix.
impact
​ImpactLevel · enum

The public incident's own impact, used while it affects no components; otherwise it follows the components

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
none
degraded_performance
partial_outage
major_outage
published_at
​string | null · date-time

When it happened, now or in the past (default now)

The components it affects as of published_at, with their impact; components left out are no longer affected. Leave out to keep the impacts as they are; send [] for none. Components of the status page only

notify_subscribers
​boolean

Email confirmed subscribers about the update (default true). false changes the page without emails

ResolveIncident

How an incident ends.
message
​string | null

A closing update, in Markdown; leave out for none

Example: Fixed by rolling back release 412.

ResourcePauseReason

string · enum
Enum values:
plan_limit
team_paused

Why the system (not the user) paused a monitor, host, domain or status page.

plan_limit
Over the plan limit (trial expired, downgrade); the oldest resources stay active.
team_paused
The whole team's monitoring is paused (no paid plan, staff action or scheduled deletion).

SavePostmortem

An incident's postmortem.
content
​string · required

The whole postmortem, in Markdown; replaces the current one

published
​boolean

Mark it as published (final), or as a draft again. Leave out to keep its state

SaveStatusPageIncidentWriteup

The public write-up to save on a status page incident.
published
​boolean · required

true shows it on the public incident page; false keeps it as a draft, or takes a published write-up down

content
​string | null · maxLength: 50000

The write-up, in Markdown, at most 50,000 characters. Required to publish

Example: On 26 October, card payments failed for 18 minutes after a configuration change.
notify_subscribers
​boolean

Email confirmed subscribers when this publishes the write-up for the first time (default false). Edits to a published write-up are never emailed

ScheduledMaintenance

Planned maintenance announced on a status page. While it is in progress its components show as under maintenance.
id
​string · uuid · required

Maintenance ID

title
​string · required

Title shown on the page

Example: Database upgrade
description
​string | null · required

What happens and what visitors notice, in Markdown; null for none

Example: The API is read-only for about ten minutes.
status
​ScheduledMaintenanceStatus · enum · required

Where it stands

scheduled
Announced, not started yet.
in_progress
Going on: its components show as under maintenance.
completed
Over.
Enum values:
scheduled
in_progress
completed
automatic
​boolean · required

true: starts at scheduled_at and completes at scheduled_until by itself (without a planned end it is completed by hand). false: only changes when you set status

scheduled_at
​string · date-time · required

Planned start

scheduled_until
​string | null · date-time · required

Planned end; null for none

started_at
​string | null · date-time · required

When it actually went in progress; null before

completed_at
​string | null · date-time · required

When it completed; null before

​StatusPageAffectedComponent[] · required

Components it affects

created_at
​string · date-time · required

When it was created

ScheduledMaintenanceStatus

string · enum
Enum values:
scheduled
in_progress
completed

Where a scheduled maintenance stands.

scheduled
Announced, not started yet.
in_progress
Going on: its components show as under maintenance.
completed
Over.

Severity

string · enum
Enum values:
critical
high
medium
low

How urgent an alert or incident is. Escalation paths can branch on it.

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.

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

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

StatusPageAffectedComponent

A component an incident or maintenance affects, and how badly.
​StatusPageComponentReference · required

The component

impact
​ImpactLevel · enum · required

For an incident: the ongoing impact, else the worst it had. For a maintenance: the impact it announces

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
none
degraded_performance
partial_outage
major_outage

StatusPageAffectedComponentInput

A component an incident or maintenance affects, and how badly.
component_id
​string · uuid · required

A component of the status page

impact
​ImpactLevel · enum · required

How badly; none for not affected

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
none
degraded_performance
partial_outage
major_outage

StatusPageAffectedComponentInputRequest

A component an incident or maintenance affects, and how badly.
component_id
​string · uuid · required

A component of the status page

impact
​ImpactLevel · enum · required

How badly; none for not affected

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
none
degraded_performance
partial_outage
major_outage

StatusPageComponent

A component of a status page: a part of your service visitors see the status of, optionally following a monitor.
id
​string · uuid · required

Component ID

name
​string · required

Name shown on the page

Example: API
description
​string | null · required

Text shown with the name; null for none

Example: Our public REST API.
group
​string | null · required

Group the component is shown in; null for the page's default group

Example: Backend
position
​integer · required

Order within the group, lowest first

status
​ComponentStatus · enum · required

The status, derived and read-only: the worst ongoing impact of an unresolved incident, then under_maintenance during maintenance, else operational

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
​required
show_latency_chart
​boolean · required

Whether the page shows the monitor's response time chart under the component

created_at
​string · date-time · required

When the component was created

StatusPageComponentReference

A component of the status page.
id
​string · uuid · required

Component ID

name
​string · required

Component name

Example: API

StatusPageCustomDomainCheck

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

StatusPageCustomDomainVerification

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

When ownership was proven; null before

txt_record_name
​string · required

Name of the TXT record to create

Example: _spectate.status.example.com
txt_record_value
​string · required

Value of the TXT record

Example: spectate-verify=4f1c0c2e9b7a4d3f8e6a5b2c1d0e9f8a
cname_target
​string · required

Host to point a CNAME at (subdomains), or an ALIAS (root domains); unique to the page

Example: 4f1c0c2e9b7a4d3f.custom.spectate.page

StatusPageDisplay

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

Let visitors subscribe to updates by email (when the plan includes subscribers)

history_layout
​StatusPageHistoryLayout · enum · required

How the uptime history is laid out

calendar
A calendar of days (default).
timeline
One row of bars per component.
Enum values:
calendar
timeline
uptime_bars
​StatusPageUptimeBars · enum · required

How a day with problems is drawn in the uptime history

fill
Colour part of the bar, by how long the problem lasted (default).
solid
Colour the whole bar.
Enum values:
fill
solid

StatusPageDisplayInput

What a status page shows; settings left out keep their value.
show_uptime_history
​boolean

Show each component's uptime history

show_latency_charts
​boolean

Show response time charts under components that have them on

show_incidents
​boolean

Show incidents

show_maintenances
​boolean

Show scheduled maintenance

show_subscriptions
​boolean

Let visitors subscribe to updates by email (when the plan includes subscribers)

history_layout
​StatusPageHistoryLayout · enum

How the uptime history is laid out

calendar
A calendar of days (default).
timeline
One row of bars per component.
Enum values:
calendar
timeline
uptime_bars
​StatusPageUptimeBars · enum

How a day with problems is drawn in the uptime history

fill
Colour part of the bar, by how long the problem lasted (default).
solid
Colour the whole bar.
Enum values:
fill
solid

StatusPageDnsRecordCheck

One DNS record that can verify a custom domain, with what DNS returned for it.
type
​DnsRecordType · enum · required

Record type: CNAME or TXT

Enum values:
A
AAAA
CNAME
MX
NS
TXT
CAA
SOA
name
​string · required

Record name

Example: _spectate.status.example.com
expected
​string · required

The value it needs

Example: spectate-verify=4f1c0c2e9b7a4d3f8e6a5b2c1d0e9f8a
found
​string[] · required

The values DNS returned; empty when there is no such record

ok
​boolean · required

Whether this record passes

StatusPageFont

string · enum
Enum values:
geist
inter
ibm-plex-sans
dm-sans
manrope
space-grotesk
source-serif
system

Typefaces of a status page.

geist
Geist (default).
inter
Inter.
ibm-plex-sans
IBM Plex Sans.
dm-sans
DM Sans.
manrope
Manrope.
space-grotesk
Space Grotesk.
source-serif
Source Serif.
system
The visitor's system font.

StatusPageHistoryLayout

string · enum
Enum values:
calendar
timeline

How a status page shows the uptime history of its components.

calendar
A calendar of days (default).
timeline
One row of bars per component.

StatusPageImpactPeriod

A period during which an incident affected a component. Periods drive the component's status and its uptime history.
id
​string · uuid · required

Period ID

​StatusPageComponentReference · required

The affected component

impact
​ComponentImpact · enum · required

How badly

degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
degraded_performance
partial_outage
major_outage
started_at
​string · date-time · required

When it started

ended_at
​string | null · date-time · required

When it ended; null while it goes on

duration_seconds
​integer · required

How long it lasted so far, in seconds

StatusPageIncident

A public incident on a status page: what visitors read, separate from the team's own incident (which can publish to it). Its impact on components is a timeline of periods.
id
​string · uuid · required

Status page incident ID

title
​string · required

Title shown on the page

Example: Elevated API error rates
status
​IncidentStatus · enum · required

Where it stands: the status of its latest update

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
impact
​ImpactLevel · enum · required

The worst ongoing impact of its periods (the peak once resolved), none without one. An incident that affects no components keeps the impact it was given

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
none
degraded_performance
partial_outage
major_outage
incident_id
​string | null · uuid · required

The team's incident that publishes to it; null for none

automated
​boolean · required

Opened by monitor automation and still managed by it, until someone posts an update or edits its timeline

​StatusPageIncidentUpdate[] · required

Updates, newest first

​StatusPageAffectedComponent[] · required

Components it affects or affected

​StatusPageImpactPeriod[] · required

The impact timeline, oldest first

resolved_at
​string | null · date-time · required

When it was resolved; null while open

created_at
​string · date-time · required

When it was created

​required

StatusPageIncidentUpdate

An update of a status page incident, as visitors read it.
id
​string · uuid · required

Update ID

status
​IncidentStatus · enum · required

The incident's status with this update

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
body
​string · required

The message, in Markdown

Example: We found the cause and are rolling out a fix.
published_at
​string · date-time · required

When it happened; updates are ordered by it

created_at
​string · date-time · required

When it was written

StatusPageIncidentWriteup

A public write-up of a status page incident: what happened and what changes, for visitors. Published, it shows on the public incident page; otherwise it's a draft only the team sees.
content
​string · required

The write-up, in Markdown

Example: On 26 October, card payments failed for 18 minutes after a configuration change.
published
​boolean · required

Whether visitors see it on the public incident page

published_at
​string | null · date-time · required

When it was first published; null while it's a draft. Editing a published write-up keeps this time

StatusPageIssueReport

A problem a visitor reported from the public page.
id
​string · uuid · required

Report ID

message
​string | null · required

What the visitor wrote; null for nothing

Example: Checkout keeps timing out.
email
​string | null · email · required

The address the visitor left for a reply. Only returned to tokens with status-pages:write; null for others (see has_email) and when they left none

Example: jane@example.com
has_email
​boolean · required

Whether the visitor left an email address, also when it isn't returned

​StatusPageComponentReference[] · required

Components the visitor picked; deleted components are left out

created_at
​string · date-time · required

When it was reported

StatusPageLanguage

string · enum
Enum values:
en
nl
de
fr
es
it

Languages of the public status page chrome and the subscriber emails. Customer-written content (names, incident titles and updates) is never translated.

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.

StatusPageSubscriber

Someone who subscribed to a status page's updates by email. Only confirmed subscribers (double opt-in) get emails.
id
​string · uuid · required

Subscriber ID

email
​string · email · required

Email address

Example: jane@example.com
confirmed_at
​string | null · date-time · required

When they confirmed the subscription; null while it awaits confirmation

language
​StatusPageLanguage · enum · required

Language of their emails: the page's language when they subscribed, or the one they read the page in

en
English.
nl
Dutch.
de
German.
fr
French.
es
Spanish.
it
Italian.
Enum values:
en
nl
de
fr
es
it
created_at
​string · date-time · required

When they subscribed

StatusPageTheme

How a status page looks. `null` values use the default.
accent
​string | null · required

Brand colour, as hex; null for Spectate's yellow (#ffea00)

Example: #0f766e
​required
​required
​required
​StatusPageThemeColors · required

Colours overriding the preset in light mode

​StatusPageThemeColors · required

Colours overriding the preset in dark mode

​StatusPageDisplay · required

What the page shows

logo_url
​string | null · uri · required

The logo, uploaded in the dashboard; null for none (the page shows its name)

logo_dark_url
​string | null · uri · required

The logo for dark mode; null shows logo_url in dark mode too

favicon_url
​string | null · uri · required

The favicon, uploaded in the dashboard; null for Spectate's

StatusPageThemeColors

Colours that override the preset in one colour scheme, as hex (`#0f766e`). `null` keeps the preset's colour.
background
​string | null · required

Page background

Example: #ffffff
surface
​string | null · required

Background of cards and panels

Example: #f8fafc
foreground
​string | null · required

Text

Example: #0f172a
muted
​string | null · required

Secondary text

Example: #64748b
border
​string | null · required

Lines and borders

Example: #e2e8f0
success
​string | null · required

Operational

Example: #16a34a
warning
​string | null · required

Degraded performance and maintenance

Example: #ca8a04
partial
​string | null · required

Partial outage

Example: #ea580c
danger
​string | null · required

Major outage

Example: #dc2626
info
​string | null · required

Information, such as scheduled maintenance

Example: #2563eb

StatusPageThemeColorsInput

Colours that override the preset in one colour scheme, as hex (`#0f766e` or `#0f7`). Colours left out keep their value; `null` goes back to the preset's colour.
background
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Page background

Example: #ffffff
surface
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Background of cards and panels

Example: #f8fafc
foreground
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Text

Example: #0f172a
muted
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Secondary text

Example: #64748b
border
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Lines and borders

Example: #e2e8f0
success
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Operational

Example: #16a34a
warning
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Degraded performance and maintenance

Example: #ca8a04
partial
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Partial outage

Example: #ea580c
danger
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Major outage

Example: #dc2626
info
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Information, such as scheduled maintenance

Example: #2563eb

StatusPageThemeInput

Changes to how a status page looks. Settings left out keep their value, also inside `light`, `dark` and `display`; `null` goes back to the default. Logos and the favicon are uploaded in the dashboard.
accent
​string | null · pattern: ^#(?:[0-9a-f]{3}|[0-…

Brand colour, as hex; null for Spectate's yellow

Example: #0f766e
​
​
​
​
​

What the page shows

StatusPageThemeMode

string · enum
Enum values:
light
dark
system

The colour scheme visitors of a status page get before they pick one.

light
Light.
dark
Dark.
system
The visitor's operating system setting.

StatusPageThemePreset

string · enum
Enum values:
spectate
paper
graphite
ocean
forest
lavender
ember
contrast

Colour presets of a status page. Colours set in light and dark override the preset.

spectate
Neutral greys (default).
paper
Warm cream and sepia ink.
graphite
Soft charcoal, strong lines.
ocean
Clear blues, navy in dark mode.
forest
Sage greens, deep pine in dark mode.
lavender
Lilac, aubergine in dark mode.
ember
Peach and terracotta, warm in dark mode.
contrast
High contrast: pure black and white, bold lines.

StatusPageUptimeBars

string · enum
Enum values:
fill
solid

How a day with problems is drawn in a status page's uptime history.

fill
Colour part of the bar, by how long the problem lasted (default).
solid
Colour the whole bar.

StatusPageVisibility

string · enum
Enum values:
public
private

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.

Subscription

The team's paid subscription.
plan
​Plan · enum · required

The plan paid for

none
No paid plan and no trial: monitoring is paused until the team subscribes.
starter
Starter: up to 3 members and 1 status page, the team default escalation path only.
team
Team: unlimited members, 5 status pages, on-call, more escalation paths and private status pages.
business
Business: everything in Team, with unlimited status pages and more subscribers and notification credits.
Enum values:
none
starter
team
business
interval
​BillingInterval · enum · required

How often it's billed

month
Billed every month.
year
Billed every year, for the price of 10 months.
Enum values:
month
year
quantity
​integer · required

Monitors and hosts paid for: the team's limit of both together

status
​SubscriptionStatus · enum · required

Where it stands at the payment provider

created
Created; the first payment hasn't gone through yet.
trial
In a trial period.
active
Paid and running.
on_grace_period
Cancelled, running until the end of the paid period.
paused
Paused.
canceled
Ended.
Enum values:
created
trial
active
on_grace_period
paused
canceled
cancelled
​boolean · required

Whether it's cancelled and runs until current_period_ends_at; it can be resumed in the dashboard until then

renews_at
​string | null · date-time · required

When it renews; null when it won't

current_period_ends_at
​string | null · date-time · required

End of the period paid for

payment_method
​string | null · required

How it's paid; null when unknown

Example: Card ending in 4242

SubscriptionStatus

string · enum
Enum values:
created
trial
active
on_grace_period
paused
canceled

Where a subscription stands at the payment provider.

created
Created; the first payment hasn't gone through yet.
trial
In a trial period.
active
Paid and running.
on_grace_period
Cancelled, running until the end of the paid period.
paused
Paused.
canceled
Ended.

Team

The team the API token belongs to.
id
​string · uuid · required

Team ID

name
​string · required

Name

Example: Acme
email
​string | null · email · required

The team's billing email: Spectate gives it to Vatly, which sends the invoices and receipts, at the team's first checkout (a plan or credits). null to use the address of the member who starts that checkout

Example: ops@acme.com
timezone
​string · required

The team's time zone; escalation path working hours without a time zone of their own use it

Example: Europe/Amsterdam
plan
​Plan · enum · required

The plan whose limits apply now: the trial plan during the trial

none
No paid plan and no trial: monitoring is paused until the team subscribes.
starter
Starter: up to 3 members and 1 status page, the team default escalation path only.
team
Team: unlimited members, 5 status pages, on-call, more escalation paths and private status pages.
business
Business: everything in Team, with unlimited status pages and more subscribers and notification credits.
Enum values:
none
starter
team
business
on_trial
​boolean · required

Whether the team is on its trial, without a paid plan yet

trial_ends_at
​string | null · date-time · required

When the trial ends; null without one

monitoring_paused_at
​string | null · date-time · required

Since when all monitoring is paused; null while it runs

​required
deletion_scheduled_at
​string | null · date-time · required

When the team and all its data will be deleted; null when it isn't scheduled. An owner can cancel it in the dashboard

​required
created_at
​string · date-time · required

When the team was created

TeamDeletionReason

string · enum
Enum values:
requested
unpaid
requested
An owner deleted the team.
unpaid
Monitoring was paused for too long without a paid plan (team_lifecycle.unpaid).

TeamPauseReason

string · enum
Enum values:
unpaid
deletion_scheduled
staff
unpaid
No paid plan: the trial or the subscription ended. Resumes when the team subscribes.
deletion_scheduled
The team is scheduled for deletion.
staff
Paused by Spectate staff from Overwatch (abuse, payment issues, on request).

TeamRole

string · enum
Enum values:
owner
manager
admin
member
billing

A member's role in the team: what they may do.

owner
Everything, including billing and deleting the team. One per team.
manager
Everything but billing and deleting the team.
admin
Configure monitoring, alerting, incidents and status pages; can't manage members or API tokens.
member
Read everything; manage monitors and incidents, acknowledge alerts.
billing
Billing and support only.

TestChannel

Options of a channel test.
enable
​boolean

Enable the channel again when the test succeeds, also after Spectate turned it off. Default false

TlsMode

string · enum
Enum values:
none
tls
starttls

How TCP and mail monitors use TLS: not at all, from the first byte (implicit TLS, e.g. 465/993/995), or by upgrading a plaintext session with STARTTLS (SMTP), STARTTLS (IMAP) or STLS (POP3).

none
Plain TCP, no TLS.
tls
TLS from the first byte (implicit TLS), as on ports 465, 993 and 995.
starttls
Upgrade a plaintext session: STARTTLS (SMTP, IMAP) or STLS (POP3). Mail monitors only.

UpdateAlertSource

Changes to an alert source; fields you leave out keep their value. Its type can't change.
name
​string · maxLength: 255

Name shown on its alerts

Example: Production Alertmanager
enabled
​boolean

Whether requests fire alerts

default_severity
​Severity · enum

Severity of alerts sent without one

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
auto_resolve_minutes
​integer | null · min: 5 · max: 10080

Minutes, 5 to 10080, after which an alert the tool stopped repeating resolves; null keeps it until resolved

secret
​string | null · maxLength: 255

Signing secret; an empty string or null removes it. Write-only

Type-specific settings; settings you leave out keep their value

project_id
​string | null · uuid

Project whose escalation paths apply; null for none

escalation_path_ids
​string[] · unique

Escalation paths for the source's alerts; replaces the current ones

UpdateChannel

Changes to a channel; fields you leave out keep their value. A channel's type can't change. Its settings object, when you send it, replaces the current settings, secrets included.
name
​string · maxLength: 255

Name shown in escalation paths

Example: On-call email
enabled
​boolean

Turn delivery on or off. Turning it on clears an automatic disable and its failure count

​ChannelEmail

New settings of an email channel

New settings of a slack channel

New settings of a discord channel

​ChannelWebhookUrlInput

New settings of a microsoft_teams channel

New settings of a webhook channel

New settings of a pushover channel

New settings of an sms channel

​ChannelPhone

New settings of a voice channel

UpdateDomain

Changes to a monitored domain; fields you leave out keep their value.
name
​string · maxLength: 255

Another domain to monitor instead; its registry data is looked up again

Example: example.org
enabled
​boolean

Pause (false) or resume (true) monitoring. Resuming goes through the plan's domain limit

expiry_threshold_days
​integer · min: 1 · max: 365

Days before expiry, 1 to 365, that the "expires soon" alert fires

alert_on_registry_changes
​boolean

Raise an alert when the registrar, nameservers or DNSSEC keys change

project_id
​string | null · uuid

Project of the domain; null for none

escalation_path_ids
​string[]

Escalation paths for the domain's alerts; replaces the current ones

UpdateEscalationPath

Changes to an escalation path; fields you leave out keep their value. `steps` replaces all steps. Alerts already escalating keep the steps they started with.
name
​string · maxLength: 255

Name, up to 255 characters

Example: On-call engineers
description
​string | null · maxLength: 1000

What the path is for, up to 1000 characters

enabled
​boolean

Whether alerts follow the path

is_default
​boolean

Make it the team's default path (the current default stops being one), or not

​

All steps, in order, up to 99 in total; replaces the current steps

UpdateHost

Changes to a host; fields you leave out keep their value.
label
​string · maxLength: 255

Name shown in the dashboard and alerts

Example: web-1
no_data_alert_minutes
​integer | null · min: 2 · max: 1440

Minutes without data, 2 to 1440, before the "no data received" alert fires; null turns it off. A firing alert ends at once when the host is within the new window

Example: 10
project_id
​string | null · uuid

Project of the host; null for none

escalation_path_ids
​string[]

Escalation paths for the host's alerts; replaces the current ones. [] follows the project's paths, else the team's default path

UpdateIncident

Changes to an incident; fields you leave out keep their value. To post what's known, use `createIncidentUpdate`; to close it, `resolveIncident`.
title
​string · maxLength: 255

What's going on

Example: Checkout fails for some customers
summary
​string | null

More about it, in Markdown

severity
​Severity · enum

How bad it is. Changing it is announced in the incident's Slack channel

critical
Customers are affected right now.
high
Serious, needs attention soon.
medium
Should be looked at.
low
Informational.
Enum values:
critical
high
medium
low
status
​IncidentStatus · enum

Where it stands, without posting an update

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved

UpdateMember

A member's new role.
role
​TeamRole · enum · required

The role; owner can't be given (422)

owner
Everything, including billing and deleting the team. One per team.
manager
Everything but billing and deleting the team.
admin
Configure monitoring, alerting, incidents and status pages; can't manage members or API tokens.
member
Read everything; manage monitors and incidents, acknowledge alerts.
billing
Billing and support only.
Enum values:
owner
manager
admin
member
billing

UpdateMonitor

Changes to a monitor; fields you leave out keep their value. To pause or resume it, use `pauseMonitor` and `resumeMonitor`.
label
​string · maxLength: 255

Name shown in the dashboard, alerts and status pages

Example: Website
protocol
​MonitorProtocol · enum

What to check. Changing it requires uri in the new protocol's format

https
An HTTPS request to the URL in uri, with a certificate check.
http
An HTTP request to the URL in uri.
icmp
A ping (ICMP echo) to the host in uri.
tcp
A TCP connect to host:port, optionally with a TLS handshake and a banner keyword.
dns
A DNS query for a record of the name in uri, optionally compared with expected values.
smtp
An SMTP greeting from host:port (port optional), with STARTTLS by default.
imap
An IMAP greeting from host:port (port optional), over TLS by default.
pop3
A POP3 greeting from host:port (port optional), over TLS by default.
Enum values:
https
http
icmp
tcp
dns
smtp
imap
pop3
uri
​string · maxLength: 2048

The target, in the format of the (new) protocol; see createMonitor. For http and https the scheme is optional and must match the protocol; it is stored without the scheme

Example: https://example.com/health
interval
​MonitorInterval · enum

Seconds between checks. Plans set the shortest allowed interval

Enum values:
30
60
120
180
300
600
900
1800
primary_location
​MonitorLocation · enum

Region the checks run from

eu
Europe.
us
North America.
as
Asia.
oc
Oceania.
Enum values:
eu
us
as
oc
timeout
​integer · min: 1 · max: 60

Seconds before a check times out, 1 to 60

max_redirects
​integer | null · min: 0 · max: 10

HTTP: redirects to follow, 0 to 10; null follows up to 10

​MonitorHeader[]

HTTP: up to 25 headers to send; replaces the current headers

​MonitorAdvancedSettingsInput

Protocol-specific settings; settings you leave out keep their value

allow_insecure_requests
​boolean

HTTPS: accept invalid certificates for the check itself

expected_http_status_code
​string | null · minLength: 1 · maxLength: 200

HTTP: status codes that count as up; null accepts 2xx and 3xx

certificate_check_enabled
​boolean

Check the TLS certificate for validity and expiry

certificate_expiry_threshold_days
​integer · min: 1 · max: 90

Days before the certificate expires that the "expires soon" alert fires, 1 to 90

performance_check_enabled
​boolean

Raise alerts for slow responses

performance_hard_threshold
​integer | null · min: 1 · max: 30000

Milliseconds, 1 to 30000: a response slower than this raises an alert

performance_deviation_percentage
​integer | null · min: 1 · max: 500

Percent, 1 to 500: alert when recent response times are this much above the earlier ones

performance_deviation_timeframe
​integer | null · min: 15 · max: 120

Minutes of recent checks to compare: 15 to 120 in steps of 15

performance_deviation_before_timeframe
​integer | null · min: 60 · max: 1440

Minutes before those to compare with: 60 to 1440 in whole hours

regional_performance_enabled
​boolean

Also measure response time from the regions other than primary_location, every minute (or at the interval, when longer). Shown with the monitor's performance; not used for uptime or alerts. Team plan and up

project_id
​string | null · uuid

Project of the monitor; null for none

escalation_path_ids
​string[]

Escalation paths for the monitor's alerts; replaces the current ones. [] follows the project's paths, else the team's default path

UpdateOnCallRotation

Changes to a rotation layer; fields you leave out keep their value.
name
​string · maxLength: 255

Name

Example: Weekly primary
position
​integer · min: 0 · max: 100

Move the layer to this position, 0 for the top; the others shift

shift_unit
​OnCallShiftUnit · enum

The unit of the shift length

hours
Absolute hours: shifts keep their length across DST changes.
days
Calendar days in the schedule's time zone: the handoff stays at the same wall-clock time.
weeks
Calendar weeks in the schedule's time zone.
Enum values:
hours
days
weeks
shift_length
​integer · min: 1 · max: 720

Shift length in shift_units

start_date
​string · date · pattern: ^\d{4}-\d{2}-\d{2}$

The first handoff's date

handoff_time
​string

Handoff time as HH:MM

Example: 09:00
​
participant_ids
​string[] · minItems: 1 · maxItems: 50 · unique

Members taking turns, in order; replaces the current ones

UpdateOnCallSchedule

Changes to an on-call schedule; fields you leave out keep their value.
name
​string · maxLength: 255

Name

Example: Primary
description
​string | null · maxLength: 1000

What the schedule covers

timezone
​string

IANA time zone. Rotations keep their dates and wall-clock handoff times in the new zone

Example: Europe/Amsterdam

UpdateProject

Changes to a project; fields left out keep their value.
name
​string · maxLength: 255

Project name

Example: Production
escalation_path_ids
​string[] · unique

Escalation paths for alerts of the project's monitors and hosts; replaces the current list. Send [] for none

UpdateScheduledMaintenance

Changes to a maintenance; fields left out keep their value.
title
​string · maxLength: 255

Title shown on the page, up to 255 characters

Example: Database upgrade
description
​string | null

What happens and what visitors notice, in Markdown; null for none

Example: The API is read-only for about ten minutes.
status
​ScheduledMaintenanceStatus · enum

Move it along by hand: in_progress starts it, completed completes it (stamping completed_at), scheduled puts it back

scheduled
Announced, not started yet.
in_progress
Going on: its components show as under maintenance.
completed
Over.
Enum values:
scheduled
in_progress
completed
automatic
​boolean

true: starts and completes on schedule. false: only changes when you set status

scheduled_at
​string · date-time

Planned start

scheduled_until
​string | null · date-time

Planned end; null for none

completed_at
​string | null · date-time

When it completed. Setting it completes the maintenance

Components it affects; replaces the current list. Components of the status page only

notify_subscribers
​boolean

Email confirmed subscribers when this starts or completes the maintenance (default true)

UpdateStatusPage

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

UpdateStatusPageComponent

Changes to a component; fields left out keep their value. Its status follows incidents and maintenance and can't be set.
name
​string · maxLength: 255

Name shown on the page

Example: API
description
​string | null

Text shown with the name; null for none

Example: Our public REST API.
group
​string | null · maxLength: 255

Group to show the component in; null for the page's default group

Example: Backend
position
​integer · min: 0

Order within the group, lowest first, from 0. New components go last when left out

monitor_id
​string | null · uuid

A monitor of the team whose uptime history and response times the component shows, and whose downtime opens an incident when monitor automation is on; null for none

show_latency_chart
​boolean

Show the monitor's response time chart under the component

UpdateStatusPageImpactPeriod

Changes to an impact period; fields left out keep their value.
component_id
​string · uuid

A component of the status page

impact
​ComponentImpact · enum

How badly

degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
degraded_performance
partial_outage
major_outage
started_at
​string · date-time

When it started, now or in the past

ended_at
​string | null · date-time

When it ended, after started_at and not in the future; null reopens the period

UpdateStatusPageIncident

Changes to a public incident without posting an update; fields left out keep their value.
title
​string · maxLength: 255

Title shown on the page

Example: Elevated API error rates
status
​IncidentStatus · enum

Where it stands. Changing it posts no update; resolved closes every open impact period now

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
impact
​ImpactLevel · enum

The incident's own impact, used while it affects no components

none
No impact (for a component: not affected).
degraded_performance
Slower or less reliable than usual.
partial_outage
Down for some visitors or some functions.
major_outage
Down.
Enum values:
none
degraded_performance
partial_outage
major_outage

The components it affects as of now, with their impact; components left out are no longer affected. Leave out to keep the impacts as they are; send [] for none. Components of the status page only

notify_subscribers
​boolean

Email confirmed subscribers when this resolves the incident (default true). false changes the page without emails

UpdateStatusPageIncidentUpdate

Changes to an update of a public incident; fields left out keep their value.
status
​IncidentStatus · enum

The incident's status with this update. The incident follows its latest update

investigating
Declared; the cause isn't known yet.
identified
Acknowledged: the cause is known and someone works on it.
monitoring
A fix is out; watching whether it holds.
resolved
Over.
Enum values:
investigating
identified
monitoring
resolved
body
​string

The message, in Markdown

Example: We found the cause and are rolling out a fix.
published_at
​string · date-time

When it happened, now or in the past. Impact periods that started or ended at the old time move with it

UpdateTeam

Changes to the team; fields left out keep their value.
name
​string · maxLength: 255

Name, up to 255 characters

Example: Acme
email
​string | null · email · maxLength: 255

The team's billing email: Spectate gives it to Vatly, which sends the invoices and receipts, at the team's first checkout (a plan or credits). null to use the address of the member who starts that checkout

Example: ops@acme.com
timezone
​string

The team's time zone, as an IANA name; escalation path working hours without a time zone of their own use it

Example: Europe/Amsterdam

UptimeStatus

string · enum
Enum values:
pending
up
down

Whether a monitor's target answers, from its latest checks.

pending
Not checked yet.
up
The latest check succeeded.
down
Checks fail: a failed check, repeated from the same region about 5 seconds later, failed again.

Usage

How much of the plan's limits the team uses.
​UsageLimit · required

Monitors and hosts together; on paid plans the limit is the quantity paid for

​UsageLimit · required

Monitored domains

​UsageLimit · required

Projects

​UsageLimit · required

Status pages

​UsageLimit · required

Confirmed subscribers of all status pages together; at the limit the pages take no new subscribers

​UsageLimit · required

Escalation paths, including the team default path

​UsageLimit · required

Members plus pending invites

UsageLimit

How much of a plan limit is used.
used
​integer · required

In use now

limit
​integer | null · required

The limit; null for unlimited, 0 when the plan doesn't include it. At the limit, creating more through the API answers 403 PLAN_LIMIT_REACHED

ValidationError

The request body or query failed validation.
​object · required

What went wrong.

WorkingHours

Weekly working hours, for branch conditions and "until working hours" waits.
timezone
​string · required

IANA time zone the hours are in

Example: Europe/Amsterdam
days
​integer[] · required

ISO weekdays, 1 (Monday) to 7 (Sunday)

start_time
​string · required

When working hours begin, as HH:MM

Example: 09:00
end_time
​string · required

When they end, as HH:MM; before start_time runs past midnight

Example: 17:00
description
​string · required

The hours in words

Example: Mon–Fri 09:00–17:00 (Europe/Amsterdam)

WorkingHoursInput

Weekly working hours of a path.
timezone
​string · required

IANA time zone the hours are in

Example: Europe/Amsterdam
days
​integer[] · minItems: 1 · maxItems: 7 · unique · required

ISO weekdays, 1 (Monday) to 7 (Sunday), at least one

start_time
​string · required

When working hours begin, as HH:MM

Example: 09:00
end_time
​string · required

When they end, as HH:MM; before start_time runs past midnight

Example: 17:00