Schemas
ActivityCauserType
Who caused an activity log entry.
user A team member. |
api_token A team API token. |
employee Spectate staff. |
Alert
idAlert ID
titleWhat's wrong
descriptionMore about it, as the source described it
statusWhether the problem is ongoing
firing The problem is ongoing; it escalates until acknowledged. |
resolved The problem is over. |
severityHow urgent it is
critical Customers are affected right now. |
high Serious, needs attention soon. |
medium Should be looked at. |
low Informational. |
source_typeWhat 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). |
fired_atWhen it fired
acknowledged_atWhen it was acknowledged, which stopped its escalation; null while unacknowledged
acknowledged_byWho acknowledged it: a member's name, an API token, or how (for example a phone call)
resolved_atWhen it resolved; null while firing
resolved_byWho 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
Labels the source sent (Prometheus, Grafana); null when it sent none
Links the source sent along
AlertLink
labelWhat it opens
urlWhere it goes
AlertResource
typeWhat kind of resource
idThe resource's ID, for example a monitor ID
nameIts name or label
AlertResourceType
What kind of resource an alert is about.
AlertSource
idAlert source ID
nameName shown on its alerts
typeThe 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. |
enabledWhether requests fire alerts; a disabled source rejects them
webhook_urlWhere the tool sends its webhooks. Secret: rotate it with rotateAlertSourceToken if it leaks
email_addressemail sources: the address to send mails to. Secret like the URL
has_secretWhether a signing secret is set (Sentry client secret, Grafana HMAC secret, Alertmanager bearer token); it's never returned
default_severitySeverity 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. |
auto_resolve_minutesMinutes after which an alert the tool stopped repeating resolves; null keeps it until the tool resolves it
Type-specific settings
project_idThe project whose escalation paths apply when the source has none of its own; null for none
Escalation paths the source's alerts follow. Empty: the project's paths, else the team's default path
last_event_atWhen the source last received a request
events_countRequests the source has received in total
firing_alerts_countAlerts of the source that are firing now
created_atWhen the source was created
AlertSourceEvent
idEvent ID
received_atWhen the request arrived
outcomeWhat 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. |
summaryWhat happened, in words
errorWhy it was rejected, with outcome rejected
What it did per alert
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
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
actionWhat 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. |
titleThe alert's title
dedupe_keyThe key the tool groups repeats by; requests with the same key update one alert
alert_idThe alert; null when none was touched
AlertSourceEventOutcome
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
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
alert_on_new_issuesSentry: also alert on every new issue (issue created webhooks), not only on alert rules
signature_headerGrafana: the header carrying the HMAC signature; null means X-Grafana-Alerting-Signature
timestamp_headerGrafana: the timestamp header, when the contact point signs {timestamp}:{body}
AlertSourceSettingsInput
alert_on_new_issuesSentry: also alert on every new issue
signature_headerGrafana: the header carrying the HMAC signature, up to 100 characters; null for the default
timestamp_headerGrafana: the timestamp header, when the contact point signs {timestamp}:{body}; null for none
AlertSourceType
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
Whether an alert's problem is ongoing.
firing The problem is ongoing; it escalates until acknowledged. |
resolved The problem is over. |
ApiError
What went wrong.
ApiToken
idToken ID
nameName given to the token when it was created
last_fourLast four characters of the token, to tell tokens apart
abilitiesWhat the token may do. Each endpoint lists the ability it requires
The team the token acts for
expires_atWhen the token stops working; null if it never expires
created_atWhen the token was created
ApiTokenAbility
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
idTeam ID
nameTeam name
AssignIncidentRole
member_idThe member who takes the role; they replace whoever had it
Billing
planThe 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. |
subscribedWhether the team has a paid subscription
on_trialWhether the team is on its trial
trial_ends_atWhen the trial ends; null without one
plan_ends_atEnd of a plan Spectate granted without a subscription; null without one
SMS and voice notification credits
BillingInterval
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
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
idChannel ID
nameName shown in escalation paths
typeWhere the channel delivers
enabledWhether the channel delivers. false when a member turned it off or Spectate did after repeated failures (auto_disabled)
auto_disabledWhether Spectate turned the channel off because deliveries kept failing. Fix the cause, then enable it or send a test with enable
disabled_atWhen the channel was turned off automatically
disabled_reasonWhy it was turned off automatically
consecutive_failuresFailed deliveries since the last successful one
failing_sinceSince when deliveries fail
last_failure_atWhen a delivery last failed
last_failure_reasonWhy the last delivery failed
last_delivered_atWhen a delivery last succeeded
created_atWhen the channel was created
ChannelEmail
addressThe address alerts go to
ChannelPhone
phone_numberThe phone number in international format
ChannelPushover
user_keyThe Pushover user or group key
priorityPushover priority, -2 (lowest) to 2 (emergency); null for normal (0)
ChannelPushoverInput
user_keyThe Pushover user or group key
api_tokenYour Pushover application's API token. Write-only: never returned
priorityPushover priority, -2 (lowest) to 2 (emergency). Default 0
ChannelReference
idChannel ID
nameChannel name
typeWhere it delivers
enabledWhether it delivers; disabled channels are skipped
ChannelSlack
installation_idThe team's Slack installation (workspace) that posts. null for older channels with their own bot token
channelThe Slack channel ID
channel_nameThe channel's name, for display
ChannelSlackInput
installation_idThe team's Slack installation (workspace) that posts
channelThe Slack channel ID (not its name); invite the Spectate app to private channels
channel_nameThe channel's name, for display
ChannelTelegram
chat_idThe Telegram chat ID
chat_titleThe chat's title, for display
ChannelTestResult
messageWhat was sent
The channel after the test: its failure count is cleared, and with enable it's enabled again
ChannelWebhook
hostThe host of the URL the channel posts to
header_namesNames of the headers it sends
ChannelWebhookHeader
keyHeader name. Hop-by-hop and connection headers are refused
valueHeader value; write-only, never returned
ChannelWebhookInput
urlThe URL to POST to; must be a public HTTP or HTTPS address
Headers to send with every request, for example for authentication
ChannelWebhookUrlInput
webhook_urlThe incoming webhook URL from Discord (Server settings → Integrations → Webhooks) or a Teams workflow. Must be a public HTTPS address
ComponentImpact
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
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
nameName shown on its alerts, up to 255 characters
typeThe 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. |
default_severitySeverity 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. |
auto_resolve_minutesMinutes, 5 to 10080, after which an alert the tool stopped repeating resolves; null keeps it until resolved. Default null, or 60 for email sources
secretSigning secret the tool uses: Sentry client secret, Grafana HMAC secret or Alertmanager bearer token. Write-only
Type-specific settings
project_idProject whose escalation paths apply when the source has none of its own
escalation_path_idsEscalation paths for the source's alerts
CreateChannel
nameName shown in escalation paths
typeWhere the channel delivers; telegram can't be created through the API
enabledWhether it delivers from the start. Default true
Settings of an email channel
Settings of a slack channel
Settings of a discord channel
Settings of a microsoft_teams channel
Settings of a webhook channel
Settings of a pushover channel
Settings of an sms channel
Settings of a voice channel
CreateDomain
nameThe registered domain, without www. or a path; internationalised names may be in Unicode or punycode
enabledWhether to start monitoring at once. Default true
expiry_threshold_daysDays before expiry, 1 to 365, that the "expires soon" alert fires. Default 30
alert_on_registry_changesRaise an alert when the registrar, nameservers or DNSSEC keys change. Default true
project_idProject to add the domain to; default the team's default project, null for none
escalation_path_idsEscalation paths for the domain's alerts. Leave out or send [] to follow the project's paths, else the team's default path
CreateEscalationPath
nameName, up to 255 characters
descriptionWhat the path is for, up to 1000 characters
enabledWhether alerts follow the path. Default true
is_defaultMake 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
titleWhat's going on, up to 255 characters
severityHow bad it is
critical Customers are affected right now. |
high Serious, needs attention soon. |
medium Should be looked at. |
low Informational. |
summaryMore about it, in Markdown
CreateIncidentUpdate
bodyWhat's known now, in Markdown
statusMove 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. |
CreateInvite
emailTheir email address; disposable addresses aren't accepted
roleThe 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. |
CreateMetricCondition
metricThe metric to watch
How the metric's value is compared with threshold
thresholdCompared with the metric's value as the agent reports it, in the unit the host's charts show
severitySeverity of the alert it raises
critical Customers are affected right now. |
high Serious, needs attention soon. |
medium Should be looked at. |
low Informational. |
duration_minutesMinutes, 0 to 60, the condition must hold before the alert fires. Default 0: on the first breach
host_idsHosts of the team it applies to
project_idsProjects of the team whose hosts it applies to
CreateMonitor
labelName shown in the dashboard, alerts and status pages
protocolWhat 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. |
uriThe 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
intervalSeconds between checks. Plans set the shortest allowed interval (422 below it)
enabledWhether the monitor starts running at once. Default true
primary_locationRegion the checks run from. Default eu
eu Europe. |
us North America. |
as Asia. |
oc Oceania. |
timeoutSeconds before a check times out, 1 to 60. Default 30
max_redirectsHTTP: redirects to follow, 0 to 10; null follows up to 10
HTTP: up to 25 headers to send
Protocol-specific settings
allow_insecure_requestsHTTPS: accept invalid certificates for the check itself. Default false
expected_http_status_codeHTTP: status codes that count as up, comma-separated, * as a wildcard digit; null accepts 2xx and 3xx
certificate_check_enabledCheck the TLS certificate for validity and expiry (HTTPS, and TCP or mail with TLS). Default false
certificate_expiry_threshold_daysDays before the certificate expires that the "expires soon" alert fires, 1 to 90. Default 14
performance_check_enabledRaise alerts for slow responses. Default false
performance_hard_thresholdMilliseconds, 1 to 30000: a response slower than this raises an alert
performance_deviation_percentagePercent, 1 to 500: alert when recent response times are this much above the earlier ones (see the two timeframes)
performance_deviation_timeframeMinutes of recent checks to compare: 15, 30, 45, 60, 75, 90, 105 or 120. Must be shorter than performance_deviation_before_timeframe
performance_deviation_before_timeframeMinutes before those to compare with, a whole number of hours from 60 to 1440
regional_performance_enabledAlso 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_idProject to add the monitor to; default the team's default project, null for none
escalation_path_idsEscalation paths for the monitor's alerts. Leave out or send [] to follow the project's paths, else the team's default path
CreateOnCallOverride
member_idThe member who covers
starts_atFrom when, as an ISO 8601 date and time
ends_atUntil when; after starts_at
noteWhy, for the team; up to 500 characters
CreateOnCallRotation
nameName, up to 255 characters
shift_unitThe 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. |
shift_lengthShift length in shift_units: up to 720 hours, 90 days or 12 weeks
start_date^\d{4}-\d{2}-\d{2}$ · requiredThe first handoff's date in the schedule's time zone; turns are counted from it
handoff_timeHandoff time as HH:MM in the schedule's time zone
positionLayer order, 0 for the top. Default: below the existing layers
participant_ids1 to 50 team members taking turns, in order
CreateOnCallSchedule
nameName, up to 255 characters
timezoneIANA time zone the rotations' dates, handoffs and restrictions are in
descriptionWhat the schedule covers, up to 1000 characters
CreateProject
nameProject name
escalation_path_idsEscalation paths for alerts of the project's monitors and hosts. Leave out for none
CreateScheduledMaintenance
titleTitle shown on the page, up to 255 characters
scheduled_atPlanned start, in the future
descriptionWhat happens and what visitors notice, in Markdown; null for none
scheduled_untilPlanned end, after scheduled_at; null for none
automatictrue (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_subscribersEmail confirmed subscribers about it (default true)
CreateStatusPage
nameName, shown as the page title
slug^[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
visibilityWho 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. |
custom_domainYour 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
password_protectedLet 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
passwordThe password, 8 to 255 characters. Write-only; leave out or send null to keep the current one
languageLanguage of the public page and of subscriber emails
en English. |
nl Dutch. |
de German. |
fr French. |
es Spanish. |
it Italian. |
match_browser_languageGive visitors their browser's language when it is supported
How the page looks and what it shows
collapsed_groupsComponent groups that start collapsed; replaces the current list
automation_enabledMonitor 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_messagePosted when a linked monitor goes down, up to 5000 characters; {component} and {status_page} are filled in. null for a default message
automation_recovered_messagePosted when the monitor recovers, up to 5000 characters; null for a default message
issue_reports_enabledLet visitors report problems from the page
issue_reports_show_on_pageWhile reports are above the threshold, say on the page that users are reporting issues
issue_reports_alerts_enabledFire an alert when reports reach the threshold
issue_reports_thresholdReports within issue_reports_window_minutes that count as above the threshold, 1 to 1000
issue_reports_window_minutesThe window for the threshold, in minutes, 1 to 1440
traffic_alerts_enabledAlert when views reach traffic_alert_multiplier times the usual views for the time of day
traffic_alert_multiplierHow many times the usual views alert, 2 to 100
traffic_alert_min_viewsFewer views than this in 15 minutes never alert, 10 to 1000000
escalation_path_idsEscalation paths for the page's alerts (issue reports and traffic spikes); replaces the current ones. Empty for the team's default path
CreateStatusPageComponent
nameName shown on the page
descriptionText shown with the name; null for none
groupGroup to show the component in; null for the page's default group
positionOrder within the group, lowest first, from 0. New components go last when left out
monitor_idA 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_chartShow the monitor's response time chart under the component
CreateStatusPageImpactPeriod
component_idA component of the status page
impactHow badly
degraded_performance Slower or less reliable than usual. |
partial_outage Down for some visitors or some functions. |
major_outage Down. |
started_atWhen it started, now or in the past
ended_atWhen it ended, after started_at and not in the future; null or left out while it goes on
CreateStatusPageIncident
titleTitle shown on the page
statusWhere 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. |
bodyThe first update, in Markdown. Leave out to create the incident without one
published_atWhen it happened, now or in the past (default now)
impactThe 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. |
incident_idThe 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_subscribersEmail confirmed subscribers about the new incident (default true). false changes the page without emails
CreateStatusPageIncidentUpdate
statusThe 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. |
bodyThe message, in Markdown
published_atWhen 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_subscribersEmail confirmed subscribers about the update (default true). false changes the page without emails
DnsMatch
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
The DNS record type a DNS monitor queries.
Domain
idDomain ID
nameThe registered domain, lowercase, internationalised names in punycode
enabledWhether the domain is monitored. false when paused by a member or by the system (see paused_reason)
registrarThe registrar, as the registry reports it
registered_atWhen the domain was registered
expires_atWhen the registration expires
registry_changed_atWhen the registration last changed at the registry
days_until_expirationDays until the registration expires; negative once expired
is_expiredWhether the registration has expired
is_expiring_soonWhether it expires within expiry_threshold_days
nameserversThe domain's nameservers
dnssecWhether the registry publishes DNSSEC keys for the domain
The DNSSEC delegation signer records
statusesEPP status codes, for example client transfer prohibited
last_checked_atWhen the registry was last checked
expiry_threshold_daysDays before expiry that the "expires soon" alert fires
alert_on_registry_changesWhether changes of the registrar, nameservers or DNSSEC keys raise an alert
project_idThe project the domain belongs to; null for none
Escalation paths the domain's alerts follow. Empty: the project's paths, else the team's default path
created_atWhen monitoring of the domain started
DomainDnssecKey
key_tagKey tag of the DNSKEY the record points at
algorithmDNSSEC algorithm number, for example 13 (ECDSA P-256 with SHA-256)
digest_typeDigest type number, for example 2 (SHA-256)
digestThe digest, in hexadecimal
DomainLookupError
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
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
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
fieldWhat 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. |
operatorHow 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. |
keylabel conditions: the label name sent by the alert source
valuesValues 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
descriptionThe condition in words
EscalationConditionField
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
fieldWhat 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. |
operatorHow 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. |
keylabel conditions: the label name sent by the alert source, up to 100 characters
valuesUp to 20 values to match, for is_one_of and is_not_one_of: severities, sources (uptime, external:grafana…) or label values
EscalationConditionInputRequest
fieldWhat 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. |
operatorHow 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. |
keylabel conditions: the label name sent by the alert source, up to 100 characters
valuesUp to 20 values to match, for is_one_of and is_not_one_of: severities, sources (uptime, external:grafana…) or label values
EscalationConditionOperator
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
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
idEscalation path ID
nameName
descriptionWhat the path is for
enabledWhether alerts follow the path. Alerts of a disabled path don't escalate
is_defaultWhether this is the team's default path, for resources without paths of their own or of their project. One per team
The working hours that branch conditions and "until working hours" waits use
The steps, in order; a branch continues in its then and else steps
Problems that keep the path from reaching someone; empty when it can deliver
created_atWhen the path was created
EscalationPathReference
idEscalation path ID
nameEscalation path name
EscalationPathWarning
codeWhat'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. |
messageThe problem in words
EscalationPathWarningCode
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
typeWhat 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. |
delay_minutesMinutes to wait before the step runs; null for a branch (decided at once) or when delay_until applies
branch steps: the conditions; all must hold for then
branch steps: what happens when the conditions hold
branch steps: what happens otherwise
EscalationStepAction
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
typeWhat 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. |
delay_minutesMinutes, 0 to 1440, to wait before the step runs. Default 0. Not for branches
channel_idnotify_channel: the channel to send to
schedule_idnotify_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
typeWhat 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. |
delay_minutesMinutes, 0 to 1440, to wait before the step runs. Default 0. Not for branches
channel_idnotify_channel: the channel to send to
schedule_idnotify_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
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
idHost ID
labelName shown in the dashboard and alerts; the agent sets the hostname until you change it
stateWhether 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. |
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_infoThe CPUs, each as key-value pairs (for example model_name, cores, mhz)
agent_versionVersion of the agent
agent_update_versionA newer agent release, when the host runs an older one (sudo spectate-agent update)
clock_offset_msServer time minus the host's clock, in milliseconds, as last measured by a v2 agent; null when unknown
last_seen_atWhen the agent last reported
no_data_alert_minutesMinutes without data before the "no data received" alert fires; null when that alert is off
project_idThe project the host belongs to; null for none
Escalation paths the host's alerts follow. Empty: the project's paths, else the team's default path
created_atWhen the host registered
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_issuesNumber of health checks that need attention (warning or critical)
HostHealthCheck
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
checkWhat 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). |
statusThe 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. |
detailWhat was found, in one line
sinceSince when the problem has lasted (for out of memory: the last kill); null when there is none
HostInstallToken
idInstall token ID
tokenThe token to give the agent's installer (--token)
expires_atWhen the token stops registering new hosts. Hosts that registered keep reporting
created_atWhen the token was created
HostReference
idHost ID
labelHost name shown in the dashboard; null until set or reported
HostState
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
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
idIncident ID
numberThe team's sequence number: INC-42 is 42. null for some older incidents
referenceThe human reference
titleWhat's going on
summaryMore about it, in Markdown
severityHow bad it is
critical Customers are affected right now. |
high Serious, needs attention soon. |
medium Should be looked at. |
low Informational. |
statusWhere 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. |
started_atWhen it started
acknowledged_atWhen someone acknowledged it
resolved_atWhen it was resolved
alert_idThe alert that opened it, for incidents declared by an escalation path
Who has which role
created_atWhen it was declared
IncidentPostmortem
contentThe postmortem, in Markdown
publishedWhether it is marked as published (final). It is not shown on status pages
updated_atWhen it last changed
IncidentRole
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
roleThe role
commander Leads the response and makes the calls. |
communications_lead Keeps customers and the company informed, for example through the status page. |
The member who has it
IncidentStatus
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
descriptionWhat happened
actorWho did it: a member's name, API token "…", or Spectate staff; null for Spectate itself
created_atWhen it happened
IncidentUpdate
idUpdate ID
statusThe 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. |
bodyThe update, in Markdown
created_atWhen it was posted
Invite
idInvite ID
emailThe invitee's email address
roleThe 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. |
expiredWhether it expired without being accepted. Expired invites don't count towards the member limit and can be sent again
expires_atWhen it expires, 7 days after it was sent
created_atWhen it was sent
Member
idMember (user) ID
nameName
emailEmail address
roleRole 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. |
joined_atWhen they joined the team
MemberReference
idMember (user) ID
nameName
emailEmail address
MetricCondition
idMetric condition ID
metricThe metric to watch
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. |
thresholdCompared 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)
duration_minutesMinutes the condition must hold before the alert fires; 0 fires on the first breach
severitySeverity of the alert it raises
critical Customers are affected right now. |
high Serious, needs attention soon. |
medium Should be looked at. |
low Informational. |
Hosts it applies to
Projects whose hosts it applies to
MetricPoint
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
idMonitor ID
labelName shown in the dashboard, alerts and status pages
protocolWhat 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. |
uriThe 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
urlThe target as the dashboard shows it, for example smtp://mail.example.com:587 for SMTP
intervalSeconds between checks
primary_locationRegion 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. |
timeoutSeconds before a check times out
max_redirectsHTTP: redirects followed before the check fails; null follows up to 10
HTTP: headers sent with every check
Protocol-specific settings
enabledWhether the monitor runs. false when paused by a member or by the system (see paused_reason)
allow_insecure_requestsHTTPS: whether invalid certificates are accepted for the check itself (the certificate check still reports them)
expected_http_status_codeHTTP: status codes that count as up, comma-separated, * as a wildcard digit (2**,301); null accepts 2xx and 3xx
certificate_check_enabledWhether the TLS certificate is checked for validity and expiry
certificate_expiry_threshold_daysDays before the certificate expires that the "expires soon" alert fires
uses_tlsWhether a check reports a certificate: HTTPS, and TCP or mail with TLS
certificate_expires_atWhen the certificate expires
certificate_valid_fromWhen the certificate became valid
certificate_issuerWho issued the certificate
certificate_errorWhy the certificate isn't valid, with certificate_status invalid or expired
certificate_checked_atWhen the certificate was last checked
performance_check_enabledWhether slow responses raise alerts (performance_hard_threshold, performance_deviation_percentage)
performance_hard_thresholdMilliseconds: a response slower than this raises an alert
performance_deviation_percentagePercent: 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
performance_deviation_timeframeMinutes of recent checks compared (15 to 120, in steps of 15)
performance_deviation_before_timeframeMinutes before those that they're compared with (60 to 1440, in whole hours)
regional_performance_enabledAlso 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_statusWhether 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. |
uptime_status_changed_atWhen uptime_status last changed
last_checked_atWhen the monitor was last checked
response_timeMilliseconds the latest check took
Uptime over rolling windows
project_idThe project the monitor belongs to; null for none
Escalation paths the monitor's alerts follow. Empty: the project's paths, else the team's default path
created_atWhen the monitor was created
updated_atWhen the monitor's settings last changed
MonitorAdvancedSettings
connection_timeoutSeconds to wait for the connection; null uses the monitor's timeout
auth_userHTTP: user name for basic and digest
has_auth_passwordHTTP: whether a password or bearer token is stored
keywordHTTP: text the response body must contain (or must not, with keyword_inverted). TCP: the same for the server's banner
keyword_invertedWhether the check fails when keyword is found, instead of when it's missing
useragentHTTP: the User-Agent header; null sends Spectate's
dns_resolverDNS: the resolver to query, as ip or ip:port; null uses the checker's resolver
dns_authoritativeDNS: whether to ask the zone's authoritative nameservers directly
dns_expected_valuesDNS: values the answer must contain or equal (see dns_match); null or empty accepts any answer
dns_alert_on_changeDNS: whether a changed answer raises an alert
MonitorAdvancedSettingsInput
connection_timeoutSeconds to wait for the connection, 1 to 60; null uses the monitor's timeout
auth_userHTTP: user name for basic and digest
auth_passwordHTTP: password, or the token for bearer. Write-only: never returned. Leave out or send an empty string to keep the stored one
keywordHTTP: text the response body must contain (or must not, with keyword_inverted). TCP: the same for the server's banner
keyword_invertedFail the check when keyword is found, instead of when it's missing
useragentHTTP: the User-Agent header; null sends Spectate's
dns_resolverDNS: the resolver to query, as a public ip or ip:port; null uses the checker's resolver
dns_authoritativeDNS: ask the zone's authoritative nameservers directly
dns_expected_valuesDNS: up to 20 values the answer must contain or equal (see dns_match)
dns_alert_on_changeDNS: raise an alert when the answer changes
MonitorAuthMethod
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
bannerTCP and mail: the first line of the server's greeting or banner
reply_codeSMTP: the greeting's reply code
starttlsMail: whether the session was upgraded with STARTTLS (or STLS)
tls_versionThe negotiated TLS version
cipher_suiteThe negotiated cipher suite
dns_answersDNS: the answer's values of the queried record type, sorted
dns_serverDNS: the server that answered, as ip:port
dns_rcodeDNS: the response code
MonitorHeader
keyHeader name
valueHeader value
MonitorHttpMethod
The HTTP method an HTTP monitor sends.
MonitorInterval
Seconds between checks. Plans set the shortest interval a team may use.
MonitorLocation
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
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
idMonitor ID
labelMonitor name
MonitorState
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
twenty_four_hoursLast 24 hours
seven_daysLast 7 days
thirty_daysLast 30 days
ninety_daysLast 90 days
NotificationCredits
balanceCredits that can be spent now: what's left of this month's allowance plus bought credits
allowanceWhat's left of this month's allowance
purchasedBought credits left
monthlyThe plan's monthly allowance; 0 during the trial
reset_atWhen the allowance was last reset; null before the first reset
OnCallOverride
idOverride ID
Who covers
starts_atFrom when
ends_atUntil when
noteWhy, for the team
created_atWhen it was added
OnCallRestrictions
daysISO weekdays the layer covers, 1 (Monday) to 7 (Sunday)
start_timeFrom when on those days, as HH:MM in the schedule's time zone; null with end_time null for the whole day
end_timeUntil when, as HH:MM; before start_time runs past midnight
OnCallRestrictionsInput
daysISO weekdays the layer covers, 1 (Monday) to 7 (Sunday), at least one
start_timeFrom when on those days, as HH:MM in the schedule's time zone; leave out with end_time for the whole day
end_timeUntil when, as HH:MM
OnCallRotation
idRotation ID
nameName
positionLayer order; 0 is the top layer and wins where layers overlap
shift_unitThe 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. |
shift_lengthShift length in shift_units
start_dateThe first handoff's date in the schedule's time zone
handoff_timeHandoff time as HH:MM in the schedule's time zone
The members taking turns, in order
created_atWhen the rotation was created
OnCallSchedule
idSchedule ID
nameName
descriptionWhat the schedule covers
timezoneIANA time zone the rotations' dates, handoffs and restrictions are in
next_handoff_atWhen the person on call changes next, within 4 weeks
Rotation layers, top first
Overrides that haven't ended
Escalation paths with a step that pages this schedule
created_atWhen the schedule was created
OnCallScheduleReference
idOn-call schedule ID
nameSchedule name
OnCallShift
starts_atWhen the shift starts
ends_atWhen it ends
sourceWhether a rotation or an override gives the shift
rotation A rotation layer's turn. |
override An override someone added. |
rotation_idThe rotation layer, for rotation shifts
override_idThe override, for override shifts
OnCallShiftSource
Where an on-call shift comes from.
rotation A rotation layer's turn. |
override An override someone added. |
OnCallShiftUnit
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
fromStart of the window
toEnd of the window
timezoneThe schedule's time zone
Each layer's shifts, top layer first
Override shifts
Who actually gets paged when: overrides first, then the highest layer. Gaps are absent
OnCallTimelineLayer
rotation_idRotation ID
nameRotation name
positionLayer order; 0 is the top layer
The layer's own shifts, before overrides and higher layers
Plan
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
idProject ID
nameProject name
is_defaultWhether this is the team's default project, which new monitors and hosts join when no project is given. It can't be deleted
Escalation paths that alerts of this project's monitors and hosts follow, unless a monitor or host sets its own
created_atWhen the project was created
ProjectReference
idProject ID
nameProject name
PublishStatusPageUpdate
status_page_idThe status page to publish on
statusThe 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. |
bodyThe message visitors read, in Markdown
impactThe 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. |
published_atWhen 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_subscribersEmail confirmed subscribers about the update (default true). false changes the page without emails
ResolveIncident
messageA closing update, in Markdown; leave out for none
ResourcePauseReason
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
contentThe whole postmortem, in Markdown; replaces the current one
publishedMark it as published (final), or as a draft again. Leave out to keep its state
SaveStatusPageIncidentWriteup
publishedtrue shows it on the public incident page; false keeps it as a draft, or takes a published write-up down
contentThe write-up, in Markdown, at most 50,000 characters. Required to publish
notify_subscribersEmail confirmed subscribers when this publishes the write-up for the first time (default false). Edits to a published write-up are never emailed
ScheduledMaintenance
idMaintenance ID
titleTitle shown on the page
descriptionWhat happens and what visitors notice, in Markdown; null for none
statusWhere it stands
scheduled Announced, not started yet. |
in_progress Going on: its components show as under maintenance. |
completed Over. |
automatictrue: 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_atPlanned start
scheduled_untilPlanned end; null for none
started_atWhen it actually went in progress; null before
completed_atWhen it completed; null before
Components it affects
created_atWhen it was created
ScheduledMaintenanceStatus
Where a scheduled maintenance stands.
scheduled Announced, not started yet. |
in_progress Going on: its components show as under maintenance. |
completed Over. |
Severity
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
idStatus page ID
nameName, shown as the page title
slugThe page's subdomain under spectate.page
visibilityWho 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. |
statusThe 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. |
public_urlWhere visitors open the page: the custom domain once it is verified, else the spectate.page address
access_urlOpens the page while it is private. Anyone with it gets in; rotateStatusPageAccessKey replaces it
custom_domainYour own domain for the page; null for none. Visitors use it once it is verified
password_protectedWhether visitors of a private page can also get in with the password
has_passwordWhether the page has a password. The password itself is never returned
languageLanguage of the public page and of subscriber emails
en English. |
nl Dutch. |
de German. |
fr French. |
es Spanish. |
it Italian. |
match_browser_languageVisitors get their browser's language when it is supported, and can switch languages in the footer
How the page looks and what it shows
collapsed_groupsComponent groups that start collapsed
automation_enabledMonitor 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_messagePosted when a linked monitor goes down; {component} and {status_page} are filled in. null for a default message
automation_recovered_messagePosted when the monitor recovers; null for a default message
issue_reports_enabledVisitors can report problems from the page
issue_reports_show_on_pageWhile reports are above the threshold, the page says that users are reporting issues
issue_reports_alerts_enabledReaching the threshold fires an alert
issue_reports_thresholdReports within issue_reports_window_minutes that count as above the threshold, 1 to 1000
issue_reports_window_minutesThe window for the threshold, in minutes, 1 to 1440
issue_reports_triggered_atSince when reports are above the threshold; null when they aren't
traffic_alerts_enabledAlert when views reach traffic_alert_multiplier times the usual views for the time of day
traffic_alert_multiplierHow many times the usual views alert, 2 to 100
traffic_alert_min_viewsFewer views than this in 15 minutes never alert, 10 to 1000000
Escalation paths the page's alerts (issue reports and traffic spikes) follow; empty for the team's default path
created_atWhen the page was created
StatusPageAffectedComponent
The component
impactFor 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. |
StatusPageAffectedComponentInput
component_idA component of the status page
impactHow 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. |
StatusPageAffectedComponentInputRequest
component_idA component of the status page
impactHow 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. |
StatusPageComponent
idComponent ID
nameName shown on the page
descriptionText shown with the name; null for none
groupGroup the component is shown in; null for the page's default group
positionOrder within the group, lowest first
statusThe 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. |
show_latency_chartWhether the page shows the monitor's response time chart under the component
created_atWhen the component was created
StatusPageComponentReference
idComponent ID
nameComponent name
StatusPageCustomDomainCheck
domainThe domain
verifiedWhether ownership is proven, now or earlier. A proven domain stays verified when a later check fails
verified_atWhen ownership was proven; null before
The records that can verify the domain; one passing record is enough
routedWhether 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
addressesAddresses the domain resolves to (A and AAAA records)
checked_atWhen DNS was checked
StatusPageCustomDomainVerification
verifiedWhether ownership is proven. A proven domain stays verified when a later check fails
verified_atWhen ownership was proven; null before
txt_record_nameName of the TXT record to create
txt_record_valueValue of the TXT record
cname_targetHost to point a CNAME at (subdomains), or an ALIAS (root domains); unique to the page
StatusPageDisplay
show_uptime_historyShow each component's uptime history
show_latency_chartsShow response time charts under components that have them on
show_incidentsShow incidents
show_maintenancesShow scheduled maintenance
show_subscriptionsLet visitors subscribe to updates by email (when the plan includes subscribers)
history_layoutHow the uptime history is laid out
calendar A calendar of days (default). |
timeline One row of bars per component. |
uptime_barsHow 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. |
StatusPageDisplayInput
show_uptime_historyShow each component's uptime history
show_latency_chartsShow response time charts under components that have them on
show_incidentsShow incidents
show_maintenancesShow scheduled maintenance
show_subscriptionsLet visitors subscribe to updates by email (when the plan includes subscribers)
history_layoutHow the uptime history is laid out
calendar A calendar of days (default). |
timeline One row of bars per component. |
uptime_barsHow 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. |
StatusPageDnsRecordCheck
typeRecord type: CNAME or TXT
nameRecord name
expectedThe value it needs
foundThe values DNS returned; empty when there is no such record
okWhether this record passes
StatusPageFont
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
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
idPeriod ID
The affected component
impactHow badly
degraded_performance Slower or less reliable than usual. |
partial_outage Down for some visitors or some functions. |
major_outage Down. |
started_atWhen it started
ended_atWhen it ended; null while it goes on
duration_secondsHow long it lasted so far, in seconds
StatusPageIncident
idStatus page incident ID
titleTitle shown on the page
statusWhere 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. |
impactThe 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. |
incident_idThe team's incident that publishes to it; null for none
automatedOpened by monitor automation and still managed by it, until someone posts an update or edits its timeline
Updates, newest first
Components it affects or affected
The impact timeline, oldest first
resolved_atWhen it was resolved; null while open
created_atWhen it was created
StatusPageIncidentUpdate
idUpdate ID
statusThe 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. |
bodyThe message, in Markdown
published_atWhen it happened; updates are ordered by it
created_atWhen it was written
StatusPageIncidentWriteup
contentThe write-up, in Markdown
publishedWhether visitors see it on the public incident page
published_atWhen it was first published; null while it's a draft. Editing a published write-up keeps this time
StatusPageIssueReport
idReport ID
messageWhat the visitor wrote; null for nothing
emailThe 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
has_emailWhether the visitor left an email address, also when it isn't returned
Components the visitor picked; deleted components are left out
created_atWhen it was reported
StatusPageLanguage
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
idSubscriber ID
emailEmail address
confirmed_atWhen they confirmed the subscription; null while it awaits confirmation
languageLanguage 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. |
created_atWhen they subscribed
StatusPageTheme
accentBrand colour, as hex; null for Spectate's yellow (#ffea00)
Colours overriding the preset in light mode
Colours overriding the preset in dark mode
What the page shows
logo_urlThe logo, uploaded in the dashboard; null for none (the page shows its name)
logo_dark_urlThe logo for dark mode; null shows logo_url in dark mode too
favicon_urlThe favicon, uploaded in the dashboard; null for Spectate's
StatusPageThemeColors
backgroundPage background
surfaceBackground of cards and panels
foregroundText
mutedSecondary text
borderLines and borders
successOperational
warningDegraded performance and maintenance
partialPartial outage
dangerMajor outage
infoInformation, such as scheduled maintenance
StatusPageThemeColorsInput
background^#(?:[0-9a-f]{3}|[0-…Page background
surface^#(?:[0-9a-f]{3}|[0-…Background of cards and panels
foreground^#(?:[0-9a-f]{3}|[0-…Text
muted^#(?:[0-9a-f]{3}|[0-…Secondary text
border^#(?:[0-9a-f]{3}|[0-…Lines and borders
success^#(?:[0-9a-f]{3}|[0-…Operational
warning^#(?:[0-9a-f]{3}|[0-…Degraded performance and maintenance
partial^#(?:[0-9a-f]{3}|[0-…Partial outage
danger^#(?:[0-9a-f]{3}|[0-…Major outage
info^#(?:[0-9a-f]{3}|[0-…Information, such as scheduled maintenance
StatusPageThemeInput
accent^#(?:[0-9a-f]{3}|[0-…Brand colour, as hex; null for Spectate's yellow
What the page shows
StatusPageThemeMode
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
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
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
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
planThe 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. |
intervalHow often it's billed
month Billed every month. |
year Billed every year, for the price of 10 months. |
quantityMonitors and hosts paid for: the team's limit of both together
statusWhere 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. |
cancelledWhether it's cancelled and runs until current_period_ends_at; it can be resumed in the dashboard until then
renews_atWhen it renews; null when it won't
current_period_ends_atEnd of the period paid for
payment_methodHow it's paid; null when unknown
SubscriptionStatus
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
idTeam ID
nameName
emailThe 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
timezoneThe team's time zone; escalation path working hours without a time zone of their own use it
planThe 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. |
on_trialWhether the team is on its trial, without a paid plan yet
trial_ends_atWhen the trial ends; null without one
monitoring_paused_atSince when all monitoring is paused; null while it runs
deletion_scheduled_atWhen the team and all its data will be deleted; null when it isn't scheduled. An owner can cancel it in the dashboard
created_atWhen the team was created
TeamDeletionReason
requested An owner deleted the team. |
unpaid Monitoring was paused for too long without a paid plan ( team_lifecycle.unpaid). |
TeamPauseReason
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
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
enableEnable the channel again when the test succeeds, also after Spectate turned it off. Default false
TlsMode
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
nameName shown on its alerts
enabledWhether requests fire alerts
default_severitySeverity of alerts sent without one
critical Customers are affected right now. |
high Serious, needs attention soon. |
medium Should be looked at. |
low Informational. |
auto_resolve_minutesMinutes, 5 to 10080, after which an alert the tool stopped repeating resolves; null keeps it until resolved
secretSigning secret; an empty string or null removes it. Write-only
Type-specific settings; settings you leave out keep their value
project_idProject whose escalation paths apply; null for none
escalation_path_idsEscalation paths for the source's alerts; replaces the current ones
UpdateChannel
nameName shown in escalation paths
enabledTurn delivery on or off. Turning it on clears an automatic disable and its failure count
New settings of an email channel
New settings of a slack channel
New settings of a discord channel
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
New settings of a voice channel
UpdateDomain
nameAnother domain to monitor instead; its registry data is looked up again
enabledPause (false) or resume (true) monitoring. Resuming goes through the plan's domain limit
expiry_threshold_daysDays before expiry, 1 to 365, that the "expires soon" alert fires
alert_on_registry_changesRaise an alert when the registrar, nameservers or DNSSEC keys change
project_idProject of the domain; null for none
escalation_path_idsEscalation paths for the domain's alerts; replaces the current ones
UpdateEscalationPath
nameName, up to 255 characters
descriptionWhat the path is for, up to 1000 characters
enabledWhether alerts follow the path
is_defaultMake 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
labelName shown in the dashboard and alerts
no_data_alert_minutesMinutes 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
project_idProject of the host; null for none
escalation_path_idsEscalation paths for the host's alerts; replaces the current ones. [] follows the project's paths, else the team's default path
UpdateIncident
titleWhat's going on
summaryMore about it, in Markdown
severityHow 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. |
statusWhere 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. |
UpdateMember
roleThe 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. |
UpdateMonitor
labelName shown in the dashboard, alerts and status pages
protocolWhat 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. |
uriThe 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
intervalSeconds between checks. Plans set the shortest allowed interval
primary_locationRegion the checks run from
eu Europe. |
us North America. |
as Asia. |
oc Oceania. |
timeoutSeconds before a check times out, 1 to 60
max_redirectsHTTP: redirects to follow, 0 to 10; null follows up to 10
HTTP: up to 25 headers to send; replaces the current headers
Protocol-specific settings; settings you leave out keep their value
allow_insecure_requestsHTTPS: accept invalid certificates for the check itself
expected_http_status_codeHTTP: status codes that count as up; null accepts 2xx and 3xx
certificate_check_enabledCheck the TLS certificate for validity and expiry
certificate_expiry_threshold_daysDays before the certificate expires that the "expires soon" alert fires, 1 to 90
performance_check_enabledRaise alerts for slow responses
performance_hard_thresholdMilliseconds, 1 to 30000: a response slower than this raises an alert
performance_deviation_percentagePercent, 1 to 500: alert when recent response times are this much above the earlier ones
performance_deviation_timeframeMinutes of recent checks to compare: 15 to 120 in steps of 15
performance_deviation_before_timeframeMinutes before those to compare with: 60 to 1440 in whole hours
regional_performance_enabledAlso 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_idProject of the monitor; null for none
escalation_path_idsEscalation paths for the monitor's alerts; replaces the current ones. [] follows the project's paths, else the team's default path
UpdateOnCallRotation
nameName
positionMove the layer to this position, 0 for the top; the others shift
shift_unitThe 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. |
shift_lengthShift length in shift_units
start_date^\d{4}-\d{2}-\d{2}$The first handoff's date
handoff_timeHandoff time as HH:MM
participant_idsMembers taking turns, in order; replaces the current ones
UpdateOnCallSchedule
nameName
descriptionWhat the schedule covers
timezoneIANA time zone. Rotations keep their dates and wall-clock handoff times in the new zone
UpdateProject
nameProject name
escalation_path_idsEscalation paths for alerts of the project's monitors and hosts; replaces the current list. Send [] for none
UpdateScheduledMaintenance
titleTitle shown on the page, up to 255 characters
descriptionWhat happens and what visitors notice, in Markdown; null for none
statusMove 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. |
automatictrue: starts and completes on schedule. false: only changes when you set status
scheduled_atPlanned start
scheduled_untilPlanned end; null for none
completed_atWhen it completed. Setting it completes the maintenance
Components it affects; replaces the current list. Components of the status page only
notify_subscribersEmail confirmed subscribers when this starts or completes the maintenance (default true)
UpdateStatusPage
nameName, shown as the page title
slug^[a-z0-9](?:[a-z0-9-…The page's subdomain under spectate.page: lowercase letters, digits and dashes. The old address stops working
visibilityWho 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. |
custom_domainYour 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
password_protectedLet 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
passwordThe password, 8 to 255 characters. Write-only; leave out or send null to keep the current one
languageLanguage of the public page and of subscriber emails
en English. |
nl Dutch. |
de German. |
fr French. |
es Spanish. |
it Italian. |
match_browser_languageGive visitors their browser's language when it is supported
How the page looks and what it shows
collapsed_groupsComponent groups that start collapsed; replaces the current list
automation_enabledMonitor 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_messagePosted when a linked monitor goes down, up to 5000 characters; {component} and {status_page} are filled in. null for a default message
automation_recovered_messagePosted when the monitor recovers, up to 5000 characters; null for a default message
issue_reports_enabledLet visitors report problems from the page
issue_reports_show_on_pageWhile reports are above the threshold, say on the page that users are reporting issues
issue_reports_alerts_enabledFire an alert when reports reach the threshold
issue_reports_thresholdReports within issue_reports_window_minutes that count as above the threshold, 1 to 1000
issue_reports_window_minutesThe window for the threshold, in minutes, 1 to 1440
traffic_alerts_enabledAlert when views reach traffic_alert_multiplier times the usual views for the time of day
traffic_alert_multiplierHow many times the usual views alert, 2 to 100
traffic_alert_min_viewsFewer views than this in 15 minutes never alert, 10 to 1000000
escalation_path_idsEscalation paths for the page's alerts (issue reports and traffic spikes); replaces the current ones. Empty for the team's default path
UpdateStatusPageComponent
nameName shown on the page
descriptionText shown with the name; null for none
groupGroup to show the component in; null for the page's default group
positionOrder within the group, lowest first, from 0. New components go last when left out
monitor_idA 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_chartShow the monitor's response time chart under the component
UpdateStatusPageImpactPeriod
component_idA component of the status page
impactHow badly
degraded_performance Slower or less reliable than usual. |
partial_outage Down for some visitors or some functions. |
major_outage Down. |
started_atWhen it started, now or in the past
ended_atWhen it ended, after started_at and not in the future; null reopens the period
UpdateStatusPageIncident
titleTitle shown on the page
statusWhere 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. |
impactThe 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. |
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_subscribersEmail confirmed subscribers when this resolves the incident (default true). false changes the page without emails
UpdateStatusPageIncidentUpdate
statusThe 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. |
bodyThe message, in Markdown
published_atWhen it happened, now or in the past. Impact periods that started or ended at the old time move with it
UpdateTeam
nameName, up to 255 characters
emailThe 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
timezoneThe team's time zone, as an IANA name; escalation path working hours without a time zone of their own use it
UptimeStatus
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
Monitors and hosts together; on paid plans the limit is the quantity paid for
Monitored domains
Projects
Status pages
Confirmed subscribers of all status pages together; at the limit the pages take no new subscribers
Escalation paths, including the team default path
Members plus pending invites
UsageLimit
usedIn use now
limitThe 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
WorkingHours
timezoneIANA time zone the hours are in
daysISO weekdays, 1 (Monday) to 7 (Sunday)
start_timeWhen working hours begin, as HH:MM
end_timeWhen they end, as HH:MM; before start_time runs past midnight
descriptionThe hours in words
WorkingHoursInput
timezoneIANA time zone the hours are in
daysISO weekdays, 1 (Monday) to 7 (Sunday), at least one
start_timeWhen working hours begin, as HH:MM
end_timeWhen they end, as HH:MM; before start_time runs past midnight