Status Pages API
Public status page management. This page lists all 26 endpoints in the Status Pages area of the Visual Sentinel REST API.
Base URL: https://visualsentinel.com. Unless an endpoint says otherwise it accepts an API key or a session cookie, see Authentication. Most error responses use the ErrorResponse shape, see Errors and Rate limits.
Endpoints
- List status pages:
GET /api/status-pages - Create status page:
POST /api/status-pages - Get status page:
GET /api/status-pages/{id} - Update status page:
PATCH /api/status-pages/{id} - Delete status page:
DELETE /api/status-pages/{id} - List monitors on status page:
GET /api/status-pages/{id}/monitors - Add monitors to status page:
POST /api/status-pages/{id}/monitors - Update display options for many status page monitors:
PATCH /api/status-pages/{id}/monitors - Update status page monitor display:
PATCH /api/status-pages/{id}/monitors/{monitorId} - Remove monitor from status page:
DELETE /api/status-pages/{id}/monitors/{monitorId} - Set custom domain:
POST /api/status-pages/{id}/custom-domain - Verify custom domain:
PATCH /api/status-pages/{id}/custom-domain - Remove custom domain:
DELETE /api/status-pages/{id}/custom-domain - List status page groups:
GET /api/status-pages/{id}/groups - Create status page group:
POST /api/status-pages/{id}/groups - Reorder status page groups:
PUT /api/status-pages/{id}/groups/reorder - Update status page group:
PATCH /api/status-pages/{id}/groups/{groupId} - Delete status page group:
DELETE /api/status-pages/{id}/groups/{groupId} - List servers on status page:
GET /api/status-pages/{id}/servers - Add servers to status page:
POST /api/status-pages/{id}/servers - Update status page server display:
PATCH /api/status-pages/{id}/servers/{serverId} - Remove server from status page:
DELETE /api/status-pages/{id}/servers/{serverId} - Reorder status page monitors:
PUT /api/status-pages/{id}/monitors/reorder - Upload status page logo:
POST /api/status-pages/{id}/logo - Remove status page logo:
DELETE /api/status-pages/{id}/logo - Upload status page favicon:
POST /api/status-pages/{id}/favicon
List status pages
GET /api/status-pages
Get all status pages for the organization.
Responses
200: List of status pages.
Create status page
POST /api/status-pages
Create a status page. Pages are public unless public is false.
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | |
slug | string | Yes | |
public | boolean | No | Whether the page is publicly visible. Default: true. |
Responses
200: Status page created. Body:{ statusPage, message }.400: Name or slug missing, or the request body is not valid JSON (Invalid JSON body) or is not a JSON object.402: Trial expired or workspace suspended.403: No workspace membership, or status page limit reached (code: LIMIT_EXCEEDEDwithlimitandcurrent)503: Workspace status could not be checked; try again.
Get status page
GET /api/status-pages/{id}
Get details of a specific status page.
Parameters
id(path, string (uuid), required)
Responses
200: Status page details.
Update status page
PATCH /api/status-pages/{id}
Update a status page's configuration.
Parameters
id(path, string (uuid), required)
Responses
200: Status page updated.400: Invalid uptime or incident history window, invalid sort mode, invalid theme, or the request body is not valid JSON (Invalid JSON body) or is not a JSON object.
Delete status page
DELETE /api/status-pages/{id}
Delete a status page.
Parameters
id(path, string (uuid), required)
Responses
200: Status page deleted.
List monitors on status page
GET /api/status-pages/{id}/monitors
List the monitors linked to a status page in display order, with each monitor's current status and its group assignment on this page.
Parameters
id(path, string (uuid), required): Status page ID
Responses
200: Monitors on the status page, ordered byorderascending. Body: object.404: Status page not found in the caller's organization.
| Field | Type | Required | Description |
|---|---|---|---|
monitors | array of StatusPageMonitorListItem | No |
Add monitors to status page
POST /api/status-pages/{id}/monitors
Add one monitor (monitorId) or several (monitorIds, which takes precedence when non-empty) to the end of the status page's monitor order. New links start ungrouped with default display options; use the update endpoint to set a display name, group or order. Monitors outside the caller's organization are ignored and monitors already on the page are skipped. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page ID
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
monitorId | string (uuid) | No | A single monitor to add |
monitorIds | array of string (uuid) | No | Monitors to add in one request. Used instead of monitorId when non-empty. |
Responses
200: Monitors added. Body: object.400: NeithermonitorIdnormonitorIdsprovided (Monitor ID is required). Also returned when the request body is not valid JSON.403: Caller does not have the Owner, Admin or Developer role, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found, or none of the requested monitors belong to the caller's organization (No valid monitors found)
| Field | Type | Required | Description |
|---|---|---|---|
message | string | No | |
added | integer | No | Number of requested monitors found in the organization, including any that were already on the page and therefore skipped |
Update display options for many status page monitors
PATCH /api/status-pages/{id}/monitors
Set which details are shown (uptime graph, response time, SSL certificate) for every monitor linked to the status page in one request, or only for the monitors listed in monitorIds. Options left out are not changed. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page ID
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
showGraph | boolean | No | Show the uptime graph |
showResponseTime | boolean | No | Show response time |
showSSL | boolean | No | Show SSL certificate status |
monitorIds | array of string (uuid) | No | Only change these linked monitors (monitor IDs, not link IDs). Leave out to change every monitor on the page. IDs not linked to this page are ignored. Min items 1, max items 2000. |
Responses
200: Display options updated. Body: object.400: No display option given, a value is not a boolean, an unknown field was sent (Invalid display options), or the request body is not valid JSON.403: Caller does not have the Owner, Admin or Developer role, the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN), or the CSRF token is missing or invalid for a cookie session.404: Status page not found in the caller's organization.
| Field | Type | Required | Description |
|---|---|---|---|
updated | integer | No | Number of linked monitors updated |
Update status page monitor display
PATCH /api/status-pages/{id}/monitors/{monitorId}
Change how a linked monitor appears on the status page: display name, which details are shown, position and group. Fields with the wrong type are ignored. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page IDmonitorId(path, string (uuid), required): Monitor ID (not the link ID)
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | No | Name shown on the status page. An empty string clears it so the monitor name is used. |
showGraph | boolean | No | Show the uptime graph |
showResponseTime | boolean | No | Show response time |
showSSL | boolean | No | Show SSL certificate status |
order | integer | No | Display position |
groupId | string (uuid) or null (uuid) | No | Group on this status page to place the monitor in, or null to ungroup it. A group with a tag rule releases monitors that do not carry its tag on its next sync. |
Responses
200: Display options updated. Body: object.400: Unknown group for this status page, or the request body is not valid JSON (Invalid JSON body) or is not a JSON object.403: Caller does not have the Owner, Admin or Developer role, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found, the monitor is not on this status page (Monitor is not linked to this status page), orgroupIdis not a group on this page (Status page group not found)
| Field | Type | Required | Description |
|---|---|---|---|
statusPageMonitor | StatusPageMonitorLink | No |
Remove monitor from status page
DELETE /api/status-pages/{id}/monitors/{monitorId}
Remove a monitor from a status page.
Parameters
id(path, string (uuid), required)monitorId(path, string (uuid), required)
Responses
200: Monitor removed.
Set custom domain
POST /api/status-pages/{id}/custom-domain
Configure a custom domain for a status page. The response includes the CNAME and TXT ownership records to publish. Requires an owner or admin role.
Parameters
id(path, string (uuid), required)
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
domain | string | Yes |
Responses
200: Custom domain configured.400: Domain missing or invalid, or the request body is not valid JSON (Invalid JSON body) or is not a JSON object.
Verify custom domain
PATCH /api/status-pages/{id}/custom-domain
Verify DNS configuration for a custom domain. A domain that is not verified yet needs a CNAME record pointing to status.visualsentinel.com and a TXT record named _visualsentinel.<domain> with the value visualsentinel-verify=<verifyToken>. Already verified domains are not re-checked. Requires an owner or admin role.
Parameters
id(path, string (uuid), required)
Responses
200: Domain verification result.
Remove custom domain
DELETE /api/status-pages/{id}/custom-domain
Remove the custom domain from a status page.
Parameters
id(path, string (uuid), required)
Responses
200: Custom domain removed.
List status page groups
GET /api/status-pages/{id}/groups
List the component groups on a status page in display order, each with the number of monitors assigned to it.
Parameters
id(path, string (uuid), required): Status page ID
Responses
200: Groups on the status page, ordered byorderascending. Body: object.404: Status page not found in the caller's organization.
| Field | Type | Required | Description |
|---|---|---|---|
groups | array of StatusPageGroup and object | No |
Create status page group
POST /api/status-pages/{id}/groups
Create a component group at the end of the status page's group order. When tagRule is set the group auto-syncs: every monitor in the organization carrying that tag is linked to the page (if not already) and placed in the group. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page ID
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Group name (trimmed). Must be unique within the status page. Min length 1, max length 80. |
tagRule | string or null | No | Monitor tag that drives automatic group membership (trimmed). Empty or null creates a manual group with auto-sync off. Max length 100. |
Responses
201: Group created and, when it has a tag rule, synced. Body: object.400: Invalid name or tag rule (Enter a valid group name and tag). Also returned when the request body is not valid JSON.403: Caller does not have the Owner, Admin or Developer role, the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN), or the CSRF token is missing or invalid for a cookie session.404: Status page not found in the caller's organization.409: A group with this name already exists on this status page (A group with this name already exists on this status page.)
| Field | Type | Required | Description |
|---|---|---|---|
group | StatusPageGroup | No | |
sync | StatusPageGroupSyncResult | No |
Reorder status page groups
PUT /api/status-pages/{id}/groups/reorder
Replace the complete group order in one step. groupIds must list every group currently on the status page exactly once; the first ID gets order 1. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page ID
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
groupIds | array of string (uuid) | Yes | Every group ID on the status page, in the new display order Max items 200, unique items. |
Responses
200: Order saved. Body: object.400: Invalid body or duplicate IDs (Invalid group order). Also returned when the request body is not valid JSON.403: Caller does not have the Owner, Admin or Developer role, the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN), or the CSRF token is missing or invalid for a cookie session.409: The submitted IDs do not match the page's current groups (The groups changed. Refresh before reordering.). Also returned when the status page does not exist in the caller's organization and the list is not empty.
| Field | Type | Required | Description |
|---|---|---|---|
groupIds | array of string (uuid) | No |
Update status page group
PATCH /api/status-pages/{id}/groups/{groupId}
Rename a group or change its tag rule, then re-run the group's tag sync. Sending tagRule turns auto-sync on when the value is non-empty and off when it is empty or null; omitting it leaves auto-sync unchanged. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page IDgroupId(path, string (uuid), required): Group ID
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | New group name (trimmed). Must be unique within the status page. Min length 1, max length 80. |
tagRule | string or null | No | Monitor tag that drives automatic group membership (trimmed). Empty or null turns auto-sync off. Max length 100. |
Responses
200: Group updated and synced. Body: object.400: Invalid body (Invalid group settings). Also returned when the request body is not valid JSON.403: Caller does not have the Owner, Admin or Developer role, the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN), or the CSRF token is missing or invalid for a cookie session.404: Group not found on this status page in the caller's organization (Status page group not found)409: A group with this name already exists on this status page (A group with this name already exists on this status page.)
| Field | Type | Required | Description |
|---|---|---|---|
group | StatusPageGroup | No | |
sync | StatusPageGroupSyncResult | No |
Delete status page group
DELETE /api/status-pages/{id}/groups/{groupId}
Delete a group. Monitors in the group stay on the status page and become ungrouped. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page IDgroupId(path, string (uuid), required): Group ID
Responses
200: Group deleted. Body: object.403: Caller does not have the Owner, Admin or Developer role, the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN), or the CSRF token is missing or invalid for a cookie session.404: Group not found on this status page in the caller's organization (Status page group not found)
| Field | Type | Required | Description |
|---|---|---|---|
message | string | No |
List servers on status page
GET /api/status-pages/{id}/servers
List the servers shown on a status page in display order, with their current status, latest metrics and per-page display options.
Parameters
id(path, string (uuid), required): Status page ID
Responses
200: Servers on the status page, ordered byorderascending. Body: object.404: Status page not found in the caller's organization.
| Field | Type | Required | Description |
|---|---|---|---|
servers | array of StatusPageServerListItem | No |
Add servers to status page
POST /api/status-pages/{id}/servers
Add one server (serverId) or several (serverIds, which takes precedence when non-empty) to the end of the status page's server order. Servers outside the caller's organization are ignored and servers already on the page are skipped. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page ID
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
serverId | string (uuid) | No | A single server to add |
serverIds | array of string (uuid) | No | Servers to add in one request. Used instead of serverId when non-empty. |
Responses
200: Servers added. Body: object.400: NeitherserverIdnorserverIdsprovided (Server ID is required). Also returned when the request body is not valid JSON.403: Caller does not have the Owner, Admin or Developer role, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found, or none of the requested servers belong to the caller's organization (No valid servers found)
| Field | Type | Required | Description |
|---|---|---|---|
message | string | No | |
added | integer | No | Number of requested servers found in the organization, including any that were already on the page and therefore skipped |
Update status page server display
PATCH /api/status-pages/{id}/servers/{serverId}
Change how a linked server appears on the status page. Fields with the wrong type are ignored. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page IDserverId(path, string (uuid), required): Server ID (not the link ID)
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | No | Name shown on the status page. An empty string clears it so the server name is used. |
showMetrics | boolean | No | Show CPU, memory and disk metrics on the status page |
order | integer | No | Display position |
Responses
200: Display options updated. Body: object.400: The request body is not valid JSON (Invalid JSON body) or is not a JSON object.403: Caller does not have the Owner, Admin or Developer role, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found, or the server is not on this status page (Server is not linked to this status page)
| Field | Type | Required | Description |
|---|---|---|---|
statusPageServer | StatusPageServerLink | No |
Remove server from status page
DELETE /api/status-pages/{id}/servers/{serverId}
Remove a server from the status page and renumber the remaining servers from 1. The server itself is not deleted. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page IDserverId(path, string (uuid), required): Server ID (not the link ID)
Responses
200: Server removed. Body: object.403: Caller does not have the Owner, Admin or Developer role, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found, or the server is not on this status page (Server is not linked to this status page)
| Field | Type | Required | Description |
|---|---|---|---|
message | string | No |
Reorder status page monitors
PUT /api/status-pages/{id}/monitors/reorder
Replace the complete monitor order in one step. monitorIds must list every monitor currently linked to the status page exactly once; the first ID gets order 1. Group assignments are not changed. Requires the Owner, Admin or Developer role.
Parameters
id(path, string (uuid), required): Status page ID
Request body (required): object.
| Field | Type | Required | Description |
|---|---|---|---|
monitorIds | array of string (uuid) | Yes | Every monitor ID linked to the status page (monitor IDs, not link IDs), in the new display order Min items 1, max items 2000, unique items. |
Responses
200: Order saved. Body: object.400: Invalid body (Invalid monitor order) or duplicate IDs (Monitor order contains duplicates). Also returned when the request body is not valid JSON.403: Caller does not have the Owner, Admin or Developer role, the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN), or the CSRF token is missing or invalid for a cookie session.404: Status page not found in the caller's organization.409: The submitted IDs do not match the monitors currently linked to the page (The linked monitors changed. Refresh before reordering.)
| Field | Type | Required | Description |
|---|---|---|---|
monitorIds | array of string (uuid) | No |
Upload status page logo
POST /api/status-pages/{id}/logo
Upload the status page logo, or the dark-theme logo with ?variant=dark, replacing the current one. Accepts PNG, JPEG, WebP, GIF or SVG up to 2 MB; SVG files are sanitized and must be well-formed. Requires the white-label feature (Agency plan) and the Owner or Admin role.
Parameters
id(path, string (uuid), required): Status page IDvariant(query, string, optional):darksets the dark-theme logo. Any other value or no value sets the standard logo. One of:dark.
Request body (required): object (multipart/form-data).
| Field | Type | Required | Description |
|---|---|---|---|
file | string (binary) | Yes | Image file: PNG, JPEG, WebP, GIF or SVG, up to 2 MB. The file content must match its declared type. |
Responses
200: Logo uploaded. Body: object.400: No file provided, unsupported type or size (PNG, JPG, WebP, GIF or SVG, up to 2 MB.), content that does not match its type, or an SVG that fails validation.403: The organization's plan does not include white-label branding (Status page logos require the Agency plan.), the caller is not an Owner or Admin, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found in the caller's organization.
| Field | Type | Required | Description |
|---|---|---|---|
success | constant true | No | |
url | string | No | Site-relative URL of the stored logo |
Remove status page logo
DELETE /api/status-pages/{id}/logo
Clear the status page logo, or the dark-theme logo with ?variant=dark. Requires the white-label feature (Agency plan) and the Owner or Admin role.
Parameters
id(path, string (uuid), required): Status page IDvariant(query, string, optional):darkclears the dark-theme logo. Any other value or no value clears the standard logo. One of:dark.
Responses
200: Logo removed. Body: object.403: The organization's plan does not include white-label branding (Status page logos require the Agency plan.), the caller is not an Owner or Admin, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found in the caller's organization.
| Field | Type | Required | Description |
|---|---|---|---|
success | constant true | No |
Upload status page favicon
POST /api/status-pages/{id}/favicon
Upload the status page favicon, replacing the current one. Accepts PNG, JPEG, WebP or GIF up to 2 MB (SVG and ICO are not accepted). To clear the favicon, update the status page with favicon: null. Requires the white-label feature (Agency plan) and the Owner or Admin role.
Parameters
id(path, string (uuid), required): Status page ID
Request body (required): object (multipart/form-data).
| Field | Type | Required | Description |
|---|---|---|---|
file | string (binary) | Yes | Image file: PNG, JPEG, WebP or GIF, up to 2 MB. The file content must match its declared type. |
Responses
200: Favicon uploaded. Body: object.400: No file provided, unsupported type or size (File must be a PNG, JPEG, WebP, or GIF under 2MB.), or content that does not match its type (File content does not match its type.)403: The organization's plan does not include white-label branding (Status page logos require the Agency plan.), the caller is not an Owner or Admin, or the seat is paused by the plan (codeSEAT_PAUSED_BY_PLAN)404: Status page not found in the caller's organization.
| Field | Type | Required | Description |
|---|---|---|---|
success | constant true | No | |
url | string | No | Site-relative URL of the stored favicon |
Data models
Request and response shapes these endpoints use: StatusPageMonitorListItem, StatusPageMonitorLink, StatusPageGroup, StatusPageGroupSyncResult, StatusPageServerListItem, StatusPageServerLink.
Generated from the OpenAPI 3.1 specification at https://docs.visualsentinel.com/openapi.json, the same file the interactive reference reads.