Uptimia API v2 (2.0.0)
Download OpenAPI specification:Download
The Uptimia REST API lets you do everything you can do in the web app — manage monitors, contacts, status pages, maintenance windows, reports and teams, and read incidents, logs and uptime statistics — over HTTPS, returning JSON.
This is API v2, the current version. The v1 API remains available but is legacy; new integrations should use v2.
Uptimia is a website uptime and performance monitoring tool. With the API you
can access the features you normally use in your browser via simple HTTPS calls.
The API supports the standard GET, POST, PATCH and DELETE methods.
Send all requests to https://www.uptimia.com/api/v2/.
Every call needs an API key — see Authentication below — then browse the available endpoints in the reference that follows.
The Uptimia API uses Bearer authentication. Include your API key in an
Authorization header on every request:
Authorization: Bearer YOUR_API_KEY
- Log in to your Uptimia account and open Settings → API Keys.
- Click Create API key and give it a name (for your own reference).
- Copy the key that is shown — for security you won't be able to see it again.
- Use the key in the
Authorizationheader of your requests.
Keep your API key secret. Don't share it or commit it to source control. If you think a key may be compromised, delete it and create a new one.
Pass the key as a Bearer token. For example, with cURL:
curl "https://www.uptimia.com/api/v2/uptime" \
-H "Authorization: Bearer YOUR_API_KEY"
Requests with a missing or invalid key return 401 Unauthorized:
{
"error_code": "invalid_api_key",
"message": "API key invalid"
}
List all uptime monitors
Returns a paginated list of all uptime monitors for the authenticated account. Supports filtering by monitor status.
Authorizations:
query Parameters
| limit | integer Example: limit=25 Maximum number of monitors to return (0 = no limit) |
| offset | integer Example: offset=0 Number of monitors to skip |
| show_is_up | boolean Default: true Include monitors that are up |
| show_is_critical | boolean Default: true Include monitors with critical incidents |
| show_is_trouble | boolean Default: true Include monitors with trouble incidents |
| show_is_suspended | boolean Default: true Include suspended monitors |
| show_is_paused | boolean Default: true Include paused monitors |
| show_is_maintenance | boolean Default: true Include monitors in maintenance |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- {
- "id": 0,
- "name": "string"
}
]
}
], - "metadata": {
- "total": 0
}
}Create a new uptime monitor
Creates a new uptime monitor with the specified configuration. The domain field is required.
Authorizations:
Request Body schema: application/json
| domain required | string URL or hostname to monitor |
| unique_id | string Custom unique identifier used in public status page URLs. |
| project_name | string Monitor display name |
| monit_type | integer Monitor type: 1=HTTP, 2=HTTPS, 3=TCP, 4=PING, 5=DNS, 6=UDP, 7=SMTP, 8=POP3, 9=IMAP |
| port | string Port number (auto-detected if empty) |
| username | string HTTP Basic Auth username |
| password | string HTTP Basic Auth password |
| string_send | string String to send for TCP/UDP protocol checks |
| string_expect | string Expected string in TCP/UDP response |
| encrypted | integer Use SSL/TLS for TCP connections (0=no, 1=yes) |
| monitoring_interval_slider | integer [ 0 .. 65 ] How often to check, in MINUTES (0-60; 0 = every 30 seconds). Values 61-65 are period codes for longer cadences: 61=2h, 62=3h, 63=6h, 64=12h, 65=24h. A value below your plan's fastest cadence is raised to that floor. |
| report_down_slider | integer [ 0 .. 60 ] How long an outage must persist before it is reported, in MINUTES (0-60). 0 reports as soon as the outage is confirmed. |
| probes | string Monitoring locations: "all" for all locations, or comma-separated probe IDs |
| contacts required | Array of integers Contact IDs to notify on incidents |
| groups | Array of integers Group IDs to assign the monitor to |
object Error types to report on | |
Array of objects Keywords to check for in response body | |
Array of objects Custom HTTP headers to send | |
| payload | string Raw POST/PUT request body |
| request_type | string Enum: "GET" "POST" "PUT" "DELETE" "HEAD" "POSTRAW" HTTP method for the check |
| follow_redirects | integer Follow HTTP redirects (0=no, 1=yes) |
| max_timeout | integer Maximum timeout in seconds |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID for notifications |
Responses
Request samples
- Payload
{- "unique_id": "string",
- "project_name": "My Website",
- "monit_type": 2,
- "port": "443",
- "username": "string",
- "password": "string",
- "string_send": "string",
- "string_expect": "string",
- "encrypted": 0,
- "monitoring_interval_slider": 5,
- "report_down_slider": 1,
- "probes": "all",
- "contacts": [
- 0
], - "groups": [
- 0
], - "error_types": {
- "connection": 1,
- "timeout": 1,
- "unknown": 1,
- "redirect": 1,
- "keyword": 1,
- "http": {
- "response1xx": 0,
- "response2xx": 0,
- "response3xx": 0,
- "response4xx": 1,
- "response5xx": 1
}
}, - "keywords": [
- {
- "keyword": "string",
- "state": "must_exist"
}
], - "custom_headers": [
- {
- "name": "string",
- "value": "string"
}
], - "payload": "string",
- "request_type": "GET",
- "follow_redirects": 1,
- "max_timeout": 30,
- "report_up": 0,
- "branding_id": 0
}Response samples
- 201
- 400
- 401
{- "data": {
- "id": 0
}
}Get a single uptime monitor
Returns full details of a specific uptime monitor including configuration, status, and assigned contacts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "unique_id": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- { }
], - "monit_type": 0,
- "monitor_type": "HTTP",
- "interval": 0,
- "report_down": 0,
- "report_up": true,
- "url": "string",
- "port": 0,
- "username": "string",
- "password": "string",
- "has_password": true,
- "incident_id": 0,
- "string_send": "string",
- "string_expect": "string",
- "is_encrypted": true,
- "follow_redirects": true,
- "max_timeout": 0,
- "report_error_types": { },
- "keywords": [
- {
- "keyword": "string",
- "state": "must_exist"
}
], - "locations": [
- 0
], - "request_type": "GET",
- "custom_headers": [
- {
- "name": "string",
- "value": "string"
}
], - "post_values": "string",
- "branding_id": 0,
- "payload": "string",
- "contacts": [
- {
- "id": 0,
- "is_team": true,
- "is_user": true,
- "is_operator": true,
- "is_individual_contact": true
}
]
}
}Delete an uptime monitor
Permanently deletes an uptime monitor and its associated reporting configuration. Incident and log data may be retained.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}Update an existing uptime monitor
Updates an existing uptime monitor. Only include fields you want to change. Omitted fields retain their current values.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Request Body schema: application/json
| is_paused | boolean Pause (true) or resume (false) the monitor. When present, only the pause/resume action is performed and other fields are ignored. |
| unique_id | string Custom unique identifier used in public status page URLs. |
| domain | string URL or hostname to monitor |
| project_name | string Monitor display name |
| monit_type | integer Monitor type: 1=HTTP, 2=HTTPS, 3=TCP, 4=PING, 5=DNS, 6=UDP, 7=SMTP, 8=POP3, 9=IMAP |
| port | string Port number |
| username | string HTTP Basic Auth username |
| password | string New HTTP Basic Auth password. Omitting it — or sending an empty string, which is what a GET response round-trips — keeps the stored secret. To remove the password, send clear_password: true. |
| clear_password | boolean Set true to remove the stored HTTP Basic Auth password. Ignored when a non-empty password is sent in the same request (that rotates instead). |
| string_send | string String to send for TCP/UDP checks |
| string_expect | string Expected string in response |
| encrypted | integer Use SSL/TLS for TCP connections (0=no, 1=yes) |
| monitoring_interval_slider | integer [ 0 .. 65 ] How often to check, in MINUTES (0-60; 0 = every 30 seconds). Values 61-65 are period codes: 61=2h, 62=3h, 63=6h, 64=12h, 65=24h. |
| report_down_slider | integer [ 0 .. 60 ] How long an outage must persist before it is reported, in MINUTES (0-60). 0 reports as soon as the outage is confirmed. |
| probes | string Monitoring locations: "all" or comma-separated probe IDs |
| contacts | Array of integers Contact IDs to notify |
| groups | Array of integers Group IDs |
| error_types | object Error types to report on |
Array of objects Keywords to check in the response body. Replaces the whole list; [] clears it. | |
| custom_headers | Array of objects Custom HTTP headers |
| payload | string Raw POST/PUT request body |
| request_type | string Enum: "GET" "POST" "PUT" "DELETE" "HEAD" "POSTRAW" HTTP method |
| follow_redirects | integer Follow HTTP redirects (0=no, 1=yes) |
| max_timeout | integer Maximum timeout in seconds |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID |
Responses
Request samples
- Payload
{- "is_paused": true,
- "unique_id": "string",
- "domain": "string",
- "project_name": "string",
- "monit_type": 0,
- "port": "string",
- "username": "string",
- "password": "string",
- "clear_password": true,
- "string_send": "string",
- "string_expect": "string",
- "encrypted": 0,
- "monitoring_interval_slider": 65,
- "report_down_slider": 60,
- "probes": "string",
- "contacts": [
- 0
], - "groups": [
- 0
], - "error_types": { },
- "keywords": [
- {
- "keyword": "string",
- "state": "must_exist"
}
], - "custom_headers": [
- { }
], - "payload": "string",
- "request_type": "GET",
- "follow_redirects": 0,
- "max_timeout": 0,
- "report_up": 0,
- "branding_id": 0
}Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "id": 0
}
}List incidents for an uptime monitor
Returns a list of incidents for the specified monitor within the given date range. Defaults to the last 30 days. date_start is raised to the account plan's history retention floor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of incidents to return |
| offset | integer Number of incidents to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "error_id": 0,
- "error_display": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Get a single incident
Returns details of a specific incident for the given uptime monitor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "monitor_id": 0,
- "type": "HTTP",
- "type_code": "uptime",
- "url": "string",
- "port": 0,
- "string_send": "string",
- "string_expect": "string",
- "time_started": "string",
- "time_started_unix": 0,
- "time_ended": "string",
- "time_ended_unix": 0,
- "error": "string",
- "duration": "string",
- "errors": [
- {
- "error": "string",
- "count": 0
}
], - "servers": [
- {
- "name": "string",
- "flag": "string",
- "ip": "string",
- "date": "string",
- "error": "string"
}
], - "response_headers": "string",
- "response_body": "string",
- "traceroute": "string",
- "screenshot": "string",
- "keywords": [
- { }
], - "is_critical": true,
- "is_trouble": true
}
}Delete an incident
Permanently deletes a specific incident and its associated status page threads. The incident must belong to the monitor in the path; otherwise 404 incident_not_found.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}List monitoring logs across all monitors
Returns a paginated list of monitoring check logs across all uptime monitors for the authenticated account. Supports date range filtering and pagination. date_start is raised to the account plan's history retention floor, and an omitted date_start starts at that floor.
Authorizations:
query Parameters
| limit | integer Example: limit=50 Maximum number of log entries to return (default 50) |
| offset | integer Example: offset=0 Number of log entries to skip |
| date_start | integer Start date as Unix timestamp |
| date_end | integer End date as Unix timestamp |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "monitor_id": 0,
- "monitor_name": "string",
- "flag": "string",
- "location": "string",
- "time": "2019-08-24T14:15:22Z",
- "status": "up",
- "speed": 0,
- "dns": 0,
- "connect": 0,
- "send": 0,
- "wait": 0,
- "receive": 0,
- "is_backup": true
}
], - "metadata": {
- "total": 0
}
}List monitoring logs
Returns monitoring check logs for the specified monitor, newest first. Defaults to the last 14 days and a page size of 20; use limit/offset to page through the whole window. date_start is raised to the account plan's history retention floor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| limit | integer Example: limit=20 Page size (default 20) |
| offset | integer Number of log entries to skip |
| date_start | integer Start date as Unix timestamp to filter the log range (defaults to 14 days ago, raised to the plan retention floor) |
| date_end | integer End date as Unix timestamp to filter the log range |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "id": 0,
- "flag": "string",
- "location": "string",
- "time_elapsed": "string",
- "speed": "string",
- "status_icon": "string",
- "status_alt": "string"
}
], - "metadata": {
- "total": 0
}
}Get timeline segments for an uptime monitor
Returns timeline segments showing uptime, downtime, maintenance, and unknown periods for the given date range. date_start is raised to the account plan's history retention floor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 7 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Get availability percentages
Calculates uptime and downtime percentages for the specified monitor within the given date range. Defaults to the last 24 hours. date_start is raised to the account plan's history retention floor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "uptime": 99.95,
- "downtime": 0.05
}
}Get response time history
Returns response time chart data for the specified monitor. Includes timing breakdown (DNS, connect, send, wait, receive) for HTTP/HTTPS monitors. Data is cached for 60 seconds. date_start is raised to the account plan's history retention floor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "response_time": [
- 0
], - "dns": [
- 0
], - "connect": [
- 0
], - "send": [
- 0
], - "wait": [
- 0
], - "receive": [
- 0
], - "downtime": [
- 0
], - "date": [
- "string"
], - "max_value": 0
}
}List all SSL monitors
Returns a paginated list of all SSL monitors for the authenticated account. Supports filtering by monitor status.
Authorizations:
query Parameters
| limit | integer Example: limit=25 Maximum number of monitors to return (0 = no limit) |
| offset | integer Example: offset=0 Number of monitors to skip |
| show_is_up | boolean Default: true Include monitors that are up |
| show_is_critical | boolean Default: true Include monitors with critical incidents |
| show_is_trouble | boolean Default: true Include monitors with trouble incidents |
| show_is_suspended | boolean Default: true Include suspended monitors |
| show_is_paused | boolean Default: true Include paused monitors |
| show_is_maintenance | boolean Default: true Include monitors in maintenance |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- {
- "id": 0,
- "name": "string"
}
]
}
], - "metadata": {
- "total": 0
}
}Create a new SSL monitor
Creates a new SSL certificate monitor for the specified URL.
Authorizations:
Request Body schema: application/json
| url required | string URL to monitor SSL certificate for |
| region | integer Monitoring region ID (defaults to 1). |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Check frequency in minutes (0-60; 0 = every 30 seconds) or a period code 61-65 (2h, 3h, 6h, 12h, 24h). -1 selects the 10-second cadence where enabled. |
| report_down_slider | integer Minutes to wait before reporting an outage (0-60; 0 = report as soon as the outage is confirmed) |
| change_error_level_time | integer Seconds before changing error level. Preferred field — sent in seconds by the editor. |
| change_error_level_time_slider | integer Legacy slider value for the change error level time (1-10). Only used by the bulk path when change_error_level_time is omitted. |
| expire_alert_days | integer Days before certificate expiry to alert |
| probes | string Monitoring locations: "all" for all locations, or comma-separated probe IDs |
| contacts | Array of integers Contact IDs to notify on incidents |
| groups | Array of integers Group IDs to assign the monitor to |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID for notifications |
Responses
Request samples
- Payload
{- "region": 1,
- "project_name": "My Website SSL",
- "monitoring_interval_slider": 5,
- "report_down_slider": 1,
- "change_error_level_time": 3600,
- "change_error_level_time_slider": 5,
- "expire_alert_days": 7,
- "probes": "all",
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 0,
- "branding_id": 0
}Response samples
- 201
- 400
- 401
{- "data": {
- "id": 0
}
}Get a single SSL monitor
Returns full details of a specific SSL monitor including configuration, status, certificate info, and assigned contacts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- { }
], - "interval": 0,
- "report_down": 0,
- "report_up": true,
- "url": "string",
- "incident_id": 0,
- "locations": [
- 0
], - "expire_alert_days": 0,
- "change_error_level_time": 0,
- "branding_id": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": true,
- "is_user": true,
- "is_operator": true,
- "is_individual_contact": true
}
], - "issuer": "string",
- "protocol": "string",
- "domain_name": "string",
- "valid_from": 0,
- "valid_to": 0,
- "days_remaining": 0,
- "error_code": "string",
- "status": 0
}
}Delete an SSL monitor
Permanently deletes an SSL monitor and its associated reporting configuration. Incident and log data may be retained.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}Update an existing SSL monitor
Updates an existing SSL monitor. Only include fields you want to change. Omitted fields retain their current values.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Request Body schema: application/json
| is_paused | boolean Pause (true) or resume (false) the monitor. When present, only the pause/resume action is performed and other fields are ignored. |
| url | string URL to monitor SSL certificate for |
| region | integer Monitoring region ID (defaults to 1). |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Check frequency in minutes (0-60; 0 = every 30 seconds) or a period code 61-65 (2h, 3h, 6h, 12h, 24h) |
| report_down_slider | integer Minutes to wait before reporting an outage (0-60) |
| change_error_level_time | integer Seconds before changing error level. Preferred field — sent in seconds by the editor. |
| change_error_level_time_slider | integer Legacy slider value for the change error level time (1-10). Only used by the bulk path when change_error_level_time is omitted. |
| expire_alert_days | integer Days before certificate expiry to alert |
| probes | string Monitoring locations: "all" or comma-separated probe IDs |
| contacts | Array of integers Contact IDs to notify |
| groups | Array of integers Group IDs |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID |
Responses
Request samples
- Payload
{- "is_paused": true,
- "url": "string",
- "region": 1,
- "project_name": "string",
- "monitoring_interval_slider": 0,
- "report_down_slider": 0,
- "change_error_level_time": 3600,
- "change_error_level_time_slider": 0,
- "expire_alert_days": 0,
- "probes": "string",
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 0,
- "branding_id": 0
}Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "id": 0
}
}List incidents for an SSL monitor
Returns a list of incidents for the specified SSL monitor within the given date range. Defaults to the last 30 days.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of incidents to return |
| offset | integer Number of incidents to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "error_id": 0,
- "error_display": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Get a single SSL incident
Returns full details of a specific incident for the given SSL monitor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
{- "data": {
- "id": 0,
- "name": "string",
- "monitor_id": 0,
- "type": "SSL",
- "type_code": "ssl",
- "url": "string",
- "port": 443,
- "time_started": "string",
- "time_started_unix": 0,
- "time_ended": "string",
- "time_ended_unix": 0,
- "error": "string",
- "duration": "string",
- "errors": [
- {
- "error": "string",
- "count": 0
}
], - "servers": [
- {
- "name": "string",
- "flag": "string",
- "ip": "string",
- "date": "string",
- "error": "string"
}
], - "response_headers": "string",
- "response_body": "string",
- "traceroute": "string",
- "screenshot": "string",
- "is_critical": true,
- "is_trouble": true
}
}Delete an SSL incident
Permanently deletes a specific SSL incident and its associated status page threads. The incident must belong to the monitor in the path; otherwise 404 incident_not_found.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}List SSL monitoring logs
Returns recent monitoring check logs for the specified SSL monitor. Shows the last 90 days of data, limited to 20 entries.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| limit | integer Maximum number of log entries to return |
| offset | integer Number of log entries to skip |
| date_start | integer Start date as Unix timestamp to filter the log range |
| date_end | integer End date as Unix timestamp to filter the log range |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "id": 0,
- "flag": "string",
- "location": "string",
- "time_elapsed": "string",
- "speed": "string",
- "status_icon": "string",
- "status_alt": "string"
}
], - "metadata": {
- "total": 0
}
}Get timeline segments for an SSL monitor
Returns up, down, maintenance and unknown timeline segments for the SSL monitor over the requested date range, suitable for rendering an availability timeline strip.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 7 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Get SSL response time history
Returns response time and downtime chart data for the specified SSL monitor. Data is cached for 60 seconds.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "speed": [
- 0
], - "downtime": [
- 0
], - "date": [
- "string"
], - "max_value": 0
}
}List all domain monitors
Returns a paginated list of all domain monitors for the authenticated account. Supports filtering by monitor status.
Authorizations:
query Parameters
| limit | integer Example: limit=25 Maximum number of monitors to return (0 = no limit) |
| offset | integer Example: offset=0 Number of monitors to skip |
| show_is_up | boolean Default: true Include monitors that are up |
| show_is_critical | boolean Default: true Include monitors with critical incidents |
| show_is_trouble | boolean Default: true Include monitors with trouble incidents |
| show_is_suspended | boolean Default: true Include suspended monitors |
| show_is_paused | boolean Default: true Include paused monitors |
| show_is_maintenance | boolean Default: true Include monitors in maintenance |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- {
- "id": 0,
- "name": "string"
}
]
}
], - "metadata": {
- "total": 0
}
}Create a new domain monitor
Creates a new domain expiration monitor. Validates domain zone against supported TLD whitelist.
Authorizations:
Request Body schema: application/json
| url required | string Domain name to monitor (e.g. example.com) |
| project_name required | string Monitor display name |
| monitoring_interval_slider | integer WHOIS check frequency, 71-79 (71 = every day … 79 = every 9 days) |
| monitoring_interval | integer WHOIS check frequency in seconds, 86400-2592000 (1 to 30 days). Alternative to monitoring_interval_slider |
| report_down_slider | integer Minutes to wait before reporting a failed check, 0-60 (0 = report as soon as the check fails) |
| expire_alert_days | integer Days before domain expiry to alert (1-90, default 7) |
| expiry_date | string Manual expiry date in YYYY-MM-DD format (only for manual zones) |
| contacts | Array of integers Contact IDs to notify on incidents |
| groups | Array of integers Group IDs to assign the monitor to |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID for notifications |
| confirmations_required | integer How many backup checks must agree before an outage is confirmed (1-3, default 3) |
| escalation_policy_id | integer Escalation policy to alert through (0 = alert every recipient at once) |
| notes | string Free-text operator note (plain text, up to 500 characters) |
| bulk_data | string Bulk import: newline-separated list of domains |
Responses
Request samples
- Payload
{- "url": "example.com",
- "project_name": "My Domain",
- "monitoring_interval_slider": 77,
- "monitoring_interval": 604800,
- "report_down_slider": 0,
- "expire_alert_days": 7,
- "expiry_date": "2027-01-15",
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 0,
- "branding_id": 0,
- "confirmations_required": 3,
- "escalation_policy_id": 0,
- "notes": "",
- "bulk_data": ""
}Response samples
- 201
- 400
- 401
{- "data": {
- "id": 0
}
}Look up a domain zone
Resolves a domain name (or a bare TLD) to its zone and reports whether the zone is monitored and whether its expiry date has to be supplied by hand. A manual zone has no queryable WHOIS server, so a monitor in it must be created with an expiry_date. The monitor editor calls this while the user types, to decide whether to show the expiry-date field.
Authorizations:
query Parameters
| url | string Example: url=example.de Domain name or URL to resolve (e.g. "example.de" or "https://example.de/path") |
| tld | string Example: tld=example.de Alias for url — accepted so a caller that already has the bare TLD can pass it directly |
Responses
Response samples
- 200
- 400
- 401
{- "data": {
- "zone": ".de",
- "accepted": true,
- "is_manual": true
}
}Get a single domain monitor
Returns full details of a specific domain monitor including WHOIS data, expiration info, registrar, and nameservers.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- { }
], - "interval": 0,
- "report_down": 0,
- "report_up": true,
- "url": "string",
- "incident_id": 0,
- "expire_alert_days": 0,
- "branding_id": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": true,
- "is_user": true,
- "is_operator": true,
- "is_individual_contact": true
}
], - "is_manual": true,
- "tld": "string",
- "zone": "string",
- "domain_creation_date": 0,
- "domain_updated_date": 0,
- "domain_expiry_date": 0,
- "days_remaining": 0,
- "registrar": "string",
- "nameservers": "string",
- "confirmations_required": 0,
- "last_check": 0,
- "escalation_policy_id": 0,
- "notes": "string"
}
}Delete a domain monitor
Permanently deletes a domain monitor and its associated reporting configuration. Incident and log data may be retained.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}Update an existing domain monitor
Updates an existing domain monitor. Only include fields you want to change. Omitted fields retain their current values.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Request Body schema: application/json
| is_paused | boolean Pause (true) or resume (false) the monitor. When present, only the pause/resume action is performed and other fields are ignored. |
| url | string Domain name to monitor |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer WHOIS check frequency, 71-79 (71 = every day … 79 = every 9 days) |
| monitoring_interval | integer WHOIS check frequency in seconds, 86400-2592000 (1 to 30 days). Alternative to monitoring_interval_slider |
| report_down_slider | integer Minutes to wait before reporting a failed check, 0-60 |
| expire_alert_days | integer Days before domain expiry to alert (1-90) |
| expiry_date | string Manual expiry date in YYYY-MM-DD format (only for manual zones) |
| contacts | Array of integers Contact IDs to notify |
| groups | Array of integers Group IDs |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID |
| confirmations_required | integer How many backup checks must agree before an outage is confirmed (1-3) |
| escalation_policy_id | integer Escalation policy to alert through (0 = alert every recipient at once) |
| notes | string Free-text operator note (plain text, up to 500 characters) |
Responses
Request samples
- Payload
{- "is_paused": true,
- "url": "string",
- "project_name": "string",
- "monitoring_interval_slider": 0,
- "monitoring_interval": 0,
- "report_down_slider": 0,
- "expire_alert_days": 0,
- "expiry_date": "2027-01-15",
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 0,
- "branding_id": 0,
- "confirmations_required": 0,
- "escalation_policy_id": 0,
- "notes": "string"
}Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "id": 0
}
}List incidents for a domain monitor
Returns a list of domain expiration incidents within the given date range. Defaults to the last 30 days. Domain-specific error codes: domain_expires_soon, domain_expires_very_soon, domain_expired.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of incidents to return |
| offset | integer Number of incidents to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "error_id": 0,
- "error_display": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Get a single domain incident
Returns details of a specific domain expiration incident.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "monitor_id": 0,
- "type": "Domain",
- "type_code": "domain",
- "url": "string",
- "port": 0,
- "time_started": "string",
- "time_started_unix": 0,
- "time_ended": "string",
- "time_ended_unix": 0,
- "error": "string",
- "duration": "string",
- "errors": [
- {
- "error": "string",
- "count": 0
}
], - "servers": [
- {
- "name": "string",
- "flag": "string",
- "ip": "string",
- "date": "string",
- "error": "string"
}
], - "response_headers": "string",
- "response_body": "string",
- "traceroute": "string",
- "screenshot": "string",
- "is_critical": true,
- "is_trouble": true
}
}Delete a domain incident
Permanently deletes a specific domain expiration incident and its associated status page threads. The incident must belong to the monitor in the path; otherwise 404 incident_not_found.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}List domain WHOIS check logs
Returns recent WHOIS monitoring check logs for the specified domain monitor. Shows the last 90 days of data, limited to 20 entries.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| limit | integer Maximum number of log entries to return |
| offset | integer Number of log entries to skip |
| date_start | integer Start date as Unix timestamp to filter the log range |
| date_end | integer End date as Unix timestamp to filter the log range |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "id": 0,
- "flag": "string",
- "location": "string",
- "time_elapsed": "string",
- "speed": "string",
- "response_time": "string",
- "status_icon": "string",
- "status_alt": "string"
}
], - "metadata": {
- "total": 0
}
}Get timeline segments for a domain monitor
Returns up, down, maintenance and unknown timeline segments for the domain monitor over the requested date range, suitable for rendering an availability timeline strip.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 7 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Get domain WHOIS response time history
Returns WHOIS response time and downtime chart data for the specified domain monitor. Data is cached for 60 seconds.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "speed": [
- 0
], - "downtime": [
- 0
], - "date": [
- "string"
], - "max_value": 0
}
}List all speed monitors
Returns a paginated list of all speed monitors for the authenticated account. Supports filtering by monitor status.
Authorizations:
query Parameters
| limit | integer Example: limit=25 Maximum number of monitors to return (0 = no limit) |
| offset | integer Example: offset=0 Number of monitors to skip |
| show_is_up | boolean Default: true Include monitors that are up |
| show_is_critical | boolean Default: true Include monitors with critical incidents |
| show_is_trouble | boolean Default: true Include monitors with trouble incidents |
| show_is_suspended | boolean Default: true Include suspended monitors |
| show_is_paused | boolean Default: true Include paused monitors |
| show_is_maintenance | boolean Default: true Include monitors in maintenance |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- {
- "id": 0,
- "name": "string"
}
]
}
], - "metadata": {
- "total": 0
}
}Create a new speed monitor
Creates a new speed/page load monitor for the specified URL.
Authorizations:
Request Body schema: application/json
| url required | string URL to monitor page speed for |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Monitoring interval slider value (1-10, determines check frequency) |
| report_down_slider | integer Report down delay slider value (1-5) |
| probes | string Monitoring locations: "all" for all locations, or comma-separated probe IDs |
| contacts | Array of integers Contact IDs to notify on incidents |
| groups | Array of integers Group IDs to assign the monitor to |
| is_alert_speed_drops | integer Enable speed drop alerts (0=no, 1=yes) |
| alert_speed_threshold | integer Speed alert threshold in seconds (1-30) |
| alert_speed_time | integer Speed alert time window in minutes (20-60) |
| is_alert_vitals | integer Master toggle for web-vitals budget alerts (0=no, 1=yes). Stored as 1 only while at least one budget below is > 0. |
| alert_lcp_ms | integer LCP budget in ms (0 = recorded but not alerting; else 100-60000) |
| alert_fcp_ms | integer FCP budget in ms (0 = recorded but not alerting; else 100-60000) |
| alert_ttfb_ms | integer TTFB budget in ms (0 = recorded but not alerting; else 50-30000) |
| alert_cls_x1000 | integer CLS budget ×1000 (0 = recorded but not alerting; else 10-10000; 100 = CLS 0.10) |
| is_alert_dead_elements | integer Alert when a page element keeps failing (0=no, 1=yes); detection itself always runs |
| dead_element_checks | integer Consecutive failing checks before the dead-element alert fires (1-10) |
| dead_element_watch_types | string Comma-separated element types to alert on, from: image,script,css,other |
| dead_element_ignore | string Ignore globs, one per line — matching elements are recorded but never alert |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID for notifications |
Responses
Request samples
- Payload
{- "project_name": "My Website Speed",
- "monitoring_interval_slider": 5,
- "report_down_slider": 1,
- "probes": "all",
- "contacts": [
- 0
], - "groups": [
- 0
], - "is_alert_speed_drops": 0,
- "alert_speed_threshold": 5,
- "alert_speed_time": 30,
- "is_alert_vitals": 0,
- "alert_lcp_ms": 2500,
- "alert_fcp_ms": 0,
- "alert_ttfb_ms": 800,
- "alert_cls_x1000": 100,
- "is_alert_dead_elements": 0,
- "dead_element_checks": 3,
- "dead_element_watch_types": "image,script,css",
- "dead_element_ignore": "*/pixel/*.gif",
- "report_up": 0,
- "branding_id": 0
}Response samples
- 201
- 400
- 401
{- "data": {
- "id": 0
}
}Get a single speed monitor
Returns full details of a specific speed monitor including configuration, status, speed alert settings, and assigned contacts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- { }
], - "interval": 0,
- "report_down": 0,
- "report_up": true,
- "url": "string",
- "incident_id": 0,
- "locations": [
- 0
], - "is_alert_speed_drops": 0,
- "alert_speed_threshold": 0,
- "alert_speed_time": 0,
- "branding_id": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": true,
- "is_user": true,
- "is_operator": true,
- "is_individual_contact": true
}
]
}
}Delete a speed monitor
Permanently deletes a speed monitor and its associated reporting configuration. Incident and log data may be retained.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}Update an existing speed monitor
Updates an existing speed monitor. Only include fields you want to change. Omitted fields retain their current values.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Request Body schema: application/json
| is_paused | boolean Pause (true) or resume (false) the monitor. When present, only the pause/resume action is performed and other fields are ignored. |
| url | string URL to monitor page speed for |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Monitoring interval slider value (1-10) |
| report_down_slider | integer Report down delay slider value (1-5) |
| probes | string Monitoring locations: "all" or comma-separated probe IDs |
| contacts | Array of integers Contact IDs to notify |
| groups | Array of integers Group IDs |
| is_alert_speed_drops | integer Enable speed drop alerts (0=no, 1=yes) |
| alert_speed_threshold | integer Speed alert threshold in seconds (1-30) |
| alert_speed_time | integer Speed alert time window in minutes (20-60) |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID |
Responses
Request samples
- Payload
{- "is_paused": true,
- "url": "string",
- "project_name": "string",
- "monitoring_interval_slider": 0,
- "report_down_slider": 0,
- "probes": "string",
- "contacts": [
- 0
], - "groups": [
- 0
], - "is_alert_speed_drops": 0,
- "alert_speed_threshold": 0,
- "alert_speed_time": 0,
- "report_up": 0,
- "branding_id": 0
}Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "id": 0
}
}List incidents for a speed monitor
Returns a list of incidents for the specified speed monitor within the given date range. Defaults to the last 30 days.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of incidents to return |
| offset | integer Number of incidents to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "error_id": 0,
- "error_display": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Get a single speed incident
Returns the full detail of a specific incident for the given speed monitor, including the parsed error list, the probe servers that detected the incident, the captured response headers/body, traceroute and screenshot.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "monitor_id": 0,
- "type": "Speed",
- "type_code": "speed",
- "url": "string",
- "port": 0,
- "time_started": "string",
- "time_started_unix": 0,
- "time_ended": "string",
- "time_ended_unix": 0,
- "error": "string",
- "duration": "string",
- "errors": [
- {
- "error": "string",
- "count": 0
}
], - "servers": [
- {
- "name": "string",
- "flag": "string",
- "ip": "string",
- "date": "string",
- "error": "string"
}
], - "response_headers": "string",
- "response_body": "string",
- "traceroute": "string",
- "screenshot": "string",
- "is_critical": true,
- "is_trouble": true
}
}Delete a speed incident
Permanently deletes a specific speed incident and its associated status page threads. The incident must belong to the monitor in the path; otherwise 404 incident_not_found.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
- 409
{- "status": "success"
}List speed monitoring logs
Returns monitoring check logs for the specified speed monitor, newest first. Defaults to the last 14 days and a page size of 10; use limit/offset to page through the window. date_start is raised to the account plan's history retention floor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 14 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Page size (default 10, capped at 500) |
| offset | integer Number of log entries to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "id": 0,
- "flag": "string",
- "location": "string",
- "time_elapsed": "string",
- "speed": "string",
- "status_icon": "string",
- "status_alt": "string"
}
], - "metadata": {
- "total": 0
}
}Get timeline segments for a speed monitor
Returns up, down, maintenance and unknown timeline segments for the speed monitor over the requested date range, suitable for rendering an availability timeline strip.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 7 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Get speed load time chart data
Returns load time and downtime chart data for the specified speed monitor, including per-point probe location. Data is cached for 60 seconds.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "speed": [
- 0
], - "downtime": [
- 0
], - "date": [
- "string"
], - "location": [
- {
- "name": "string",
- "flag": "string"
}
], - "max_value": 0
}
}Get speed monitor averages
Returns aggregated average metrics for the specified speed monitor within the given date range: load time, requests, size, own domain time, and number of hosts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "load_time": 0,
- "total_resource_time": 0,
- "requests": 0,
- "size": 0,
- "own_domain_time": 0,
- "own_domain_pct": 0,
- "third_party_time": 0,
- "hosts": 0,
- "total_checks": 0
}
}Get web-vitals & breakdown chart data
Consolidated per-check history for the speed detail page: median-bucketed series for full page load, lab web vitals (TTFB/FCP/LCP/CLS), own-vs-third-party time, requests, hosts and per-type transfer sizes; plus range summary, the latest check per location, the configured budgets, and the locations present in the range. Vitals are lab values measured in the same Chrome run as the load time; checks from probes that do not record vitals yet are excluded from the vitals series (never zero-filled).
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End as Unix timestamp (defaults to now) |
| location | string Example: location=all Probe server ID to filter to, or 'all' (default) for the cross-location median |
Responses
Response samples
- 200
{- "data": {
- "bucket_seconds": 0,
- "buckets": [
- {
- "t": 0,
- "checks": 0,
- "load_ms": 0,
- "ttfb_ms": 0,
- "fcp_ms": 0,
- "lcp_ms": 0,
- "cls": 0,
- "own_ms": 0,
- "third_ms": 0,
- "hosts": 0,
- "requests": 0,
- "size_image": 0,
- "size_script": 0,
- "size_css": 0,
- "size_doc": 0,
- "size_other": 0
}
], - "summary": { },
- "latest": [
- { }
], - "locations": [
- { }
], - "budgets": { }
}
}Get dead/broken elements
Returns the dead-element report for the monitored page: every failing asset seen in the range with its type, sighting streaks, status and probe locations, plus a bucketed sightings series, the ignore-list hit count and the monitor alert config.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "report": {
- "elements": [
- {
- "link": "string",
- "type": "string",
- "error": "string",
- "first_seen": 0,
- "last_seen": 0,
- "sightings": 0,
- "streak": 0,
- "max_streak": 0,
- "status": "string",
- "locations": [
- "string"
]
}
], - "ignored_count": 0,
- "series": [
- { }
], - "bucket_seconds": 0,
- "config": { }
}
}Get PageSpeed/Lighthouse scores
Returns the latest Lighthouse/PageSpeed analysis for the monitored page, including score, host count, resource count, page size, and detailed insights.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "summary": {
- "id": 0,
- "score": 0,
- "number_of_hosts": 0,
- "number_of_resources": 0,
- "page_size": "string",
- "page_size_plain": 0,
- "time": 0
}, - "insights": { }
}
}Get component breakdown
Returns average speed, size, and request count broken down by component type (script, HTML, CSS, image, text, redirect) for the specified date range.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "script": {
- "speed": "string",
- "size": "string",
- "requests": 0
}, - "html": {
- "speed": "string",
- "size": "string",
- "requests": 0
}, - "css": {
- "speed": "string",
- "size": "string",
- "requests": 0
}, - "image": {
- "speed": "string",
- "size": "string",
- "requests": 0
}, - "text": {
- "speed": "string",
- "size": "string",
- "requests": 0
}, - "redirect": {
- "speed": "string",
- "size": "string",
- "requests": 0
}
}
}List all transaction monitors
Returns a list of all transaction monitors for the authenticated account. Supports filtering by monitor status.
Authorizations:
query Parameters
| show_is_up | boolean Default: true Include monitors that are up |
| show_is_critical | boolean Default: true Include monitors with critical incidents |
| show_is_trouble | boolean Default: true Include monitors with trouble incidents |
| show_is_suspended | boolean Default: true Include suspended monitors |
| show_is_paused | boolean Default: true Include paused monitors |
| show_is_maintenance | boolean Default: true Include monitors in maintenance |
| limit | integer Example: limit=25 Maximum number of monitors to return (0 = no limit) |
| offset | integer Example: offset=0 Number of monitors to skip |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- 0
]
}
], - "metadata": {
- "total": 0,
- "up": 0,
- "critical": 0,
- "trouble": 0,
- "suspended": 0,
- "paused": 0,
- "maintenance": 0
}
}Create a new transaction monitor
Creates a new transaction monitor with step definitions. Steps define the user journey to be tested.
Authorizations:
Request Body schema: application/json
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Monitoring interval slider value |
| report_down_slider | integer Report down delay slider value |
| contacts | Array of integers Contact IDs to notify |
| groups | Array of integers Group IDs |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID |
| probes | any Probe locations ("all" or array of IDs) |
Array of objects Transaction step definitions |
Responses
Request samples
- Payload
{- "project_name": "string",
- "monitoring_interval_slider": 0,
- "report_down_slider": 0,
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 0,
- "branding_id": 0,
- "probes": null,
- "steps": [
- {
- "number": 0,
- "action_name": "string",
- "element_value_1": "string",
- "element_value_2": "string",
- "element_value_3": "string",
- "skip_step_if_fails": 0,
- "wait_before_starting": 0,
- "perform_if_element_found": "string",
- "perform_if_text_found": "string",
- "perform_if_element_found_existance": "string",
- "perform_if_text_found_existance": "string"
}
]
}Response samples
- 201
- 400
- 401
{- "data": {
- "id": 0
}
}Get a single transaction monitor
Returns full details of a specific transaction monitor including configuration, step definitions, and assigned contacts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- 0
], - "interval": 0,
- "report_down": 0,
- "report_up": 0,
- "incident_id": 0,
- "locations": [
- 0
], - "branding_id": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": true,
- "is_user": true,
- "is_operator": true,
- "is_individual_contact": true
}
], - "steps": [
- {
- "number": 0,
- "action_name": "string",
- "element_value_1": "string",
- "element_value_2": "string",
- "element_value_3": "string",
- "skip_step_if_fails": 0,
- "wait_before_starting": 0
}
]
}
}Update a transaction monitor
Updates an existing transaction monitor including step definitions. Supports pausing/resuming as a separate operation.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Request Body schema: application/json
| is_paused | boolean Set to true to pause, false to resume (handled separately) |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Monitoring interval slider value |
| report_down_slider | integer Report down delay slider value |
| contacts | Array of integers Contact IDs to notify |
| groups | Array of integers Group IDs |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID |
| probes | any Probe locations ("all" or array of IDs) |
Array of objects Transaction step definitions |
Responses
Request samples
- Payload
{- "is_paused": true,
- "project_name": "string",
- "monitoring_interval_slider": 0,
- "report_down_slider": 0,
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 0,
- "branding_id": 0,
- "probes": null,
- "steps": [
- {
- "number": 0,
- "action_name": "string",
- "element_value_1": "string",
- "element_value_2": "string",
- "element_value_3": "string",
- "skip_step_if_fails": 0,
- "wait_before_starting": 0,
- "perform_if_element_found": "string",
- "perform_if_text_found": "string",
- "perform_if_element_found_existance": "string",
- "perform_if_text_found_existance": "string"
}
]
}Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "id": 0
}
}List incidents for a transaction monitor
Returns a list of incidents for the specified transaction monitor within the given date range. Defaults to the last 30 days.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of incidents to return |
| offset | integer Number of incidents to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "error_id": 0,
- "error_display": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Get incident detail with step breakdown
Returns details of a specific transaction incident, including a per-step breakdown with durations, action names, and screenshot URLs.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "time_started": "string",
- "time_started_unix": 0,
- "error_display": "string",
- "date_ended": "string",
- "steps": [
- {
- "number": 0,
- "action_name": "string",
- "attribute": "string",
- "duration": "string",
- "status": "success",
- "screenshot_url": "string"
}
]
}
}Delete a transaction incident
Permanently deletes one CLOSED incident of the specified monitor. The currently open incident cannot be deleted.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
- 409
{- "status": "success"
}List monitoring logs for a transaction monitor
Returns recent monitoring check logs for the specified transaction monitor within the given date range, limited to 20 entries. Defaults to the last 14 days when no range is supplied.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 14 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of log entries to return |
| offset | integer Number of log entries to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "id": 0,
- "flag": "string",
- "location": "string",
- "time_elapsed": "string",
- "speed": "string",
- "status_icon": "string",
- "status_alt": "string"
}
], - "metadata": {
- "total": 0
}
}Get the last run of a transaction monitor
Returns the most recent transaction run with its overall status, total duration and per-step breakdown (step number, action name, attribute, duration, status and a screenshot URL when one was captured). Returns null data if the monitor has not run yet.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Get timeline segments for a transaction monitor
Returns up, down, maintenance and unknown timeline segments for the transaction monitor over the requested date range, suitable for rendering an availability timeline strip.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 7 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Get stacked step chart data
Returns step-by-step timing data for building a stacked chart of transaction execution durations. In addition to the fixed fields, the response contains one dynamic series per step ("step_1", "step_2", ... up to "step_N" where N is max_steps); each step_N is an array of that step's duration in seconds for each data point (0 when the step did not run). Returns an empty object when there is no data in the range.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "date": [
- "string"
], - "max_value": 0,
- "max_steps": 0,
- "total": [
- 0
], - "step_1": [
- 0
], - "property1": [
- 0
], - "property2": [
- 0
]
}
}Get availability percentages for a transaction monitor
Calculates uptime and downtime percentages for the specified transaction monitor within the given date range. Defaults to the last 24 hours.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 24 hours ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "uptime": 99.95,
- "downtime": 0.05
}
}Get step definitions for a transaction monitor
Returns the configured step definitions for the specified transaction monitor, including action names, element selectors, and conditional execution options.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "number": 0,
- "action_name": "string",
- "element_value_1": "string",
- "element_value_2": "string",
- "element_value_3": "string",
- "skip_step_if_fails": 0,
- "wait_before_starting": 0,
- "perform_if_element_found": "string",
- "perform_if_text_found": "string",
- "perform_if_element_found_existance": "string",
- "perform_if_text_found_existance": "string"
}
]
}Queue an immediate test run for a transaction monitor
Schedules the specified transaction monitor for an immediate check by setting its next check time to now. This is an asynchronous operation: the test is queued for a probe to pick up and does NOT run synchronously, so live step results and screenshots are not returned here. The response always reports a "queued" status, echoes the monitor ID, and lists the monitor's steps with a placeholder "queued" status (duration "0ms", no screenshot). Poll GET /api/v2/transaction/{id}/last-run afterwards to retrieve the actual run results.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
{- "data": {
- "status": "queued",
- "monitor_id": 0,
- "steps": [
- {
- "number": 0,
- "action_name": "string",
- "status": "queued",
- "duration": "0ms",
- "screenshot_url": "string"
}
]
}
}List all virus monitors
Returns a paginated list of all virus monitors for the authenticated account. Supports filtering by monitor status.
Authorizations:
query Parameters
| limit | integer Example: limit=25 Maximum number of monitors to return (0 = no limit) |
| offset | integer Example: offset=0 Number of monitors to skip |
| show_is_up | boolean Default: true Include monitors that are up |
| show_is_critical | boolean Default: true Include monitors with critical incidents |
| show_is_trouble | boolean Default: true Include monitors with trouble incidents |
| show_is_suspended | boolean Default: true Include suspended monitors |
| show_is_paused | boolean Default: true Include paused monitors |
| show_is_maintenance | boolean Default: true Include monitors in maintenance |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- {
- "id": 0,
- "name": "string"
}
]
}
], - "metadata": {
- "total": 0
}
}Create a new virus monitor
Creates a new virus/malware monitor for the specified URL. Scans via the Google Web Risk API.
Authorizations:
Request Body schema: application/json
| url required | string URL to monitor for viruses/malware |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Monitoring interval slider value (determines check frequency, minimum 3600s) |
| report_down_slider | integer Report down delay slider value |
| contacts | Array of integers Contact IDs to notify on incidents |
| groups | Array of integers Group IDs to assign the monitor to |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID for notifications |
Responses
Request samples
- Payload
{- "project_name": "My Website Virus Scan",
- "monitoring_interval_slider": 5,
- "report_down_slider": 1,
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 1,
- "branding_id": 0
}Response samples
- 201
- 400
- 401
{- "data": {
- "id": 0
}
}Get a single virus monitor
Returns full details of a specific virus monitor including configuration, status, and assigned contacts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- { }
], - "interval": 0,
- "report_down": 0,
- "report_up": true,
- "url": "string",
- "incident_id": 0,
- "branding_id": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": true,
- "is_user": true,
- "is_operator": true,
- "is_individual_contact": true
}
]
}
}Delete a virus monitor
Permanently deletes a virus monitor and its associated reporting configuration. Incident and log data may be retained.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}Update an existing virus monitor
Updates an existing virus monitor. Only include fields you want to change. Omitted fields retain their current values.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Request Body schema: application/json
| is_paused | boolean Pause (true) or resume (false) the monitor. May be sent alone or together with configuration fields — both are then applied, and the pause only after the rest of the payload has validated. |
| url | string URL to monitor for viruses/malware |
| project_name | string Monitor display name |
| monitoring_interval_slider | integer Monitoring interval slider value |
| report_down_slider | integer Report down delay slider value |
| contacts | Array of integers Contact IDs to notify |
| groups | Array of integers Group IDs |
| report_up | integer Send notification when monitor recovers (0=no, 1=yes) |
| branding_id | integer Branding template ID |
Responses
Request samples
- Payload
{- "is_paused": true,
- "url": "string",
- "project_name": "string",
- "monitoring_interval_slider": 0,
- "report_down_slider": 0,
- "contacts": [
- 0
], - "groups": [
- 0
], - "report_up": 0,
- "branding_id": 0
}Response samples
- 200
- 400
- 401
- 404
- 422
{- "data": {
- "id": 0
}
}List incidents for a virus monitor
Returns a list of security incidents for the specified virus monitor within the given date range. Incident types include MALWARE, SOCIAL_ENGINEERING, and UNWANTED_SOFTWARE. Defaults to the last 30 days.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of incidents to return |
| offset | integer Number of incidents to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "error_id": 0,
- "error_display": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Get a single virus incident
Returns the full detail of a specific security incident for the given virus monitor. A virus check is one server-side Google Web Risk lookup, so the shared incident keys that describe a probe fan-out and its HTTP exchange (servers, response headers/body, traceroute, screenshot) are always empty for this family.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "monitor_id": 0,
- "type": "Virus",
- "type_code": "virus",
- "url": "string",
- "port": 0,
- "time_started": "string",
- "time_started_unix": 0,
- "time_ended": "string",
- "time_ended_unix": 0,
- "error": "string",
- "duration": "string",
- "errors": [
- {
- "error": "string",
- "count": 0
}
], - "servers": [
- {
- "name": "string",
- "flag": "string",
- "ip": "string",
- "date": "string",
- "error": "string"
}
], - "response_headers": "string",
- "response_body": "string",
- "traceroute": "string",
- "screenshot": "string",
- "is_critical": true,
- "is_trouble": true
}
}Delete a virus incident
Permanently deletes a specific CLOSED virus/malware incident and its associated status page threads. The incident must belong to the monitor in the path; otherwise 404 incident_not_found. The monitor's currently open incident cannot be deleted (409).
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
- 409
{- "status": "success"
}List virus scan logs
Returns virus scan check logs for the specified monitor, newest first. Defaults to the last 90 days; use limit/offset to page through the window. date_start is raised to the account plan's history retention floor.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 90 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of log entries to return |
| offset | integer Number of log entries to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "id": 0,
- "flag": "string",
- "location": "string",
- "time_elapsed": "string",
- "speed": "string",
- "response_time": 0,
- "status_icon": "string",
- "status_alt": "string"
}
], - "metadata": {
- "total": 0
}
}Get timeline segments for a virus monitor
Returns up, down, maintenance and unknown timeline segments for the virus monitor over the requested date range, suitable for rendering an availability timeline strip.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 7 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
List all RUM monitors
Returns a paginated list of all RUM monitors for the authenticated account. Supports filtering by monitor status.
Authorizations:
query Parameters
| limit | integer Example: limit=25 Maximum number of monitors to return (0 = no limit) |
| offset | integer Example: offset=0 Number of monitors to skip |
| show_is_up | boolean Default: true Include monitors that are up |
| show_is_critical | boolean Default: true Include monitors with critical incidents |
| show_is_trouble | boolean Default: true Include monitors with trouble incidents |
| show_is_suspended | boolean Default: true Include suspended monitors |
| show_is_paused | boolean Default: true Include paused monitors |
| show_is_maintenance | boolean Default: true Include monitors in maintenance |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "name": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- {
- "id": 0,
- "name": "string"
}
]
}
], - "metadata": {
- "total": 0
}
}Create a new RUM monitor
Creates a new Real User Monitoring site with the specified configuration.
Authorizations:
Request Body schema: application/json
| url required | string URL of the website to monitor |
| project_name required | string Monitor display name |
| apdex_score | integer Apdex threshold in seconds (1-20, default 4) |
| is_alert_traffic_stops | integer Enable traffic stop alerts (0=no, 1=yes) |
| alert_traffic_stops_minutes | integer Minutes without traffic before alerting |
| is_alert_speed_drops | integer Enable speed drop alerts (0=no, 1=yes) |
| alert_speed_drops_percent | integer Speed drop percentage threshold |
| alert_speed_drops_time | integer Minutes of sustained speed drop before alerting |
| is_alert_traffic_drops | integer Enable traffic drop alerts (0=no, 1=yes) |
| alert_traffic_drops_percent | integer Traffic drop percentage threshold |
| alert_traffic_drops_time | integer Minutes of sustained traffic drop before alerting |
| is_alert_js_errors | integer Enable JS error alerts (0=no, 1=yes) |
| alert_js_errors_percent | integer JS error percentage threshold |
| alert_js_errors_time | integer Minutes of sustained JS errors before alerting |
| contacts | Array of integers Contact IDs to notify on incidents |
integer or Array of integers Group assignment: a single group ID or an array of group IDs. | |
| branding_id | integer Branding template ID |
Responses
Request samples
- Payload
{- "project_name": "My Website",
- "apdex_score": 4,
- "is_alert_traffic_stops": 0,
- "alert_traffic_stops_minutes": 30,
- "is_alert_speed_drops": 0,
- "alert_speed_drops_percent": 50,
- "alert_speed_drops_time": 30,
- "is_alert_traffic_drops": 0,
- "alert_traffic_drops_percent": 50,
- "alert_traffic_drops_time": 30,
- "is_alert_js_errors": 0,
- "alert_js_errors_percent": 10,
- "alert_js_errors_time": 30,
- "contacts": [
- 0
], - "groups": 0,
- "branding_id": 0
}Response samples
- 201
- 400
- 401
{- "data": {
- "id": 0,
- "script_hash": "string"
}
}Get a single RUM monitor
Returns full details of a specific RUM monitor including configuration, tracking code, alert settings, and assigned contacts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "url": "string",
- "is_up": true,
- "is_critical": true,
- "is_trouble": true,
- "is_suspended": true,
- "is_paused": true,
- "is_maintenance": true,
- "groups": [
- { }
], - "tracking_code": "string",
- "script_found": true,
- "apdex_score": 0,
- "is_alert_traffic_stops": true,
- "alert_traffic_stops_minutes": 0,
- "is_alert_speed_drops": true,
- "alert_speed_drops_percent": 0,
- "alert_speed_drops_time": 0,
- "is_alert_traffic_drops": true,
- "alert_traffic_drops_percent": 0,
- "alert_traffic_drops_time": 0,
- "is_alert_js_errors": true,
- "alert_js_errors_percent": 0,
- "alert_js_errors_time": 0,
- "branding_id": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": true,
- "is_user": true,
- "is_operator": true,
- "is_individual_contact": true
}
]
}
}Update an existing RUM monitor
Updates an existing RUM monitor. Only include fields you want to change. Omitted fields retain their current values.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Request Body schema: application/json
| url | string URL of the website to monitor |
| project_name | string Monitor display name |
| apdex_score | integer Apdex threshold in seconds (1-20) |
| is_alert_traffic_stops | integer Enable traffic stop alerts (0=no, 1=yes) |
| alert_traffic_stops_minutes | integer Minutes without traffic before alerting |
| is_alert_speed_drops | integer Enable speed drop alerts (0=no, 1=yes) |
| alert_speed_drops_percent | integer Speed drop percentage threshold |
| alert_speed_drops_time | integer Minutes of sustained speed drop before alerting |
| is_alert_traffic_drops | integer Enable traffic drop alerts (0=no, 1=yes) |
| alert_traffic_drops_percent | integer Traffic drop percentage threshold |
| alert_traffic_drops_time | integer Minutes of sustained traffic drop before alerting |
| is_alert_js_errors | integer Enable JS error alerts (0=no, 1=yes) |
| alert_js_errors_percent | integer JS error percentage threshold |
| alert_js_errors_time | integer Minutes of sustained JS errors before alerting |
| contacts | Array of integers Contact IDs to notify |
| is_paused | boolean Pause (true) or resume (false) the monitor. When present, only the pause/resume action is performed and other fields are ignored. |
integer or Array of integers Group assignment: a single group ID or an array of group IDs. | |
| branding_id | integer Branding template ID |
Responses
Request samples
- Payload
{- "url": "string",
- "project_name": "string",
- "apdex_score": 0,
- "is_alert_traffic_stops": 0,
- "alert_traffic_stops_minutes": 0,
- "is_alert_speed_drops": 0,
- "alert_speed_drops_percent": 0,
- "alert_speed_drops_time": 0,
- "is_alert_traffic_drops": 0,
- "alert_traffic_drops_percent": 0,
- "alert_traffic_drops_time": 0,
- "is_alert_js_errors": 0,
- "alert_js_errors_percent": 0,
- "alert_js_errors_time": 0,
- "contacts": [
- 0
], - "is_paused": true,
- "groups": 0,
- "branding_id": 0
}Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "id": 0
}
}List incidents for a RUM monitor
Returns a list of incidents for the specified RUM monitor within the given date range. Defaults to the last 30 days. Incidents that overlap the range (including ongoing incidents that started before it) are included, and the result set is paginated with the limit/offset parameters.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of incidents to return |
| offset | integer Number of incidents to skip |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "error_id": 0,
- "error_short": "string",
- "error_long": "string",
- "severity": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Delete a RUM incident
Permanently deletes a specific RUM incident and its associated status page threads. The incident must belong to the monitor in the path; otherwise 404 incident_not_found.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
| incidentId required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "status": "success"
}Verify tracking script installation
Checks whether the RUM tracking script has been correctly installed on the monitored website by fetching the page and searching for the script hash.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "script_found": true
}
}Get RUM summary analytics
Returns summary analytics for a RUM monitor: average load time, pageviews, JS errors, and user satisfaction breakdown.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | string <date> Start date (YYYY-MM-DD), defaults to 30 days ago |
| date_end | string <date> End date (YYYY-MM-DD), defaults to today |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "avg_load_time": 0,
- "pageviews": 0,
- "js_errors": 0,
- "satisfaction": {
- "satisfied_pct": 0,
- "tolerating_pct": 0,
- "frustrated_pct": 0
}
}
}Get per-page performance breakdown
Returns per-page performance data including pageviews and average load time for each tracked URL.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | string <date> Start date (YYYY-MM-DD), defaults to 30 days ago |
| date_end | string <date> End date (YYYY-MM-DD), defaults to today |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "url": "string",
- "pageviews": 0,
- "avg_load_time": 0
}
]
}Get JavaScript error analytics
Returns JavaScript error data including totals, error breakdown by name and by script.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | string <date> Start date (YYYY-MM-DD), defaults to 30 days ago |
| date_end | string <date> End date (YYYY-MM-DD), defaults to today |
Responses
Response samples
- 200
- 401
- 404
{- "data": {
- "total": 0,
- "unique": 0,
- "affected_pages": 0,
- "error_rate": 0,
- "by_name": [
- {
- "name": "string",
- "count": 0,
- "pages": 0,
- "rate": 0,
- "last_seen": "string",
- "stack_trace": "string"
}
], - "by_script": [
- {
- "script": "string",
- "count": 0,
- "last_seen": "string"
}
]
}
}Get geographic distribution
Returns visitor distribution by country with load counts and average load times.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | string <date> Start date (YYYY-MM-DD), defaults to 30 days ago |
| date_end | string <date> End date (YYYY-MM-DD), defaults to today |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "country": "string",
- "country_code": "string",
- "loads": 0,
- "avg_load_time": 0
}
]
}Get browser distribution
Returns visitor distribution by browser with share percentage and load counts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | string <date> Start date (YYYY-MM-DD), defaults to 30 days ago |
| date_end | string <date> End date (YYYY-MM-DD), defaults to today |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "name": "string",
- "share_pct": 0,
- "loads": 0
}
]
}Get device type distribution
Returns visitor distribution by device type (Desktop, Mobile, Tablet) with share percentage and load counts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | string <date> Start date (YYYY-MM-DD), defaults to 30 days ago |
| date_end | string <date> End date (YYYY-MM-DD), defaults to today |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "type": "string",
- "share_pct": 0,
- "loads": 0
}
]
}Get operating system distribution
Returns visitor distribution by operating system with share percentage and load counts.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | string <date> Start date (YYYY-MM-DD), defaults to 30 days ago |
| date_end | string <date> End date (YYYY-MM-DD), defaults to today |
Responses
Response samples
- 200
- 401
- 404
{- "data": [
- {
- "name": "string",
- "share_pct": 0,
- "loads": 0
}
]
}Get tracking JavaScript snippet
Returns the JavaScript tracking code snippet that should be embedded in the monitored website to collect Real User Monitoring data.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
{- "data": {
- "snippet": "string",
- "script_hash": "string"
}
}List alert logs for a RUM monitor
Returns recent alert/incident logs for the specified RUM monitor. RUM monitors collect client-side data, so logs reflect alert events rather than server-side checks.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 30 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
| limit | integer Maximum number of log entries to return |
| offset | integer Number of log entries to skip |
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "error_type": "string",
- "error_short": "string",
- "severity": "string",
- "time_started": "string",
- "date_ended": "string",
- "time_elapsed": "string"
}
], - "metadata": {
- "total": 0
}
}Get timeline segments for a RUM monitor
Returns up, down, maintenance and unknown timeline segments for the RUM monitor over the requested date range, suitable for rendering an availability timeline strip.
Authorizations:
path Parameters
| id required | integer\d+ Monitor ID |
query Parameters
| date_start | integer Start date as Unix timestamp (defaults to 7 days ago) |
| date_end | integer End date as Unix timestamp (defaults to now) |
Responses
Pause a single monitor
Pauses a single monitor by type and ID. Creates a pause history entry.
Authorizations:
path Parameters
| type required | string Enum: "uptime" "ssl" "domain" "virus" "fpl" "transaction" "rum" "heartbeat" "blacklist" "dns" "api" Monitor type |
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
{- "status": "success"
}Resume a single monitor
Resumes a single paused monitor by type and ID. Closes the pause history entry.
Authorizations:
path Parameters
| type required | string Enum: "uptime" "ssl" "domain" "virus" "fpl" "transaction" "rum" "heartbeat" "blacklist" "dns" "api" Monitor type |
| id required | integer\d+ Monitor ID |
Responses
Response samples
- 200
{- "status": "success"
}Copy a monitor
Creates a copy of an existing monitor. Currently only supported for uptime monitors.
Authorizations:
path Parameters
| type required | string Value: "uptime" Monitor type (only "uptime" supported) |
| id required | integer\d+ Monitor ID to copy |
Responses
Response samples
- 201
{- "data": {
- "id": 0
}
}List monitoring locations (probes) grouped by region
Returns the full catalogue of monitoring checkpoint probes available to the account, organised into geographic regions; each probe lists its ID, city, country, ISO country code and IP. Use these probe IDs when creating or scoping monitors to choose which locations run the checks.
Authorizations:
Responses
Response samples
- 200
- 401
{- "regions": [
- {
- "id": "europe",
- "name": "Europe",
- "probes": [
- {
- "id": 1,
- "city": "Frankfurt",
- "country": "Germany",
- "countryCode": "DE",
- "ip": "203.0.113.10",
- "enabled": true
}
]
}
]
}List active incidents
Returns a list of currently active (ongoing) incidents across all monitor types. Supports filtering by groups or individual monitors.
Authorizations:
query Parameters
| all | boolean Default: true Show all monitors (default true) |
| groups[] | Array of integers Filter by group IDs |
| monitors[uptime][] | Array of integers Filter by specific uptime monitor IDs |
| monitors[ssl][] | Array of integers Filter by specific SSL monitor IDs |
| monitors[domain][] | Array of integers Filter by specific domain monitor IDs |
| monitors[fpl][] | Array of integers Filter by specific speed (full page load) monitor IDs. Note: the type key for speed monitors is "fpl". |
| monitors[transaction][] | Array of integers Filter by specific transaction monitor IDs |
| monitors[virus][] | Array of integers Filter by specific virus monitor IDs |
| monitors[rum][] | Array of integers Filter by specific RUM monitor IDs |
| monitors[server][] | Array of integers Filter by specific server monitor IDs |
| monitors[heartbeat][] | Array of integers Filter by specific heartbeat monitor IDs |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "monitor_id": 0,
- "monitor_name": "string",
- "monitor_type": "string",
- "error": "string",
- "error_tooltip": "string",
- "time_started": "string",
- "time_ended": "string",
- "down_since": "string",
- "is_critical": true,
- "is_trouble": true,
- "path": "string",
- "group_id": 0
}
], - "metadata": {
- "total": 0
}
}List incident history
Returns a paginated history of resolved and ongoing incidents across all monitor types within the specified date range.
Authorizations:
query Parameters
| date_start | string Start date (Unix timestamp or YYYYMMDD string, defaults to 7 days ago) |
| date_end | string End date (Unix timestamp or YYYYMMDD string, defaults to now) |
| groups[] | Array of integers Filter by group IDs |
| monitors[uptime][] | Array of integers Filter by specific uptime monitor IDs |
| monitors[ssl][] | Array of integers Filter by specific SSL monitor IDs |
| monitors[domain][] | Array of integers Filter by specific domain monitor IDs |
| monitors[fpl][] | Array of integers Filter by specific speed (full page load) monitor IDs. Note: the type key for speed monitors is "fpl". |
| monitors[transaction][] | Array of integers Filter by specific transaction monitor IDs |
| monitors[virus][] | Array of integers Filter by specific virus monitor IDs |
| monitors[rum][] | Array of integers Filter by specific RUM monitor IDs |
| monitors[server][] | Array of integers Filter by specific server monitor IDs |
| monitors[heartbeat][] | Array of integers Filter by specific heartbeat monitor IDs |
| page | integer Default: 1 Page number (default 1) |
| limit | integer Default: 20 Results per page (default 20) |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "path": "string",
- "id": 0,
- "name": "string",
- "error_name": "string",
- "error_tooltip": "string",
- "time": "string",
- "time_started": "string",
- "time_ago": "string",
- "errors_sent_tooltip": "string",
- "errors_sent": 0,
- "duration": "string",
- "incident_id": 0,
- "type_name": "string",
- "type_name_display": "string",
- "incident_start": 0,
- "incident_end": 0,
- "is_critical": true,
- "is_trouble": true,
- "group": { }
}
], - "metadata": {
- "total": 0,
- "page": 0,
- "pages": 0
}
}Get incident details
Returns full details for a single incident including monitor info, error data, checkpoint servers, screenshots, response headers/body, and traceroute.
Authorizations:
path Parameters
| type required | string Enum: "uptime" "ssl" "domain" "fpl" "speed" "virus" "transaction" "rum" "server" "heartbeat" "blacklist" "dns" "api" Monitor type (the speed-monitor type key is fpl; speed is accepted as an alias) |
| id required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "monitor_id": 0,
- "type": "string",
- "type_id": 0,
- "type_code": "string",
- "url": "string",
- "time_started": "string",
- "time_started_unix": 0,
- "time_ended": "string",
- "time_ended_unix": 0,
- "error": "string",
- "duration": "string",
- "errors": [
- {
- "error": "string",
- "count": 0
}
], - "servers": [
- {
- "name": "string",
- "flag": "string",
- "ip": "string",
- "date": "string",
- "error": "string"
}
], - "response_headers": "string",
- "response_body": "string",
- "traceroute": "string",
- "screenshot": "string",
- "is_critical": true,
- "is_trouble": true,
- "group_id": 0
}
}Delete an incident
Permanently deletes a specific incident and its associated status page threads.
Authorizations:
path Parameters
| type required | string Enum: "uptime" "ssl" "domain" "fpl" "speed" "virus" "transaction" "rum" "server" "heartbeat" "blacklist" "dns" "api" Monitor type (the speed-monitor type key is fpl; speed is accepted as an alias) |
| id required | integer\d+ Incident ID |
Responses
Response samples
- 200
- 400
- 401
{- "status": "success"
}List monitoring logs across all monitor types
Returns a paginated list of monitoring check logs across all monitor types (uptime, SSL, domain, speed, virus, transaction, server, API, DNS, blacklist). Supports filtering by date range, monitor, status, and location. Heartbeat pings are returned when the monitor filter names heartbeat monitors only.
Authorizations:
query Parameters
| date_start | string Start date (Unix timestamp or YYYYMMDD string, defaults to 7 days ago) |
| date_end | string End date (Unix timestamp or YYYYMMDD string, defaults to now) |
| monitors[uptime][] | Array of integers Filter by specific uptime monitor IDs |
| monitors[ssl][] | Array of integers Filter by specific SSL monitor IDs |
| monitors[domain][] | Array of integers Filter by specific domain monitor IDs |
| monitors[fpl][] | Array of integers Filter by specific speed (full page load) monitor IDs. Note: the type key for speed monitors is "fpl". |
| monitors[transaction][] | Array of integers Filter by specific transaction monitor IDs |
| monitors[virus][] | Array of integers Filter by specific virus monitor IDs |
| monitors[api][] | Array of integers Filter by specific API monitor IDs (one row per run) |
| monitors[dns][] | Array of integers Filter by specific DNS monitor IDs (one row per sweep; these rows carry no probe location) |
| monitors[blacklist][] | Array of integers Filter by specific blacklist monitor IDs (one row per sweep; these rows carry no probe location) |
| status[up] | boolean Default: true Include checks with up status (default true) |
| status[down] | boolean Default: true Include checks with down status (default true) |
| locations | string Default: "all" Location filter: "all" or comma-separated location IDs |
| page | integer Default: 1 Page number (default 1) |
| limit | integer Default: 20 Results per page (default 20) |
Responses
Response samples
- 200
- 401
{- "data": [
- {
- "id": 0,
- "monitor_name": "string",
- "monitor_type": "string",
- "monitor_id": 0,
- "location": "string",
- "location_code": "string",
- "time": "string",
- "status": "string",
- "duration": "string",
- "response_time": 0
}
], - "metadata": {
- "total": 0,
- "page": 0,
- "pages": 0
}
}Get single monitoring log detail
Returns detailed data for a single monitoring check result.
Authorizations:
path Parameters
| type required | string Enum: "uptime" "ssl" "domain" "virus" "fpl" "transaction" "heartbeat" "server" "api" "dns" "blacklist" Monitor type |
| id required | integer\d+ Log entry ID |
Responses
List available contact types (Email, SMS + user integrations)
Returns the set of contact channel types you can assign to a new contact: the built-in Email and SMS types plus one entry per integration profile already configured on your account (Slack, Discord, Telegram, webhooks, etc.). Use the returned ids/type codes when creating or updating contacts.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "type": "string",
- "name": "string"
}
]
}List all contacts for the authenticated account
Returns every alert recipient configured on your account, including email and SMS contacts as well as integration-backed contacts, with their confirmation status and the operator they belong to. The response includes a metadata.total count; results are not paginated.
Authorizations:
query Parameters
| scope | string Value: "account" Optional scope filter. Defaults to the operator-scoped list (an operator sees only the contacts it owns). Set to "account" to return every contact on the account regardless of the owning operator. |
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "user": 0,
- "operator": 0,
- "name": "string",
- "type": 0,
- "contact": "string",
- "is_integration": 0,
- "integration_type": "string",
- "integration_id": 0,
- "is_confirmed": 0,
- "alerts_suppressed": 0
}
], - "metadata": {
- "total": 0
}
}Create a new contact
Adds a new alert recipient to your account. For email/sms types the value is the address or phone number, and SMS numbers must be in international format (starting with a +); for integration types the value is optional and integration_id links to an existing integration profile. SMS contacts start unconfirmed (is_confirmed=false) and must be verified via the confirmation flow before they will receive alerts.
Authorizations:
Request Body schema: application/json
| name required | string Contact display name |
| type required | string Contact type (email, sms, slack, etc.) |
| value required | string Contact value (email address, phone number, etc.) |
| integration_id | integer Integration ID if this is an integration contact |
| user_id | integer User/operator ID this contact belongs to (0 for main user) |
Responses
Request samples
- Payload
{- "name": "string",
- "type": "email",
- "integration_id": 0,
- "user_id": 0
}Response samples
- 201
- 400
{- "data": {
- "id": 0,
- "is_confirmed": true
}
}Get a single contact by ID
Returns the full record for one alert recipient, including its type, value, confirmation flag and integration linkage. The contact must belong to the authenticated account; a 404 is returned if no matching contact exists.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "data": {
- "id": 0,
- "user": 0,
- "operator": 0,
- "name": "string",
- "type": 0,
- "contact": "string",
- "is_integration": 0,
- "integration_type": "string",
- "integration_id": 0,
- "is_confirmed": 0,
- "alerts_suppressed": 0
}
}Delete a contact
Permanently removes an alert recipient from your account so it will no longer receive notifications. This action cannot be undone; returns a 400 if the contact could not be deleted.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Update an existing contact
Modifies an existing alert recipient; only the fields you supply are changed and any omitted fields keep their current values. SMS numbers must remain in international format (starting with a +). The contact must belong to the authenticated account, otherwise a 404 is returned.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string Contact display name |
| type | string Contact type |
| value | string Contact value |
| integration_id | integer |
| user_id | integer Reassign the contact to this user/operator (0 = main user). Account owner only. |
Responses
Request samples
- Payload
{- "name": "string",
- "type": "string",
- "value": "string",
- "integration_id": 0,
- "user_id": 0
}Response samples
- 200
- 400
{- "data": {
- "id": 0,
- "is_confirmed": true
}
}Get contacts with selection state for a specific monitor
Returns all of your contacts annotated with an is_selected flag indicating whether each one is currently assigned to receive alerts for the given monitor. Use it to render an alert-recipient picker for a monitor of the specified type (uptime, ssl, domain, fpl, transaction, rum, virus, reports).
Authorizations:
path Parameters
| monitorId required | integer\d+ Monitor ID |
| type required | string Monitor type (uptime, ssl, domain, fpl, transaction, rum, virus, reports) |
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "type_text": "string",
- "contact_value": "string",
- "is_selected": true
}
]
}Send an SMS confirmation code to a contact
Generates and texts a one-time confirmation code to an SMS contact so it can be verified before receiving alerts. The contact must belong to your account and be an SMS type; each send is charged against your SMS credit balance and is rate-limited per number, so repeated calls may return 429 (too many requests) or fail if you have no SMS credits.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Verify an SMS confirmation code
Confirms an SMS contact by submitting the code previously delivered via the request-confirmation endpoint; on success the contact is marked confirmed and becomes eligible to receive alerts. The contact must belong to your account, and an incorrect code returns a 400 with code invalid_code.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| code required | string The confirmation code received via SMS |
Responses
Request samples
- Payload
{- "code": "123456"
}Response samples
- 200
- 400
{- "status": "success"
}List all integrations for the authenticated account
Returns every third-party notification channel configured on your account (Slack, Discord, Telegram, PagerDuty, MS Teams, Statuspage, Mattermost, Twilio, WhatsApp, webhooks, etc.) with its id, name and type. The response includes a metadata.total count; results are not paginated.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "type": "string"
}
], - "metadata": {
- "total": 0
}
}Create a new integration
Creates a third-party notification channel of the given type (slack, discord, telegram, pagerduty, etc.). Required and meaningful fields vary by type and are validated server-side; the type-specific values map onto component_id, page_id, custom_headers and additional_value_1 (for example Slack channel or Twilio phone). A matching alert contact is created automatically, so the response returns both the integration id and the new contact_id.
Authorizations:
Request Body schema: application/json
| name required | string Integration display name |
| type required | string Integration type (slack, discord, telegram, etc.) |
| api_key required | string API key or webhook URL |
| component_id | string Component ID (statuspage/twilio) |
| page_id | string Page ID (statuspage/twilio) |
| custom_headers | string Custom headers (webhook) |
| additional_value_1 | string Additional value (slack channel, twilio phone) |
Responses
Request samples
- Payload
{- "name": "string",
- "type": "slack",
- "api_key": "string",
- "component_id": "string",
- "page_id": "string",
- "custom_headers": "string",
- "additional_value_1": "string"
}Response samples
- 201
{- "data": {
- "id": 0,
- "contact_id": 0
}
}List all webhook integrations
Returns only the webhook-type integrations on your account, each with its target URL (api_key) and any custom headers. Use this to manage outbound HTTP notification endpoints separately from other integration types.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "api_key": "string",
- "custom_headers": "string"
}
]
}Create a new webhook
Registers a new outbound webhook that Uptimia will POST to when alerts fire. The api_key field must be a valid public URL; it is validated and screened against an SSRF guard, so internal/private addresses are rejected with a 400. Optionally supply custom_headers as a JSON string to attach to each request.
Authorizations:
Request Body schema: application/json
| name required | string Webhook display name |
| api_key required | string Webhook URL |
| custom_headers | string Custom headers as JSON string |
Responses
Request samples
- Payload
{- "name": "string",
- "api_key": "string",
- "custom_headers": "string"
}Response samples
- 201
{- "data": {
- "id": 0
}
}Get a single webhook by ID
Returns the configuration of one webhook integration, including its target URL and custom headers. The integration must belong to your account and be of type webhook; a 404 is returned otherwise.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "data": {
- "id": 0,
- "name": "string",
- "api_key": "string",
- "custom_headers": "string"
}
}Delete a webhook
Permanently removes a webhook integration so it will no longer receive alert notifications. The integration must belong to your account and be of type webhook (404 otherwise); returns a 400 if deletion fails.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success"
}Update a webhook
Updates the name, target URL or custom headers of an existing webhook; omitted fields keep their current values. The integration must belong to your account and be of type webhook, otherwise a 404 is returned.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string |
| api_key | string Webhook URL |
| custom_headers | string |
Responses
Request samples
- Payload
{- "name": "string",
- "api_key": "string",
- "custom_headers": "string"
}Response samples
- 200
{- "data": {
- "id": 0,
- "name": "string",
- "api_key": "string",
- "custom_headers": "string"
}
}Get a single integration by ID
Returns the full configuration of one integration of any type, including its api_key plus type-specific fields such as component_id, page_id, custom_headers and additional_value_1. The integration must belong to the authenticated account; a 404 is returned if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "data": {
- "id": 0,
- "name": "string",
- "type": "string",
- "api_key": "string",
- "component_id": "string",
- "custom_headers": "string",
- "page_id": "string",
- "additional_value_1": "string"
}
}Delete an integration
Permanently removes an integration of any type along with its associated alert contacts so it no longer receives notifications. The integration must belong to your account (404 otherwise); returns a 400 if deletion fails.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success"
}Update an existing integration
Updates any field of an existing integration of any type; omitted fields retain their current values. If the integration name changes, the linked alert contact is renamed to match. The integration must belong to your account, otherwise a 404 is returned.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string |
| type | string |
| api_key | string |
| component_id | string |
| page_id | string |
| custom_headers | string |
| additional_value_1 | string |
Responses
Request samples
- Payload
{- "name": "string",
- "type": "string",
- "api_key": "string",
- "component_id": "string",
- "page_id": "string",
- "custom_headers": "string",
- "additional_value_1": "string"
}Response samples
- 200
{- "data": {
- "id": 0,
- "name": "string",
- "type": "string",
- "api_key": "string",
- "component_id": "string",
- "custom_headers": "string",
- "page_id": "string",
- "additional_value_1": "string"
}
}Send a test notification for an integration
Dispatches a sample alert through the integration using its stored credentials so you can confirm the channel is wired up correctly before relying on it. The integration must belong to your account (404 otherwise); unsupported integration types or delivery failures (for example an invalid Twilio phone number) return a 400.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success"
}List all maintenance windows for the authenticated user
Returns every scheduled maintenance window belonging to the authenticated account, each with its schedule, current status, and the monitors it covers — plus a computed schedule decoration: a truthful computed_status (running/recurring/scheduled/expired/invalid), a structured schedule block, the current/next occurrence, and every concrete occurrence intersecting the requested horizon. All occurrence epochs are computed in the account timezone. The metadata object reports the total count, the account timezone, the server now, and one entry per horizon day.
Authorizations:
query Parameters
| horizon_days | integer [ 1 .. 31 ] Default: 14 How many account-local days (starting today) to expand occurrences over. Clamped to 1..31. |
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "frequency_code": 0,
- "frequency": "string",
- "start": "string",
- "end": "string",
- "status": "string",
- "monitors": "string",
- "thread_id": 0,
- "computed_status": "running",
- "schedule": {
- "type": "once",
- "start_hhmm": "string",
- "end_hhmm": "string",
- "cross_midnight": true,
- "days": [
- 0
], - "weeks": [
- 0
], - "once_start": 0,
- "once_end": 0
}, - "current_occurrence": {
- "start": 0,
- "end": 0
}, - "next_occurrence": {
- "start": 0,
- "end": 0
}, - "occurrences": [
- {
- "start": 0,
- "end": 0
}
]
}
], - "metadata": {
- "total": 0,
- "timezone": {
- "code": 0,
- "name": "Europe/Vilnius",
- "offset_label": "UTC+03:00"
}, - "now": 0,
- "days": [
- {
- "date": "2026-07-08",
- "start": 0,
- "end": 0,
- "dow": 0,
- "label": "Tue, Jul 8"
}
]
}
}Create a new maintenance window
Schedules a new maintenance window during which alerts are suppressed for the selected monitors. Set type to once, daily, weekly, or monthly, and pick monitors via selection_mode (all, by_type, by_group, or individual). For a one-off window you may also publish a status page thread via status_page and status_summary. Returns the new window ID.
Authorizations:
Request Body schema: application/json
| name required | string Maintenance window name |
| type required | string Enum: "once" "daily" "weekly" "monthly" Schedule type: once, daily, weekly, monthly |
| time_start | string Start time (datetime string for once, HHMM string for recurring) |
| time_end | string End time (datetime string for once, HHMM string for recurring) |
| days | Array of strings Days (weekday numbers for weekly, day-of-month for monthly) |
| weeks | Array of strings Week numbers for weekly type |
| selection_mode | string Enum: "all" "by_type" "by_group" "individual" Monitor selection mode: all, by_type, by_group, individual |
| uptime | integer Include uptime monitors (for by_type mode) |
| ssl | integer |
| domain | integer |
| virus | integer |
| fpl | integer |
| transaction | integer |
| rum | integer |
| server | integer |
| heartbeat | integer |
| blacklist | integer |
| dns | integer |
| api | integer |
| individual_monitors | Array of strings Monitor IDs as type|id strings |
| individual_groups | Array of integers Group IDs |
| status_page | integer Create status page thread (published for both one-time and recurring windows) |
| status_summary | string Status page thread summary |
Responses
Request samples
- Payload
{- "name": "string",
- "type": "once",
- "time_start": "string",
- "time_end": "string",
- "days": [
- "string"
], - "weeks": [
- "string"
], - "selection_mode": "all",
- "uptime": 0,
- "ssl": 0,
- "domain": 0,
- "virus": 0,
- "fpl": 0,
- "transaction": 0,
- "rum": 0,
- "server": 0,
- "heartbeat": 0,
- "blacklist": 0,
- "dns": 0,
- "api": 0,
- "individual_monitors": [
- "string"
], - "individual_groups": [
- 0
], - "status_page": 0,
- "status_summary": "string"
}Response samples
- 201
{- "data": {
- "id": 0
}
}Get all monitors available for maintenance selection
Returns all of the account monitors that can be attached to a maintenance window, grouped by monitor type (uptime, ssl, domain, virus, fpl, transaction, rum, server, heartbeat, api). Use the returned IDs when building the individual_monitors selection.
Authorizations:
Responses
Response samples
- 200
{- "data": {
- "uptime": [
- {
- "id": 0,
- "name": "string"
}
], - "ssl": [
- {
- "id": 0,
- "name": "string"
}
], - "domain": [
- {
- "id": 0,
- "name": "string"
}
], - "virus": [
- {
- "id": 0,
- "name": "string"
}
], - "fpl": [
- {
- "id": 0,
- "name": "string"
}
], - "transaction": [
- {
- "id": 0,
- "name": "string"
}
], - "rum": [
- {
- "id": 0,
- "name": "string"
}
], - "server": [
- {
- "id": 0,
- "name": "string"
}
], - "heartbeat": [
- {
- "id": 0,
- "name": "string"
}
], - "blacklist": [
- {
- "id": 0,
- "name": "string"
}
], - "dns": [
- {
- "id": 0,
- "name": "string"
}
], - "api": [
- {
- "id": 0,
- "name": "string"
}
]
}
}Preview the concrete occurrences of a maintenance draft without saving it
Validates a create/update payload with the exact same schedule rules as POST/PATCH and, when valid, expands the draft into its next occurrences (up to 5, computed in the account timezone over the next 400 days) plus the first overlap with any other maintenance window. Name/title/summary problems never block a preview — they are returned as non-blocking warnings, because the preview concerns the schedule, not the announcement. Always responds 200; inspect data.valid.
Authorizations:
Request Body schema: application/json
| name | string Maintenance window name (missing/short name only produces a warning here) |
| type required | string Enum: "once" "daily" "weekly" "monthly" |
| time_start | string Start time (datetime string for once, HHMM string for recurring) |
| time_end | string End time (datetime string for once, HHMM string for recurring; next-day ends encoded as hour+24, e.g. 2630) |
| days | Array of strings |
| weeks | Array of strings |
| selection_mode | string Enum: "all" "by_type" "by_group" "individual" |
| status_page | integer |
| status_summary | string |
| exclude_id | integer Window id to exclude from the overlap scan (edit mode: the window being edited) |
Responses
Request samples
- Payload
{- "name": "string",
- "type": "once",
- "time_start": "string",
- "time_end": "string",
- "days": [
- "string"
], - "weeks": [
- "string"
], - "selection_mode": "all",
- "status_page": 0,
- "status_summary": "string",
- "exclude_id": 0
}Response samples
- 200
{- "data": {
- "valid": true,
- "error_code": "string",
- "message": "string",
- "occurrences": [
- {
- "start": 0,
- "end": 0
}
], - "overlap": {
- "id": 0,
- "name": "string",
- "at": 0
}, - "timezone": {
- "name": "Europe/Vilnius",
- "offset_label": "UTC+03:00"
}, - "warnings": [
- {
- "code": "string",
- "message": "string"
}
]
}
}Get a single maintenance window with full details
Returns the full configuration of one maintenance window, including its schedule type, start/end times, recurrence days and weeks, monitor selection, and whether the window is currently running. Returns 404 if the window does not exist or does not belong to your account.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "data": {
- "id": 0,
- "name": "string",
- "type": "string",
- "time_start": "string",
- "time_end": "string",
- "days": "string",
- "weeks": "string",
- "all_monitors": 0,
- "groups": 0,
- "uptime": 0,
- "fpl": 0,
- "ssl": 0,
- "domain": 0,
- "virus": 0,
- "transaction": 0,
- "rum": 0,
- "server": 0,
- "heartbeat": 0,
- "blacklist": 0,
- "dns": 0,
- "api": 0,
- "individual_monitors": "string",
- "individual_groups": "string",
- "selection_mode": "all",
- "individual_monitors_list": [
- "string"
], - "individual_groups_list": [
- "string"
], - "days_list": [
- 0
], - "weeks_list": [
- 0
], - "is_maintenance_running": true,
- "is_maintenance_temporary": true,
- "status_page": 0,
- "status_summary": "string"
}
}Delete a maintenance window and revert affected monitors
Permanently deletes a maintenance window and reverts any monitors currently held in maintenance by it back to active checking. Returns 404 if the window does not exist or does not belong to your account.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success"
}Update an existing maintenance window
Replaces the configuration of an existing maintenance window with the supplied schedule and monitor selection, then returns the updated window (same shape as GET /{id}, including the additive selection_mode and *_list array fields). Returns 404 if the window does not exist or does not belong to your account.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string |
| type | string Enum: "once" "daily" "weekly" "monthly" |
| time_start | string |
| time_end | string |
| days | Array of strings |
| weeks | Array of strings |
| selection_mode | string Enum: "all" "by_type" "by_group" "individual" |
| uptime | integer |
| ssl | integer |
| domain | integer |
| virus | integer |
| fpl | integer |
| transaction | integer |
| rum | integer |
| server | integer |
| heartbeat | integer |
| blacklist | integer |
| dns | integer |
| api | integer |
| individual_monitors | Array of strings |
| individual_groups | Array of integers |
| status_page | integer |
| status_summary | string |
Responses
Request samples
- Payload
{- "name": "string",
- "type": "once",
- "time_start": "string",
- "time_end": "string",
- "days": [
- "string"
], - "weeks": [
- "string"
], - "selection_mode": "all",
- "uptime": 0,
- "ssl": 0,
- "domain": 0,
- "virus": 0,
- "fpl": 0,
- "transaction": 0,
- "rum": 0,
- "server": 0,
- "heartbeat": 0,
- "blacklist": 0,
- "dns": 0,
- "api": 0,
- "individual_monitors": [
- "string"
], - "individual_groups": [
- 0
], - "status_page": 0,
- "status_summary": "string"
}Delete all expired one-time maintenance windows
Permanently deletes every one-time (type once) maintenance window of the authenticated account whose end time is in the past. Unlike deleting a single window, resolved status-page threads and their history (updates and page targeting) are PRESERVED; only unresolved announcement threads are removed together with the windows. Returns how many windows were deleted.
Authorizations:
Responses
Response samples
- 200
{- "data": {
- "deleted": 0
}
}List all status pages for the authenticated account
Returns every public status page owned by the authenticated account, each with its display name, link slug, custom domain, visibility toggles and custom CSS/JS/HTML. The response includes a metadata.total count.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "status_page_link_name": "string",
- "custom_domain_name": "string",
- "is_incident_history_on": 0,
- "is_current_incidents_on": 0,
- "is_timezone_utc": 0,
- "is_scheduled_maintenances_on": 0,
- "is_footer_link_on": 0,
- "is_past_maintenances_on": 0,
- "custom_css": "string",
- "custom_js": "string",
- "custom_html": "string"
}
], - "metadata": {
- "total": 0
}
}Create a new status page
Creates a new public status page for the account from the supplied name, URL slug, optional custom domain, visibility toggles, custom styling/logo and section structure (sections each listing the monitors they display). Returns the new page ID on success, or a 400 validation error.
Authorizations:
Request Body schema: application/json
| name required | string Status page display name |
| status_page_link_name required | string URL slug for the status page |
| custom_domain_name | string Custom CNAME domain |
| is_incident_history_on | integer Enum: 0 1 Show incident history |
| is_current_incidents_on | integer Enum: 0 1 Show current incidents |
| is_scheduled_maintenances_on | integer Enum: 0 1 Show scheduled maintenances |
| is_past_maintenances_on | integer Enum: 0 1 Show past maintenances |
| is_footer_link_on | integer Enum: 0 1 Show footer link |
| is_timezone_utc | integer Enum: 0 1 Use UTC timezone |
| custom_css | string Custom CSS |
| custom_js | string Custom JavaScript |
| custom_html | string Custom HTML |
| custom_logo | string Custom logo URL or base64 |
required | Array of objects Page sections with monitors |
Responses
Request samples
- Payload
{- "name": "string",
- "status_page_link_name": "string",
- "custom_domain_name": "string",
- "is_incident_history_on": 0,
- "is_current_incidents_on": 0,
- "is_scheduled_maintenances_on": 0,
- "is_past_maintenances_on": 0,
- "is_footer_link_on": 0,
- "is_timezone_utc": 0,
- "custom_css": "string",
- "custom_js": "string",
- "custom_html": "string",
- "custom_logo": "string",
- "structure": [
- {
- "name": "string",
- "monitors": [
- {
- "id": 0,
- "type": "string"
}
]
}
]
}Response samples
- 201
- 400
{- "data": {
- "id": 0
}
}Count the confirmed subscribers who would actually be emailed
Computes how many confirmed email subscribers would be notified for the affected monitor/incident across every owned status page that displays it, mirroring the incident notification fan-out. Only pages with subscriptions enabled (subscribe_enabled=1) contribute; pages with subscriptions off count 0 so the figure reflects who is ACTUALLY emailed. Scoped to the authenticated account.
Authorizations:
query Parameters
| status_page_id | integer Restrict to a single owned status page |
| monitor_type | string Enum: "uptime" "fpl" "transaction" Affected monitor type |
| monitor_id | integer Affected monitor (site) ID |
| incident_id | integer Affected incident ID |
Responses
Response samples
- 200
{- "total": 0,
- "pages": [
- {
- "id": 0,
- "name": "string",
- "confirmed": 0
}
]
}Get a single status page with settings and structure
Retrieves one status page by ID, including all of its settings, visibility toggles, custom styling and its section/monitor structure. The page must belong to the authenticated account; returns 404 if it does not exist or is not yours.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "status_page_link_name": "string",
- "custom_domain_name": "string",
- "is_incident_history_on": 0,
- "is_current_incidents_on": 0,
- "is_timezone_utc": 0,
- "is_scheduled_maintenances_on": 0,
- "is_footer_link_on": 0,
- "is_past_maintenances_on": 0,
- "custom_css": "string",
- "custom_js": "string",
- "custom_html": "string",
- "structure": [
- {
- "name": "string",
- "description": "string",
- "monitors": [
- {
- "id": 0,
- "type": "string"
}
]
}
], - "has_custom_logo": true,
- "custom_logo_url": "string"
}
}Delete a status page
Permanently deletes the status page identified by ID along with its configuration. The page must belong to the authenticated account. This action cannot be undone and returns a 400 error if the deletion fails.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Update an existing status page
Partially updates a status page; any omitted field keeps its current value, which is merged from the stored record before saving. A logo may be supplied either as a multipart file upload or via the custom_logo JSON field. The page must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string |
| status_page_link_name | string |
| custom_domain_name | string |
| is_incident_history_on | integer Enum: 0 1 |
| is_current_incidents_on | integer Enum: 0 1 |
| is_scheduled_maintenances_on | integer Enum: 0 1 |
| is_past_maintenances_on | integer Enum: 0 1 |
| is_footer_link_on | integer Enum: 0 1 |
| is_timezone_utc | integer Enum: 0 1 |
| custom_css | string |
| custom_js | string |
| custom_html | string |
| custom_logo | string |
Array of objects |
Responses
Request samples
- Payload
{- "name": "string",
- "status_page_link_name": "string",
- "custom_domain_name": "string",
- "is_incident_history_on": 0,
- "is_current_incidents_on": 0,
- "is_scheduled_maintenances_on": 0,
- "is_past_maintenances_on": 0,
- "is_footer_link_on": 0,
- "is_timezone_utc": 0,
- "custom_css": "string",
- "custom_js": "string",
- "custom_html": "string",
- "custom_logo": "string",
- "structure": [
- {
- "name": "string",
- "monitors": [
- {
- "id": 0,
- "type": "string"
}
]
}
]
}Response samples
- 200
- 400
{- "data": {
- "id": 0,
- "name": "string"
}
}List threads filtered by resolved status
Returns the account's status threads (incidents, scheduled maintenances and general announcements shown on status pages), filtered by the is_resolved query flag (0 = active, 1 = resolved). Each entry summarises the thread and how many status updates it has, with a metadata.total count.
Authorizations:
query Parameters
| is_resolved | integer Default: 0 Enum: 0 1 0 = active, 1 = resolved |
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "title": "string",
- "thread_type": "string",
- "summary": "string",
- "current_status": "string",
- "is_resolved": 0,
- "time_created": 0,
- "time_updated": 0,
- "status_updates_posted": 0
}
], - "metadata": {
- "total": 0
}
}Create a new thread
Opens a new status thread of the chosen type (general, incident or maintenance) with a title, summary and a first status update. Depending on the type you must reference the relevant status_page_id, incident_id or maintenance_id and may list affected monitors. Returns the new thread ID, or a 400 validation error.
Authorizations:
Request Body schema: application/json
| thread_type required | string Enum: "general" "incident" "maintenance" Thread type |
| title required | string Thread title (min 5 chars) |
| summary required | string Thread summary (min 10 chars) |
| initial_status_update required | string Initial status update message (min 5 chars) |
| status_page_id | integer Status page ID (for general type) |
| incident_id | integer Incident ID (for incident type) |
| monitor_type | string Enum: "uptime" "speed" "transaction" Monitor type (for incident type) |
| maintenance_id | integer Maintenance ID (for maintenance type) |
Array of objects Affected monitors | |
| next_update_at | integer "Next update by" ETA for the initial update (epoch seconds; 0 or omit = none) |
Responses
Request samples
- Payload
{- "thread_type": "general",
- "title": "string",
- "summary": "string",
- "initial_status_update": "string",
- "status_page_id": 0,
- "incident_id": 0,
- "monitor_type": "uptime",
- "maintenance_id": 0,
- "monitors": [
- {
- "id": 0,
- "type": "string"
}
], - "next_update_at": 0
}Response samples
- 201
- 400
{- "data": {
- "id": 0
}
}Find the existing thread for a monitor or incident
Looks up whether a status thread already exists for the given monitor (monitor_type + monitor_id) and/or incident (incident_id), so the control panel can offer to continue posting to it instead of opening a duplicate. An UNRESOLVED thread is preferred; if none is open the most recent RESOLVED thread for the same incident/monitor is returned with resolved=true so the client can offer to reopen it. Returns thread=null, resolved=false when nothing matches. Scoped to the authenticated account.
Authorizations:
query Parameters
| monitor_type | string Enum: "uptime" "fpl" "transaction" Monitor type of an incident thread |
| monitor_id | integer Monitor (site) ID |
| incident_id | integer Incident ID |
Responses
Response samples
- 200
{- "data": {
- "thread": {
- "id": 0,
- "title": "string",
- "thread_type": "string",
- "severity": "minor",
- "summary": "string",
- "current_status": "string",
- "is_resolved": 0,
- "time_created": 0,
- "time_updated": 0,
- "incident_id": 0,
- "monitor_type": "string",
- "status_page_id": 0,
- "status_updates_posted": 0
}, - "resolved": true
}
}Get a single thread with all updates
Retrieves one status thread by ID together with its full chronological list of status updates (each with status, message and timestamp). The thread must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "data": {
- "id": 0,
- "title": "string",
- "thread_type": "string",
- "summary": "string",
- "current_status": "string",
- "is_resolved": 0,
- "time_created": 0,
- "time_updated": 0,
- "updates": [
- {
- "id": 0,
- "status": "string",
- "message": "string",
- "time": 0,
- "next_update_at": 0
}
]
}
}Delete a thread and all its updates
Permanently deletes a status thread together with every status update posted to it. The thread must belong to the authenticated account. This action cannot be undone and returns a 400 error if it fails.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Update an existing thread
Updates a status thread's title, summary and the list of affected monitors. To change the thread status post a new status update instead. The thread must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| title | string Thread title (min 5 chars) |
| summary | string Thread summary (min 10 chars) |
| status_page_id | integer Status page ID (required for general threads) |
Array of objects Affected monitors |
Responses
Request samples
- Payload
{- "title": "string",
- "summary": "string",
- "status_page_id": 0,
- "monitors": [
- {
- "id": 0,
- "type": "string"
}
]
}Response samples
- 200
- 400
{- "status": "success"
}Post a status update to a thread
Appends a new status update to the thread identified by threadId, advancing its current status (for example investigating, monitoring or resolved) with an accompanying message. The parent thread must belong to the authenticated account. Returns the new update ID, or a 400 validation error.
Authorizations:
path Parameters
| threadId required | integer\d+ |
Request Body schema: application/json
| status required | string Enum: "open" "acknowledged" "investigating" "in_progress" "monitoring" "resolved" "scheduled" "completed" "update" "closed" Status progression value |
| message required | string Update message (min 10 chars) |
| next_update_at | integer "Next update by" ETA for this update (epoch seconds; 0 or omit = none) |
Responses
Request samples
- Payload
{- "status": "open",
- "message": "string",
- "next_update_at": 0
}Response samples
- 201
- 400
{- "data": {
- "id": 0
}
}Delete a single status update
Removes one status update from its thread without deleting the thread itself. The update must belong to a thread owned by the authenticated account. This action cannot be undone and returns a 400 error if it fails.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Edit an existing status update
Edits a previously posted status update, changing its status and message. You must pass the parent thread_id alongside the update ID. The update must belong to a thread owned by the authenticated account.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| thread_id required | integer Parent thread ID |
| status required | string Status value |
| message required | string Update message (min 10 chars) |
| next_update_at | integer "Next update by" ETA for this update (epoch seconds; 0 or omit = none) |
Responses
Request samples
- Payload
{- "thread_id": 0,
- "status": "string",
- "message": "string",
- "next_update_at": 0
}Response samples
- 200
- 400
{- "status": "success"
}Get presentation settings for a status page
Returns the default theme and subscribe toggle for one owned status page.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "data": {
- "default_theme": "system",
- "subscribe_enabled": 0,
- "show_name_with_logo": 0,
- "visibility": "public",
- "has_password": true,
- "access_ip_allowlist": "string",
- "password_protection_allowed": true
}
}Update presentation settings for a status page
Sets the default theme (system|light|dark) and whether the public Subscribe affordance is shown.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| default_theme | string Enum: "system" "light" "dark" |
| subscribe_enabled | integer Enum: 0 1 |
| show_name_with_logo | integer Enum: 0 1 |
| visibility | string Enum: "public" "password" "private" |
| password | string New shared password (>=10 chars) when visibility=password; omit to keep the current one |
| clear_password | boolean Remove protection (revert to public + revoke grants) |
| access_ip_allowlist | string Newline/comma-separated IPs/CIDRs required when visibility=private |
Responses
Request samples
- Payload
{- "default_theme": "system",
- "subscribe_enabled": 0,
- "show_name_with_logo": 0,
- "visibility": "public",
- "password": "string",
- "clear_password": true,
- "access_ip_allowlist": "string"
}List all scheduled reports for the authenticated account
Returns the recurring email reports configured on your account, each with its frequency (and a human-readable frequency_label), last/next send timestamps, attachment options and monitor-scope flags. One-time temporary reports are excluded; the response includes a metadata.total count and is not paginated.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "frequency": 0,
- "frequency_label": "string",
- "temporary": 0,
- "last_sent": 0,
- "next_send": 0,
- "show_all_incidents": 0,
- "show_maintenances": 0,
- "attach_pdf": 0,
- "attach_html": 0,
- "attach_csv": 0,
- "theme_id": 0,
- "all_monitors": 0,
- "all_uptime": 0,
- "all_ssl": 0,
- "all_fpl": 0,
- "all_rum": 0,
- "all_domain": 0,
- "all_virus": 0,
- "all_transaction": 0
}
], - "metadata": {
- "total": 0
}
}Create a new scheduled report
Creates a recurring email report delivered on the chosen frequency (1=Daily, 7=Weekly, 30=Monthly, 90=Quarterly, 365=Yearly). Choose monitors via the per-type all_* flags or by selecting specific monitors, set which contacts receive it, and toggle PDF/HTML/CSV attachments and incident/maintenance inclusion. Contacts are validated for ownership; invalid frequencies or contacts return a 400.
Authorizations:
Request Body schema: application/json
| name required | string Report name |
| frequency required | integer Frequency: 1=Daily, 7=Weekly, 30=Monthly, 90=Quarterly, 365=Yearly |
| theme | integer Branding theme ID |
| all_monitors | integer Include all monitors |
| all_uptime | integer |
| all_fpl | integer |
| all_rum | integer |
| all_ssl | integer |
| all_domain | integer |
| all_virus | integer |
| all_transaction | integer |
| monitors_uptime | Array of integers Specific uptime monitor IDs to include (when not using all_uptime). |
| monitors_ssl | Array of integers Specific SSL monitor IDs to include. |
| monitors_domain | Array of integers Specific domain monitor IDs to include. |
| monitors_fpl | Array of integers Specific speed (full page load) monitor IDs to include. The type key for speed monitors is "fpl". |
| monitors_transaction | Array of integers Specific transaction monitor IDs to include. |
| monitors_virus | Array of integers Specific virus monitor IDs to include. |
| monitors_rum | Array of integers Specific RUM monitor IDs to include. |
| monitors_blacklist | Array of integers Specific blacklist monitor IDs to include. There is no all_blacklist toggle — blacklist monitors are picked individually or covered by all_monitors. |
| show_all_incidents | integer |
| show_maintenances | integer |
| attach_pdf | integer |
| attach_html | integer |
| attach_csv | integer |
Array of objects |
Responses
Request samples
- Payload
{- "name": "string",
- "frequency": 7,
- "theme": 0,
- "all_monitors": 1,
- "all_uptime": 0,
- "all_fpl": 0,
- "all_rum": 0,
- "all_ssl": 0,
- "all_domain": 0,
- "all_virus": 0,
- "all_transaction": 0,
- "monitors_uptime": [
- 0
], - "monitors_ssl": [
- 0
], - "monitors_domain": [
- 0
], - "monitors_fpl": [
- 0
], - "monitors_transaction": [
- 0
], - "monitors_virus": [
- 0
], - "monitors_rum": [
- 0
], - "monitors_blacklist": [
- 0
], - "show_all_incidents": 0,
- "show_maintenances": 0,
- "attach_pdf": 0,
- "attach_html": 0,
- "attach_csv": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": 0,
- "is_user": 0,
- "is_operator": 0,
- "is_individual_contact": 0
}
]
}Response samples
- 201
- 400
{- "data": {
- "id": 0
}
}Get a single report with monitors and contacts
Returns one scheduled report including its full settings plus the expanded list of monitors it covers and the contacts (individual recipients, teams, users and operators) it is delivered to. Monitors and contacts are resolved only when they belong to the report owner. The report must belong to the authenticated account; a 404 is returned if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "frequency": 0,
- "frequency_label": "string",
- "temporary": 0,
- "last_sent": 0,
- "next_send": 0,
- "show_all_incidents": 0,
- "show_maintenances": 0,
- "attach_pdf": 0,
- "attach_html": 0,
- "attach_csv": 0,
- "theme_id": 0,
- "all_monitors": 0,
- "all_uptime": 0,
- "all_ssl": 0,
- "all_fpl": 0,
- "all_rum": 0,
- "all_domain": 0,
- "all_virus": 0,
- "all_transaction": 0,
- "monitors": [
- {
- "id": 0,
- "type": "string",
- "name": "string"
}
], - "contacts": [
- {
- "id": 0,
- "name": "string",
- "type": 0,
- "is_team": 0,
- "is_user": 0,
- "is_operator": 0,
- "is_individual_contact": 0
}
]
}
}Delete a scheduled report
Permanently deletes a scheduled report along with its monitor and contact associations so it stops being sent. The report must belong to the authenticated account; a 404 is returned if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success"
}Update an existing scheduled report
Updates the settings, monitor selection, contacts and attachment options of an existing scheduled report. The report must belong to your account (404 otherwise); supplied contacts are validated for ownership and an invalid set returns a 400.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string |
| frequency | integer |
| theme | integer |
| all_monitors | integer |
| all_uptime | integer |
| all_fpl | integer |
| all_rum | integer |
| all_ssl | integer |
| all_domain | integer |
| all_virus | integer |
| all_transaction | integer |
| monitors_uptime | Array of integers Specific uptime monitor IDs to include (when not using all_uptime). |
| monitors_ssl | Array of integers Specific SSL monitor IDs to include. |
| monitors_domain | Array of integers Specific domain monitor IDs to include. |
| monitors_fpl | Array of integers Specific speed (full page load) monitor IDs to include. The type key for speed monitors is "fpl". |
| monitors_transaction | Array of integers Specific transaction monitor IDs to include. |
| monitors_virus | Array of integers Specific virus monitor IDs to include. |
| monitors_rum | Array of integers Specific RUM monitor IDs to include. |
| monitors_blacklist | Array of integers Specific blacklist monitor IDs to include. There is no all_blacklist toggle — blacklist monitors are picked individually or covered by all_monitors. |
| show_all_incidents | integer |
| show_maintenances | integer |
| attach_pdf | integer |
| attach_html | integer |
| attach_csv | integer |
Array of objects |
Responses
Request samples
- Payload
{- "name": "string",
- "frequency": 0,
- "theme": 0,
- "all_monitors": 0,
- "all_uptime": 0,
- "all_fpl": 0,
- "all_rum": 0,
- "all_ssl": 0,
- "all_domain": 0,
- "all_virus": 0,
- "all_transaction": 0,
- "monitors_uptime": [
- 0
], - "monitors_ssl": [
- 0
], - "monitors_domain": [
- 0
], - "monitors_fpl": [
- 0
], - "monitors_transaction": [
- 0
], - "monitors_virus": [
- 0
], - "monitors_rum": [
- 0
], - "monitors_blacklist": [
- 0
], - "show_all_incidents": 0,
- "show_maintenances": 0,
- "attach_pdf": 0,
- "attach_html": 0,
- "attach_csv": 0,
- "contacts": [
- {
- "id": 0,
- "is_team": 0,
- "is_user": 0,
- "is_operator": 0,
- "is_individual_contact": 0
}
]
}Response samples
- 200
{- "data": {
- "id": 0
}
}List branding themes available for reports
Returns the branding themes (logo/colour presets) defined on your account that can be applied to report emails and exports via the theme field when creating or updating a report.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string"
}
]
}Send a report email immediately
Generates the report on demand and emails it right away to all of its email contacts, honouring the report's configured PDF/HTML/CSV attachments, then updates its last_sent timestamp. Your account email must be verified (403 otherwise), the report must belong to you (404 otherwise), and a temporary one-time report is removed after sending. Returns the number of emails actually sent.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success",
- "emails_sent": 0
}Download report as PDF
Generates the report on demand and returns it as a downloadable PDF file (application/pdf) rather than emailing it. The report must belong to your account (404 otherwise), a report with no data returns a 400, and a temporary one-time report is removed after the export.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Download report as HTML
Generates the report on demand and returns it as a downloadable standalone HTML file (text/html). The report must belong to your account (404 otherwise), a report with no data returns a 400, and a temporary one-time report is removed after the export.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Download report as CSV
Generates the report on demand and returns its data as a downloadable CSV file (text/csv) for use in spreadsheets. The report must belong to your account (404 otherwise), a report with no data returns a 400, and a temporary one-time report is removed after the export.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Generate a public link for a report
Renders the report to a static HTML page saved under /reports and returns a shareable URL that anyone with the link can view without authenticating. The report must belong to your account (404 otherwise) and a report with no data returns a 400; a temporary one-time report is removed once the page is generated.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "data": {
- "url": "string"
}
}Create and deliver a custom one-time report
Builds an ad-hoc report for an explicit date range and monitor/contact selection and delivers it in one call according to the delivery field: email it to the chosen contacts, return it as a downloadable file in the requested format (pdf, html or csv), or publish it as a public link. Email delivery requires a verified account email (403 otherwise); the temporary report is removed after delivery and the response returns its id plus a url when a public link was generated.
Authorizations:
Request Body schema: application/json
| name | string Report name (defaults to "Custom Report" when omitted) |
| date_started | integer Start date as YYYYMMDD integer |
| date_ended | integer End date as YYYYMMDD integer |
Array of objects | |
Array of objects | |
| show_all_incidents | integer |
| show_maintenances | integer |
| delivery | string Enum: "email" "download" "public_link" |
| format | string Enum: "pdf" "html" "csv" Export format for download delivery |
| all_monitors | integer |
| theme | integer |
Responses
Request samples
- Payload
{- "name": "Custom Report",
- "date_started": 20240301,
- "date_ended": 20240331,
- "monitors": [
- {
- "id": 0,
- "type": "uptime"
}
], - "contacts": [
- {
- "id": 0,
- "is_team": 0,
- "is_user": 0,
- "is_operator": 0,
- "is_individual_contact": 0
}
], - "show_all_incidents": 1,
- "show_maintenances": 0,
- "delivery": "email",
- "format": "pdf",
- "all_monitors": 0,
- "theme": 0
}Response samples
- 201
{- "data": {
- "id": 0,
- "url": "string"
}
}List all teams for the authenticated account
Returns every alerting team owned by the authenticated account, including each team members, alerting-hours window, do-not-alert days, and whether the team overrides individual members alerting settings. The metadata object reports the total count.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "alerted_for": "string",
- "alerted_for_count": 0,
- "total_monitors": 0,
- "alerting_times": "string",
- "team_members_raw": [
- 0
], - "team_members_names": "string",
- "is_alerting_settings_override": true,
- "do_not_alert_days": [
- "string"
], - "alert_hours_from": 0,
- "alert_hours_to": 0
}
], - "metadata": {
- "total": 0
}
}Create a new team
Creates an alerting team that groups members so they can be notified together as a single contact. Requires a name and at least one member, and every member must belong to your account. Optionally override members individual alerting with a custom alerting-hours window (from must be before to) and do-not-alert days. Returns the new team ID.
Authorizations:
Request Body schema: application/json
| name required | string Team name |
| members required | Array of integers Array of user/operator IDs |
| is_alerting_settings_override | boolean Override individual alerting settings |
| do_not_alert_days | Array of strings Items Enum: "mon" "tue" "wed" "thu" "fri" "sat" "sun" Days to suppress alerts |
| alert_hours_from | integer Alert window start hour (0-23) |
| alert_hours_to | integer Alert window end hour (0-23) |
Responses
Request samples
- Payload
{- "name": "string",
- "members": [
- 0
], - "is_alerting_settings_override": true,
- "do_not_alert_days": [
- "mon"
], - "alert_hours_from": 8,
- "alert_hours_to": 17
}Response samples
- 201
- 400
{- "data": {
- "id": 0
}
}Get a single team with full member details
Returns one team with its full roster of members (each flagged as the main account user or an operator) plus its alerting-override flag, alerting-hours window, and do-not-alert days. Returns 404 if the team does not exist or does not belong to your account.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "is_settings_override": 0,
- "do_not_alert_days": [
- "string"
], - "alert_hours_from": 0,
- "alert_hours_to": 0,
- "members_list": [
- {
- "id": 0,
- "name": "string",
- "is_main_user": true
}
]
}
}Delete a team
Permanently deletes a team belonging to the authenticated account; the underlying member users themselves are not deleted. Returns an error if the team could not be removed.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Update an existing team
Updates a team; only the supplied fields change while omitted fields keep their current values. The member list must remain non-empty and every member must belong to your account, and alerting-hours from must be before to. Returns 404 if the team does not exist or does not belong to your account.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string |
| members | Array of integers |
| is_alerting_settings_override | boolean |
| do_not_alert_days | Array of strings Items Enum: "mon" "tue" "wed" "thu" "fri" "sat" "sun" |
| alert_hours_from | integer |
| alert_hours_to | integer |
Responses
Request samples
- Payload
{- "name": "string",
- "members": [
- 0
], - "is_alerting_settings_override": true,
- "do_not_alert_days": [
- "mon"
], - "alert_hours_from": 0,
- "alert_hours_to": 0
}Response samples
- 200
- 400
{- "data": {
- "id": 0,
- "name": "string"
}
}Roles & permissions matrix
Returns the fixed five-role model and the permission matrix, serialized from the very map the backend enforces on every request (RoleCapabilities) — the matrix shown on /cp/roles can never disagree with enforcement. Cell values: y = full, v = partial (footnoted), n = no access, o = optional. Columns are in owner, admin, editor, viewer, billing order.
Authorizations:
Responses
Response samples
- 200
{- "data": {
- "roles": [
- {
- "key": "string",
- "label": "string",
- "description": "string"
}
], - "matrix": [
- {
- "group": "string",
- "rows": [
- {
- "label": "string",
- "cells": [
- "string"
], - "footnote": 0
}
]
}
], - "footnotes": [
- "string"
]
}
}Recent team access changes
Returns the most recent access-change events on the account (invites, role changes, member removals, invite resends) for the audit card on the team-members page. Visible to the account owner and Admin operators; the sentence to render is "{actor} {detail}".
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "action": "string",
- "actor": "string",
- "target": "string",
- "detail": "string",
- "created": 0
}
]
}List all users and operators for the authenticated account
Returns the account owner (main user) and every operator (sub-user) on the account, including each one's contact email, alerting schedule (do-not-alert days and alert-hour window) and confirmation state. The response includes a metadata.total count.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "email": "string",
- "full_name": "string",
- "alerting_times": "string",
- "do_not_alert_days": "string",
- "alert_hours_from": 0,
- "alert_hours_to": 0,
- "is_main_user": true,
- "is_confirmed": true
}
], - "metadata": {
- "total": 0
}
}Create a new operator
Adds a new operator (sub-user) to the account with a full name, email and optional alerting schedule. If no contacts are supplied an email contact is auto-created from the operator's email. Alert hours must form a valid range and the operator count is capped by the account plan; returns a 400 error on validation failure or plan limit.
Authorizations:
Request Body schema: application/json
| full_name required | string Operator full name |
| email required | string <email> Operator email address |
Array of objects Array of contacts for the operator | |
| do_not_alert_days | Array of strings Items Enum: "mon" "tue" "wed" "thu" "fri" "sat" "sun" Days to suppress alerts |
| alert_hours_from | integer Alert window start hour (0-23) |
| alert_hours_to | integer Alert window end hour (0-23) |
| time_zone | integer Timezone id (1-127) the alert window is evaluated in. 0 = inherit the account timezone. |
Responses
Request samples
- Payload
{- "full_name": "string",
- "contacts": [
- {
- "name": "string",
- "type": "email",
- "contact": "string",
- "is_new": true
}
], - "do_not_alert_days": [
- "mon"
], - "alert_hours_from": 8,
- "alert_hours_to": 17,
- "time_zone": 0
}Response samples
- 201
- 400
{- "data": {
- "id": 0
}
}Get a single user or operator
Retrieves one operator (sub-user) by ID with a whitelisted set of fields: email, full name and their alerting schedule (do-not-alert days and alert-hour window). The operator must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "data": {
- "id": 0,
- "email": "string",
- "full_name": "string",
- "do_not_alert_days": "string",
- "alert_hours_from": 0,
- "alert_hours_to": 0
}
}Delete an operator
Permanently removes an operator (sub-user) and their contacts from the account. The operator must belong to the authenticated account. This action cannot be undone and returns a 400 error if it fails.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Update an operator
Partially updates an operator's full name, email and alerting schedule; omitted fields keep their current values. The email must be valid and unique and the alert hours must form a valid range. The operator must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| full_name | string |
string <email> | |
| do_not_alert_days | Array of strings Items Enum: "mon" "tue" "wed" "thu" "fri" "sat" "sun" |
| alert_hours_from | integer |
| alert_hours_to | integer |
| time_zone | integer Timezone id (1-127) the alert window is evaluated in. 0 = inherit the account timezone. |
Responses
Request samples
- Payload
{- "full_name": "string",
- "do_not_alert_days": [
- "mon"
], - "alert_hours_from": 0,
- "alert_hours_to": 0,
- "time_zone": 0
}Response samples
- 200
- 400
{- "data": {
- "id": 0,
- "email": "string",
- "full_name": "string"
}
}Update main user alerting preferences
Updates the alerting preferences of the authenticated account owner (main user): the do-not-alert days and the daily alert-hour window during which notifications are sent. Alert hours must form a valid range or a 400 error is returned.
Authorizations:
Request Body schema: application/json
| do_not_alert_days | Array of strings Items Enum: "mon" "tue" "wed" "thu" "fri" "sat" "sun" Days to suppress alerts |
| alert_hours_from | integer Alert window start hour (0-23) |
| alert_hours_to | integer Alert window end hour (0-23) |
Responses
Request samples
- Payload
{- "do_not_alert_days": [
- "mon"
], - "alert_hours_from": 8,
- "alert_hours_to": 17
}Response samples
- 200
- 400
{- "status": "success"
}Re-send the activation email to a pending operator
Re-sends the activation (direct-access) email for an operator who has not yet activated their access, reusing the invite token issued at creation. Owner-only; returns 404 if the operator does not exist, does not belong to the account, or has already activated.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success"
}Reset a team member's two-factor authentication
Turns off two-factor authentication for one operator (sub-user) so a member who can no longer receive their own 2FA codes can sign in again and re-enrol. Owner + Admin only (team management), account-scoped, and written to the team audit log; the member is emailed that it happened. Does not affect the account owner's own 2FA. Returns 400 when the member already has 2FA off.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 400
{- "status": "success"
}Get the pending activation link for an operator
Returns the direct-access activation link for an operator who has not yet activated their access, so the owner can share it out-of-band. Owner-only; 404 when there is no pending invite.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "data": {
- "invite_link": "string"
}
}List available timezones
Returns the complete map of supported timezone IDs to their human-readable labels, intended to populate a timezone picker before setting the time_zone field on the user profile. This endpoint requires no parameters.
Authorizations:
Responses
Response samples
- 200
{- "data": { }
}Get current user profile
Returns the authenticated user's profile (name, email, timezone, custom email sender, 2FA and login-email flags) plus the account plan, trial state and per-monitor-type usage versus plan limits. When signed in as an operator the operator's own name and email are returned along with impersonation context.
Authorizations:
Responses
Response samples
- 200
- 401
{- "data": {
- "full_name": "string",
- "email": "string",
- "time_zone": 0,
- "custom_sender": "string",
- "twofa": 0,
- "login_in_emails": true,
- "plan": 0,
- "api_user": 0,
- "operator_id": 0,
- "is_operator": true,
- "is_impersonated": true,
- "is_dashboard_tour_seen": true,
- "setup_journey_enabled": true,
- "is_sumoling": true,
- "sumo_tier": 0,
- "needs_password_setup": true,
- "server_monitoring_enabled": true,
- "heartbeat_monitoring_enabled": true,
- "blacklist_monitoring_enabled": true,
- "dns_monitoring_enabled": true,
- "api_monitoring_enabled": true,
- "scope_group_ids": [
- 0
]
}, - "plan": {
- "name": "string",
- "is_legacy": true,
- "is_trial": true,
- "trial_days_left": 0,
- "is_sumoling": true,
- "usage": {
- "uptime": {
- "used": 0,
- "max": 0
}, - "ssl": {
- "used": 0,
- "max": 0
}, - "domain": {
- "used": 0,
- "max": 0
}, - "virus": {
- "used": 0,
- "max": 0
}, - "rum": {
- "used": 0,
- "max": 0
}, - "sms_credits": {
- "used": 0,
- "max": 0
}, - "users": {
- "used": 0,
- "max": 0
}
}
}
}Update user profile
Updates the authenticated user's full name, email, timezone and custom email sender. The email must be valid and unique and the custom sender must be 3-11 alphanumeric characters. For operator sessions the operator's own name and email are returned so the form is not overwritten with the owner's values; returns a 400 error on validation failure.
Authorizations:
Request Body schema: application/json
| full_name | string |
string <email> | |
| time_zone | string |
| custom_sender | string |
Responses
Request samples
- Payload
{- "full_name": "string",
- "time_zone": "string",
- "custom_sender": "string"
}Response samples
- 200
- 400
{- "data": {
- "full_name": "string",
- "email": "string",
- "time_zone": 0,
- "custom_sender": "string"
}
}List all branding themes for the authenticated account
Returns every branding theme owned by the account, each with its ID, name, a fully-qualified logo URL (relative filenames are expanded to the CDN uploads base URL), the full colour map, and live usage counts (how many scheduled reports and monitors currently reference the theme). Themes control the colours and logo applied to email reports and status pages. The response includes a metadata.total count.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 0,
- "name": "string",
- "logo": "string",
- "colors": { },
- "used_reports": 0,
- "used_monitors": 0
}
], - "metadata": {
- "total": 0
}
}Create a new branding theme
Creates a new branding theme for the account with a required name and an optional map of colour overrides; unspecified colours fall back to defaults. A logo is added separately via the logo upload endpoint. Returns the new theme ID, or a 400 error if the name is missing or creation fails.
Authorizations:
Request Body schema: application/json
| name required | string Theme name |
| colors | object Color overrides |
Responses
Request samples
- Payload
{- "name": "string",
- "colors": { }
}Response samples
- 201
- 400
{- "data": {
- "id": 0
}
}Get a single branding theme with all color data
Retrieves one branding theme by ID with its name, logo URL and the full set of colour fields (backgrounds, text, headers, links and separators). The theme must belong to the authenticated account; returns 404 if it does not exist or is not yours.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "data": {
- "id": 0,
- "name": "string",
- "logo": "string",
- "colors": { }
}
}Delete a branding theme
Permanently deletes a branding theme from the account. The theme must belong to the authenticated account; returns 404 if not found. This action cannot be undone.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
- 404
{- "status": "success"
}Update an existing branding theme
Updates a branding theme's name and colours; supplied colour fields are merged over the theme's existing colours and the current logo is preserved. Returns the full updated theme. The theme must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: application/json
| name | string |
| colors | object |
Responses
Request samples
- Payload
{- "name": "string",
- "colors": { }
}Response samples
- 200
- 400
{- "data": {
- "id": 0,
- "name": "string",
- "logo": "string",
- "colors": { }
}
}Duplicate a branding theme
Creates a copy of an existing theme — same colours, name suffixed with " (copy)", and a physical copy of the logo file (so deleting either theme later cannot orphan the other's logo). The source theme must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 201
{- "data": {
- "id": 0,
- "name": "string"
}
}Upload a logo for a branding theme
Uploads a logo image (PNG, JPG or SVG, max 2MB; SVGs are sanitized server-side) via multipart form-data and attaches it to the theme, replacing any previous logo. Returns the fully-qualified logo URL. The theme must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Request Body schema: multipart/form-data
| logo | string <binary> Logo file (PNG, JPG or SVG, max 2MB). SVGs are sanitized server-side. |
Responses
Response samples
- 200
- 400
{- "data": {
- "filename": "string"
}
}Remove the logo from a branding theme
Clears the logo from a branding theme while keeping the theme and its colours intact. The theme must belong to the authenticated account; returns 404 if not found.
Authorizations:
path Parameters
| id required | integer\d+ |
Responses
Response samples
- 200
{- "status": "success"
}List active (open) alert groups
Returns the account's OPEN alert groups (including singletons), newest first. Each GroupCard carries the members, distinct-monitor counts, acknowledgement state (with MTTA), notifications-sent tally and the storm-math counterfactual (without_grouping).
Authorizations:
Responses
Get one alert group
Returns one owned alert group as a GroupCard plus detail extras: events, ladder rows (per-step schedule/status), the notifications ledger, a policy snapshot and ack_url_enabled. Tolerates a purged escalation state (ladder renders empty).
Authorizations:
path Parameters
| id required | integer\d+ Alert group ID |
Responses
Acknowledge an alert group
Pauses the group's escalation ladder (pending steps and repeats) without closing the incident; monitoring continues and the recovery notice still goes out. Records who acknowledged and the MTTA. Operators are allowed (acknowledging is operational, unlike policy CRUD).
Authorizations:
path Parameters
| id required | integer\d+ Alert group ID |
Responses
Un-acknowledge an alert group
Clears the acknowledgement and re-arms the ladder from the current step (steps whose scheduled time passed while paused fire immediately). Invalidates every previously distributed ack link (ack_epoch bump). Operators are allowed.
Authorizations:
path Parameters
| id required | integer\d+ Alert group ID |
Responses
Update incident grouping & acknowledgement settings
Partial update — only supplied fields change. Catalogues: window_minutes 1|2|3|5|10, window_mode rolling|fixed, throttle_minutes 1|3|5|10, group_scope policy|policy+group, ack_resume_minutes 0|30|60|120 (0 = never). Settings snapshot into groups at open — changes affect only NEW groups. Operators cannot update these settings.
Authorizations:
Request Body schema: application/json
| grouping_enabled | boolean |
| group_scope | string Enum: "policy" "policy+group" |
| window_minutes | integer Enum: 1 2 3 5 10 |
| window_mode | string Enum: "rolling" "fixed" |
| throttle_minutes | integer Enum: 1 3 5 10 |
| ack_links_enabled | boolean |
| ack_resume_minutes | integer Enum: 0 30 60 120 |
Responses
Request samples
- Payload
{- "grouping_enabled": true,
- "group_scope": "policy",
- "window_minutes": 1,
- "window_mode": "rolling",
- "throttle_minutes": 1,
- "ack_links_enabled": true,
- "ack_resume_minutes": 0
}Per-run check log
Newest-first page of the append-only run log: one row per run of the step chain with its timestamp, total duration, pass/fail, the failing step + error, the pass count and the probe. Kept per plan retention, like every other monitor family's check history.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
One run in full
The summary of a single run plus every step of the chain as it was recorded: pass/fail/optional-failed/not-run, HTTP status, total and phase timings (DNS, connect, TLS, wait, receive), response size, the assertion tally and any error. Step names come from the monitor's current definition, so a step renamed since the run shows its name of today and a step deleted since is labelled by its number.
Authorizations:
path Parameters
| id required | string\d+ |
| time required | string\d+ |
Responses
Exchange credentials for an API key (mobile/native sign-in)
Verifies an account's email and password and returns a Bearer API key the native app stores securely and sends on every later /api/v2 request. If the account has two-factor authentication enabled, the first call (without a code) emails a one-time code and responds 401 code=2fa_required; the app then re-calls with that code in the code field to obtain the key. The returned api_key is the FULL secret and is revealed only once — persist it in secure device storage. This endpoint is public (no Bearer required to reach it) and is rate limited per client IP.
Authorizations:
Request Body schema: application/json
| email required | string Account email address |
| password required | string Account password |
| code | string Two-factor code (required only when the account has 2FA enabled; obtained from the email sent on the first attempt) |
| device_name | string Optional label stored on the minted key (shown in the API keys list) |
Responses
Request samples
- Payload
{- "password": "string",
- "code": "string",
- "device_name": "iPhone 15"
}Response samples
- 201
- 401
{- "data": {
- "api_key": "string",
- "user_id": 0,
- "operator_id": 0
}
}Update a blacklist monitor
Partial update: omitted fields keep their stored values. Sending is_paused pauses/resumes the monitor; it can be combined with other fields, in which case the request is validated in full before anything is written, so a 422 leaves the monitor untouched. Watch-config changes (target, dedicated IPs, tiers) apply on the next sweep, pulled forward to within a minute.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
Per-sweep check log
Newest-first page of the append-only sweep log: one row per sweep with its timestamp, fan-out duration, queried-zone count and what it found (active/informational listings, check errors). Kept per plan retention, like every other monitor family's check history.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
One sweep in full
The counters of a single sweep plus the per-list answers behind them: which zone, which watched address, what it replied and what that reply decodes to. Clean answers are not listed individually — they are the difference between the queried-zone count and the answers returned here. cells_source states where the per-list view came from: log is the sweep's own stored answers, episodes means the sweep predates per-list storage and only its listings could be rebuilt from the listing history, and unavailable means neither is left.
Authorizations:
path Parameters
| id required | string\d+ |
| time required | string\d+ |
Responses
Register a push-notification device token
Registers (or refreshes) an APNs device token so the authenticated account can receive outage alerts on that device. The token is stored as a push contact scoped to your account; calling this again with the same token is idempotent and returns the existing registration rather than creating a duplicate.
Authorizations:
Request Body schema: application/json
| token required | string APNs device token issued to the app |
| device_name | string Optional label shown for the device |
Responses
Request samples
- Payload
{- "token": "string",
- "device_name": "iPhone"
}Response samples
- 200
- 201
- 400
{- "data": {
- "id": 0
}
}Unregister a push-notification device token
Removes a previously registered APNs device token so the device stops receiving alerts; used on logout or uninstall. Supply the token in the JSON body or as a ?token= query parameter. The call is idempotent — a token that is not (or no longer) registered still returns success.
Authorizations:
query Parameters
| token | string APNs device token to remove (alternative to the JSON body) |
Request Body schema: application/json
| token | string APNs device token to remove |
Responses
Request samples
- Payload
{- "token": "string"
}Response samples
- 200
- 400
{- "status": "success"
}Update a DNS monitor
Partial update: omitted fields keep their stored values. Sending is_paused pauses/resumes the monitor, on its own or alongside other fields. Watch-config changes (zone, watched names, groups, dynamic flags) apply on the next sweep, pulled forward to within a minute; a zone change resets the baseline entirely.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
Detail-page summary
The whole detail page in one payload: decorated monitor (including baseline + nameservers), the newest episodes, the last sweep's transcript, the 24 h nameserver roll-up, incidents, the effective watch matrix and the SOA serial state.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
Acknowledge a change episode
Acknowledges an ACTIVE change episode: the new answer becomes the baseline (acknowledgment is only for changes you keep). Health findings and non-active episodes cannot be acknowledged. Body: {note?: string, max 500 chars}.
Authorizations:
path Parameters
| id required | string\d+ |
| changeId required | string\d+ |
Responses
Per-sweep check log
Newest-first page of the append-only sweep log: one row per sweep with its timestamp, slowest-nameserver answer time, query count, servers answered and the active change/health episode counts. Kept per plan retention, like every other monitor family's check history.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
One sweep in full
The counters of a single sweep plus the per-nameserver answers behind them: each authoritative server's reachability, mean answer time, SOA serial, AA bit and TCP/recursion probes, and every watched record as THAT server answered it (rcode, TTL, RRset, query time). cells_source states where the view came from: log is the sweep's own stored answers, episodes means the sweep predates per-cell storage and only the change/health episodes open at that moment could be rebuilt, and unavailable means neither is left.
Authorizations:
path Parameters
| id required | string\d+ |
| time required | string\d+ |
Responses
Create an escalation policy
Creates an escalation policy. Requires a name (1..100 chars) and 1..10 steps; step 0 fires at t+0 (its wait is forced to 0), later steps wait 1..1440 minutes after the previous step. Each step takes up to 30 recipient entries ({id, is_team, is_user, is_operator, is_individual_contact} with exactly one flag set). Repeat is optional (scope last|all, every 5..1440 minutes, 1..10 extra rounds). Operators cannot create policies.
Authorizations:
Request Body schema: application/json
| name | string |
Array of objects | |
object |
Responses
Request samples
- Payload
{- "name": "string",
- "steps": [
- {
- "wait_minutes": 0,
- "recipients": [
- {
- "id": 0,
- "is_team": 0,
- "is_user": 0,
- "is_operator": 0,
- "is_individual_contact": 0
}
]
}
], - "repeat": {
- "enabled": true,
- "scope": "last",
- "every_minutes": 0,
- "max_rounds": 0
}
}Delete an escalation policy
Deletes an owned escalation policy and its steps, detaches it from every monitor (those monitors fall back to their own all-at-once recipient list) and cancels any in-flight escalations on it. Returns the number of detached monitors. Operators cannot delete policies.
Authorizations:
path Parameters
| id required | integer\d+ Policy ID |
Responses
List monitor groups
Returns every monitor group on your account — including groups that currently hold no monitors — with the IDs the monitor endpoints' groups field expects. Group-scoped operators only see the groups their access is limited to. Results are not paginated.
Authorizations:
Responses
Response samples
- 200
{- "data": [
- {
- "id": 18,
- "name": "Production",
- "color": "#e66465",
- "monitors_count": 7
}
], - "metadata": {
- "total": 0
}
}Create a monitor group
Creates a monitor group. Requires a name (1..100 characters) and a HEX color like #e66465. Group-scoped operators cannot create groups.
Authorizations:
Request Body schema: application/json
| name required | string |
| color required | string |
Responses
Request samples
- Payload
{- "name": "Production",
- "color": "#e66465"
}Response samples
- 201
{- "data": {
- "id": 0
}
}Delete a monitor group
Deletes a monitor group and removes its monitor associations (the monitors themselves are kept). Maintenance windows covering the group stop covering it.
Authorizations:
path Parameters
| id required | integer\d+ Group ID |
Responses
Response samples
- 200
{- "status": "success"
}Update a monitor group
Partially updates a monitor group: only the supplied fields change. Groups outside a group-scoped operator's access respond 404, indistinguishable from ones that do not exist.
Authorizations:
path Parameters
| id required | integer\d+ Group ID |
Request Body schema: application/json
| name | string |
| color | string |
Responses
Request samples
- Payload
{- "name": "string",
- "color": "#5454e6"
}Response samples
- 200
{- "status": "success"
}Create a heartbeat monitor
Creates a heartbeat monitor and mints its unique ping token. The monitor arms itself on the first real ping. The optional integer timezone (a config/time_zone.php id, 1-127) is the timezone a cron schedule is evaluated in; 0, the default, uses the account timezone.
Authorizations:
Responses
Validate a cron expression and preview its next runs
Returns validity, a human-readable description and the next expected run times. Accepts an optional integer timezone (a config/time_zone.php id, 1-127) and previews the runs in that zone; 0 or absent previews them in the account timezone.
Authorizations:
Responses
Update a heartbeat monitor
Partial update: omitted fields keep their stored values. Sending is_paused pauses/resumes the monitor; resuming grants one fresh schedule window before the sweep may alert. Changing timezone recomputes the next expected ping immediately, so an armed monitor does not keep the previous zone deadline.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
Detail-page summary
Stat-strip numbers, 12h pulse ping times, per-bucket received counts and incidents in one payload. The late_pings key is always returned as an empty array — this endpoint skips the dedicated late-ping read — while the pings_late counter from the totals aggregate is unaffected.
Authorizations:
path Parameters
| id required | string\d+ |
Responses
Create a location profile
Creates a user-owned location profile. kind "static" requires a probes int[] (resolved selection must contain at least 6 probes); kind "rule" requires a rule (regions/countries); kind "all" needs neither.
Authorizations:
Request Body schema: application/json
| name | string |
| kind | string Enum: "static" "rule" "all" |
| probes | Array of integers |
| rule | object |
| color | string |
Responses
Request samples
- Payload
{- "name": "string",
- "kind": "static",
- "probes": [
- 0
], - "rule": { },
- "color": "string"
}Apply a location profile to monitors
Resolves the profile (owned by id, or a built-in via "builtin:
Authorizations:
path Parameters
| id required | string\d+|builtin:[a-z-]+ |
Request Body schema: application/json
Array of objects | |||||
Array
| |||||
Responses
Request samples
- Payload
{- "monitors": [
- {
- "id": 0,
- "type": "uptime"
}
]
}Save a monitor as a template
Stores a named snapshot of a monitor's create payload. monitor_type is the monitor family key (uptime|ssl|fpl|domain|virus|rum|heartbeat|blacklist|dns|api); settings is the JSON body the family's create endpoint accepts.
Authorizations:
Request Body schema: application/json
| name | string |
| description | string |
| monitor_type | string |
| settings | object |
| source_monitor_id | integer |
| source_monitor_name | string |
Responses
Request samples
- Payload
{- "name": "string",
- "description": "string",
- "monitor_type": "string",
- "settings": { },
- "source_monitor_id": 0,
- "source_monitor_name": "string"
}