> For the complete documentation index, see [llms.txt](https://docs.statuspal.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.statuspal.io/next/platform/api-reference/status-pages.md).

# Status Pages

Manage status pages within your organization

## GET /status\_pages

> List status pages

```json
{"openapi":"3.1.0","info":{"title":"StatusPal Public API","version":"1"},"tags":[{"name":"Status Pages","description":"Manage status pages within your organization"}],"servers":[{"url":"https://next.statuspal.io/api/v1","description":"Production"},{"url":"http://spage.test:7070/api/v1","description":"Local development"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Organization API key — issue one via the Rails console (management UI coming soon)"}},"parameters":{"Page":{"in":"query","name":"page","schema":{"type":"integer","default":1,"minimum":1}},"PerPage":{"in":"query","name":"per_page","schema":{"type":"integer","default":20,"maximum":100,"minimum":1}}},"schemas":{"StatusPage":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"subdomain":{"type":"string"},"name":{"type":"string"},"timezone":{"type":"string"},"website_url":{"type":"string","format":"uri"},"current_status":{"readOnly":true,"type":"string","enum":["operational","degraded","unavailable"],"description":"Highest-severity status derived from active notices and services"},"require_authentication":{"type":"boolean","default":false},"notification_settings":{"$ref":"#/components/schemas/NotificationSettings"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"NotificationSettings":{"type":"object","properties":{"email_enabled":{"type":"boolean","default":true},"slack_enabled":{"type":"boolean","default":false},"rss_feed_enabled":{"type":"boolean","default":true}}},"PaginationMeta":{"type":"object","properties":{"current_page":{"type":"integer"},"per_page":{"type":"integer"},"total_count":{"type":"integer"},"total_pages":{"type":"integer"}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"AccountPendingActivation":{"description":"The account is pending activation. A newly created account must be activated by an administrator before its API key can be used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/status_pages":{"get":{"summary":"List status pages","operationId":"listStatusPages","tags":["Status Pages"],"parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/PerPage"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StatusPage"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/AccountPendingActivation"}}}}}}
```

## POST /status\_pages

> Create a status page

```json
{"openapi":"3.1.0","info":{"title":"StatusPal Public API","version":"1"},"tags":[{"name":"Status Pages","description":"Manage status pages within your organization"}],"servers":[{"url":"https://next.statuspal.io/api/v1","description":"Production"},{"url":"http://spage.test:7070/api/v1","description":"Local development"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Organization API key — issue one via the Rails console (management UI coming soon)"}},"schemas":{"StatusPageCreate":{"type":"object","required":["subdomain","name","timezone","website_url"],"properties":{"subdomain":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]*[a-z0-9]$"},"name":{"type":"string"},"timezone":{"type":"string"},"website_url":{"type":"string","format":"uri"},"require_authentication":{"type":"boolean","default":false},"notification_settings":{"$ref":"#/components/schemas/NotificationSettings"},"services":{"type":"array","description":"Optional list of services to create alongside the status page. Each entry\nuses the `ServiceCreate` shape (`name`, optional `slug`, optional\n`description`). If `slug` is omitted it is derived from `name` (collisions\nauto-suffixed as `-1`, `-2`, ...). Entries with a blank `name` are skipped\nand exact-duplicate entries deduped.\n\nNote: `container_statuses` is not honored in this nested form because\ncontainers may not exist yet within the same request. To set per-container\nstatuses, create the status page first and then call `POST /services` (or\nupdate statuses via a notice update).\n","items":{"$ref":"#/components/schemas/ServiceCreate"}},"containers":{"type":"array","description":"Optional list of containers (regions). Each entry uses the `ContainerCreate`\nshape (`name`, optional `slug`). If omitted or empty, a single container\nnamed \"Default\" is auto-created so every service has somewhere to live.\nAfter creation, the cross-product of services × containers is materialized\nas ContainerService rows (status `ok`). Entries with a blank `name` are\nskipped and exact-duplicate entries deduped.\n","items":{"$ref":"#/components/schemas/ContainerCreate"}}}},"NotificationSettings":{"type":"object","properties":{"email_enabled":{"type":"boolean","default":true},"slack_enabled":{"type":"boolean","default":false},"rss_feed_enabled":{"type":"boolean","default":true}}},"ServiceCreate":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":255},"slug":{"type":"string","description":"Optional URL-safe identifier. If omitted, it is auto-generated from `name`.\nIf a non-unique value is provided, a numeric suffix is appended (e.g. `api-1`).\n"},"description":{"type":"string","nullable":true},"container_statuses":{"type":"array","items":{"$ref":"#/components/schemas/ContainerStatusEntry"},"description":"Optional per-container initial statuses. Each entry sets the status for the\nnamed container; any container on the status page that is not listed defaults\nto `ok`. Unknown `container_slug` values or out-of-range `status` values\nreturn 422.\n"}}},"ContainerStatusEntry":{"type":"object","required":["container_slug","status"],"properties":{"container_slug":{"type":"string"},"status":{"type":"string","enum":["ok","minor","major","critical","maintenance"]}}},"ContainerCreate":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":255},"slug":{"type":"string","description":"Optional URL-safe identifier. If omitted, it is auto-generated from `name`.\nIf a non-unique value is provided, a numeric suffix is appended (e.g. `eu-1`).\n"}},"description":"Service membership is managed automatically — when a container is created, every\nexisting service on the status page is assigned to it (full N×M grid). There is\nno API to assign or remove services individually; per-container service status is\nupdated via notice updates.\n"},"StatusPage":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"subdomain":{"type":"string"},"name":{"type":"string"},"timezone":{"type":"string"},"website_url":{"type":"string","format":"uri"},"current_status":{"readOnly":true,"type":"string","enum":["operational","degraded","unavailable"],"description":"Highest-severity status derived from active notices and services"},"require_authentication":{"type":"boolean","default":false},"notification_settings":{"$ref":"#/components/schemas/NotificationSettings"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"AccountPendingActivation":{"description":"The account is pending activation. A newly created account must be activated by an administrator before its API key can be used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnprocessableEntity":{"description":"Validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/status_pages":{"post":{"summary":"Create a status page","operationId":"createStatusPage","tags":["Status Pages"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusPageCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/StatusPage"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/AccountPendingActivation"},"422":{"$ref":"#/components/responses/UnprocessableEntity"}}}}}}
```

## GET /status\_pages/{subdomain}

> Get a status page

```json
{"openapi":"3.1.0","info":{"title":"StatusPal Public API","version":"1"},"tags":[{"name":"Status Pages","description":"Manage status pages within your organization"}],"servers":[{"url":"https://next.statuspal.io/api/v1","description":"Production"},{"url":"http://spage.test:7070/api/v1","description":"Local development"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Organization API key — issue one via the Rails console (management UI coming soon)"}},"schemas":{"StatusPage":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"subdomain":{"type":"string"},"name":{"type":"string"},"timezone":{"type":"string"},"website_url":{"type":"string","format":"uri"},"current_status":{"readOnly":true,"type":"string","enum":["operational","degraded","unavailable"],"description":"Highest-severity status derived from active notices and services"},"require_authentication":{"type":"boolean","default":false},"notification_settings":{"$ref":"#/components/schemas/NotificationSettings"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"NotificationSettings":{"type":"object","properties":{"email_enabled":{"type":"boolean","default":true},"slack_enabled":{"type":"boolean","default":false},"rss_feed_enabled":{"type":"boolean","default":true}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"AccountPendingActivation":{"description":"The account is pending activation. A newly created account must be activated by an administrator before its API key can be used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/status_pages/{subdomain}":{"get":{"summary":"Get a status page","operationId":"getStatusPage","tags":["Status Pages"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/StatusPage"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/AccountPendingActivation"},"404":{"$ref":"#/components/responses/NotFound"}}}}}}
```

## DELETE /status\_pages/{subdomain}

> Delete a status page

```json
{"openapi":"3.1.0","info":{"title":"StatusPal Public API","version":"1"},"tags":[{"name":"Status Pages","description":"Manage status pages within your organization"}],"servers":[{"url":"https://next.statuspal.io/api/v1","description":"Production"},{"url":"http://spage.test:7070/api/v1","description":"Local development"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Organization API key — issue one via the Rails console (management UI coming soon)"}},"responses":{"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"AccountPendingActivation":{"description":"The account is pending activation. A newly created account must be activated by an administrator before its API key can be used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}},"paths":{"/status_pages/{subdomain}":{"delete":{"summary":"Delete a status page","operationId":"deleteStatusPage","tags":["Status Pages"],"responses":{"204":{"description":"Deleted"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/AccountPendingActivation"},"404":{"$ref":"#/components/responses/NotFound"}}}}}}
```

## PATCH /status\_pages/{subdomain}

> Update a status page

```json
{"openapi":"3.1.0","info":{"title":"StatusPal Public API","version":"1"},"tags":[{"name":"Status Pages","description":"Manage status pages within your organization"}],"servers":[{"url":"https://next.statuspal.io/api/v1","description":"Production"},{"url":"http://spage.test:7070/api/v1","description":"Local development"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Organization API key — issue one via the Rails console (management UI coming soon)"}},"schemas":{"StatusPageUpdate":{"type":"object","properties":{"name":{"type":"string"},"timezone":{"type":"string"},"website_url":{"type":"string","format":"uri"},"require_authentication":{"type":"boolean"},"notification_settings":{"$ref":"#/components/schemas/NotificationSettings"}}},"NotificationSettings":{"type":"object","properties":{"email_enabled":{"type":"boolean","default":true},"slack_enabled":{"type":"boolean","default":false},"rss_feed_enabled":{"type":"boolean","default":true}}},"StatusPage":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"subdomain":{"type":"string"},"name":{"type":"string"},"timezone":{"type":"string"},"website_url":{"type":"string","format":"uri"},"current_status":{"readOnly":true,"type":"string","enum":["operational","degraded","unavailable"],"description":"Highest-severity status derived from active notices and services"},"require_authentication":{"type":"boolean","default":false},"notification_settings":{"$ref":"#/components/schemas/NotificationSettings"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"AccountPendingActivation":{"description":"The account is pending activation. A newly created account must be activated by an administrator before its API key can be used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"UnprocessableEntity":{"description":"Validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/status_pages/{subdomain}":{"patch":{"summary":"Update a status page","operationId":"updateStatusPage","tags":["Status Pages"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusPageUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/StatusPage"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/AccountPendingActivation"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"}}}}}}
```
