> For the complete documentation index, see [llms.txt](https://docs.visualsentinel.com/llms.txt)

# 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](https://docs.visualsentinel.com/guides/authentication.md). Most error responses use the [ErrorResponse](https://docs.visualsentinel.com/reference/models/error-response.md) shape, see [Errors](https://docs.visualsentinel.com/guides/errors.md) and [Rate limits](https://docs.visualsentinel.com/guides/rate-limits.md).

## Endpoints

- [List status pages](#list-status-pages): `GET /api/status-pages`
- [Create status page](#create-status-page): `POST /api/status-pages`
- [Get status page](#get-status-page): `GET /api/status-pages/{id}`
- [Update status page](#update-status-page): `PATCH /api/status-pages/{id}`
- [Delete status page](#delete-status-page): `DELETE /api/status-pages/{id}`
- [List monitors on status page](#list-status-page-monitors): `GET /api/status-pages/{id}/monitors`
- [Add monitors to status page](#add-monitor-to-status-page): `POST /api/status-pages/{id}/monitors`
- [Update display options for many status page monitors](#bulk-update-status-page-monitors): `PATCH /api/status-pages/{id}/monitors`
- [Update status page monitor display](#update-status-page-monitor): `PATCH /api/status-pages/{id}/monitors/{monitorId}`
- [Remove monitor from status page](#remove-monitor-from-status-page): `DELETE /api/status-pages/{id}/monitors/{monitorId}`
- [Set custom domain](#set-custom-domain): `POST /api/status-pages/{id}/custom-domain`
- [Verify custom domain](#verify-custom-domain): `PATCH /api/status-pages/{id}/custom-domain`
- [Remove custom domain](#remove-custom-domain): `DELETE /api/status-pages/{id}/custom-domain`
- [List status page groups](#list-status-page-groups): `GET /api/status-pages/{id}/groups`
- [Create status page group](#create-status-page-group): `POST /api/status-pages/{id}/groups`
- [Reorder status page groups](#reorder-status-page-groups): `PUT /api/status-pages/{id}/groups/reorder`
- [Update status page group](#update-status-page-group): `PATCH /api/status-pages/{id}/groups/{groupId}`
- [Delete status page group](#delete-status-page-group): `DELETE /api/status-pages/{id}/groups/{groupId}`
- [List servers on status page](#list-status-page-servers): `GET /api/status-pages/{id}/servers`
- [Add servers to status page](#add-server-to-status-page): `POST /api/status-pages/{id}/servers`
- [Update status page server display](#update-status-page-server): `PATCH /api/status-pages/{id}/servers/{serverId}`
- [Remove server from status page](#remove-server-from-status-page): `DELETE /api/status-pages/{id}/servers/{serverId}`
- [Reorder status page monitors](#reorder-status-page-monitors): `PUT /api/status-pages/{id}/monitors/reorder`
- [Upload status page logo](#upload-status-page-logo): `POST /api/status-pages/{id}/logo`
- [Remove status page logo](#delete-status-page-logo): `DELETE /api/status-pages/{id}/logo`
- [Upload status page favicon](#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_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.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `monitors` | array of [StatusPageMonitorListItem](https://docs.visualsentinel.com/reference/models/status-page-monitor-list-item.md) | 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`: 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`)

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

| 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 ID
- `monitorId` (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 (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`)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `statusPageMonitor` | [StatusPageMonitorLink](https://docs.visualsentinel.com/reference/models/status-page-monitor-link.md) | 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 by `order` ascending. Body: object.
- `404`: Status page not found in the caller's organization.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `groups` | array of [StatusPageGroup](https://docs.visualsentinel.com/reference/models/status-page-group.md) 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 (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.`)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `group` | [StatusPageGroup](https://docs.visualsentinel.com/reference/models/status-page-group.md) | No |   |
| `sync` | [StatusPageGroupSyncResult](https://docs.visualsentinel.com/reference/models/status-page-group-sync-result.md) | 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 (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.

| 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 ID
- `groupId` (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 (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.`)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `group` | [StatusPageGroup](https://docs.visualsentinel.com/reference/models/status-page-group.md) | No |   |
| `sync` | [StatusPageGroupSyncResult](https://docs.visualsentinel.com/reference/models/status-page-group-sync-result.md) | 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 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`)

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

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `servers` | array of [StatusPageServerListItem](https://docs.visualsentinel.com/reference/models/status-page-server-list-item.md) | 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`: 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`)

| 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 ID
- `serverId` (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 (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`)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `statusPageServer` | [StatusPageServerLink](https://docs.visualsentinel.com/reference/models/status-page-server-link.md) | 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 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`)

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

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

| 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 (code `SEAT_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 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.

| 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 (code `SEAT_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](https://docs.visualsentinel.com/reference/models/status-page-monitor-list-item.md), [StatusPageMonitorLink](https://docs.visualsentinel.com/reference/models/status-page-monitor-link.md), [StatusPageGroup](https://docs.visualsentinel.com/reference/models/status-page-group.md), [StatusPageGroupSyncResult](https://docs.visualsentinel.com/reference/models/status-page-group-sync-result.md), [StatusPageServerListItem](https://docs.visualsentinel.com/reference/models/status-page-server-list-item.md), [StatusPageServerLink](https://docs.visualsentinel.com/reference/models/status-page-server-link.md).

Generated from the OpenAPI 3.1 specification at [https://docs.visualsentinel.com/openapi.json](https://docs.visualsentinel.com/openapi.json), the same file the interactive reference reads.
