Skip to main content

Documentation index for AI agents: llms.txt. Every page here is also served as markdown: add .md to its address, or request it with Accept: text/markdown.

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

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.

FieldTypeRequiredDescription
namestringYes
slugstringYes
publicbooleanNoWhether 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_EXCEEDED with limit and current)
  • 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 by order ascending. Body: object.
  • 404: Status page not found in the caller's organization.
FieldTypeRequiredDescription
monitorsarray of StatusPageMonitorListItemNo

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.

FieldTypeRequiredDescription
monitorIdstring (uuid)NoA single monitor to add
monitorIdsarray of string (uuid)NoMonitors to add in one request. Used instead of monitorId when non-empty.

Responses

  • 200: Monitors added. Body: object.
  • 400: Neither monitorId nor monitorIds provided (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 (code SEAT_PAUSED_BY_PLAN)
  • 404: Status page not found, or none of the requested monitors belong to the caller's organization (No valid monitors found)
FieldTypeRequiredDescription
messagestringNo
addedintegerNoNumber 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.

FieldTypeRequiredDescription
showGraphbooleanNoShow the uptime graph
showResponseTimebooleanNoShow response time
showSSLbooleanNoShow SSL certificate status
monitorIdsarray of string (uuid)NoOnly 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 (code SEAT_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.
FieldTypeRequiredDescription
updatedintegerNoNumber 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 ID
  • monitorId (path, string (uuid), required): Monitor ID (not the link ID)

Request body (required): object.

FieldTypeRequiredDescription
displayNamestringNoName shown on the status page. An empty string clears it so the monitor name is used.
showGraphbooleanNoShow the uptime graph
showResponseTimebooleanNoShow response time
showSSLbooleanNoShow SSL certificate status
orderintegerNoDisplay position
groupIdstring (uuid) or null (uuid)NoGroup 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 (code SEAT_PAUSED_BY_PLAN)
  • 404: Status page not found, the monitor is not on this status page (Monitor is not linked to this status page), or groupId is not a group on this page (Status page group not found)
FieldTypeRequiredDescription
statusPageMonitorStatusPageMonitorLinkNo

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.

FieldTypeRequiredDescription
domainstringYes

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 by order ascending. Body: object.
  • 404: Status page not found in the caller's organization.
FieldTypeRequiredDescription
groupsarray of StatusPageGroup and objectNo

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.

FieldTypeRequiredDescription
namestringYesGroup name (trimmed). Must be unique within the status page. Min length 1, max length 80.
tagRulestring or nullNoMonitor 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 (code SEAT_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.)
FieldTypeRequiredDescription
groupStatusPageGroupNo
syncStatusPageGroupSyncResultNo

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.

FieldTypeRequiredDescription
groupIdsarray of string (uuid)YesEvery 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 (code SEAT_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.
FieldTypeRequiredDescription
groupIdsarray 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 ID
  • groupId (path, string (uuid), required): Group ID

Request body (required): object.

FieldTypeRequiredDescription
namestringNoNew group name (trimmed). Must be unique within the status page. Min length 1, max length 80.
tagRulestring or nullNoMonitor 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 (code SEAT_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.)
FieldTypeRequiredDescription
groupStatusPageGroupNo
syncStatusPageGroupSyncResultNo

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 ID
  • groupId (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 (code SEAT_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)
FieldTypeRequiredDescription
messagestringNo

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 by order ascending. Body: object.
  • 404: Status page not found in the caller's organization.
FieldTypeRequiredDescription
serversarray of StatusPageServerListItemNo

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.

FieldTypeRequiredDescription
serverIdstring (uuid)NoA single server to add
serverIdsarray of string (uuid)NoServers to add in one request. Used instead of serverId when non-empty.

Responses

  • 200: Servers added. Body: object.
  • 400: Neither serverId nor serverIds provided (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 (code SEAT_PAUSED_BY_PLAN)
  • 404: Status page not found, or none of the requested servers belong to the caller's organization (No valid servers found)
FieldTypeRequiredDescription
messagestringNo
addedintegerNoNumber 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 ID
  • serverId (path, string (uuid), required): Server ID (not the link ID)

Request body (required): object.

FieldTypeRequiredDescription
displayNamestringNoName shown on the status page. An empty string clears it so the server name is used.
showMetricsbooleanNoShow CPU, memory and disk metrics on the status page
orderintegerNoDisplay 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 (code SEAT_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)
FieldTypeRequiredDescription
statusPageServerStatusPageServerLinkNo

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 ID
  • serverId (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 (code SEAT_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)
FieldTypeRequiredDescription
messagestringNo

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.

FieldTypeRequiredDescription
monitorIdsarray of string (uuid)YesEvery 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 (code SEAT_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.)
FieldTypeRequiredDescription
monitorIdsarray of string (uuid)No

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 ID
  • variant (query, string, optional): dark sets the dark-theme logo. Any other value or no value sets the standard logo. One of: dark.

Request body (required): object (multipart/form-data).

FieldTypeRequiredDescription
filestring (binary)YesImage 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 (code SEAT_PAUSED_BY_PLAN)
  • 404: Status page not found in the caller's organization.
FieldTypeRequiredDescription
successconstant trueNo
urlstringNoSite-relative URL of the stored 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 ID
  • variant (query, string, optional): dark clears 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 (code SEAT_PAUSED_BY_PLAN)
  • 404: Status page not found in the caller's organization.
FieldTypeRequiredDescription
successconstant trueNo

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).

FieldTypeRequiredDescription
filestring (binary)YesImage 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 (code SEAT_PAUSED_BY_PLAN)
  • 404: Status page not found in the caller's organization.
FieldTypeRequiredDescription
successconstant trueNo
urlstringNoSite-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.