> 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"}],"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"}],"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\nA page can be created with Global Services, Container Services, or a mix of both. Each entry may set `containers` to the slugs it belongs to. Omitting it includes the service in every container defined in this request; an empty array creates a Global Service.\nAny container named in a service's `containers` must be defined in the `containers` list of this same request. Naming one that is not returns 422 identifying the offending slug — for example, `container \"us\" was not defined; define it under containers or remove it from service \"api\"`.\nNote: `container_statuses` is not honored in this nested form, since containers are still being created. Set statuses after creation, or with a notice update.\n","items":{"$ref":"#/components/schemas/ServiceCreate"}},"containers":{"type":"array","description":"Optional list of containers. Each entry uses the `ContainerCreate` shape (`name`, optional `slug`).\nIf omitted or empty, the status page is created with no containers, and every service in `services` is created as a Global Service. When containers are supplied, each service in `services` is created as a Container Service included in all of them, unless that service names its own `containers`.\nEntries with a blank `name` are skipped 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","null"]},"containers":{"type":"array","items":{"type":"string"},"description":"The containers to include this service in, by slug. This is what determines the service scope: listing one or more containers creates a Container Service, while passing an explicit empty array creates a Global Service.\nOmitting the field defaults to every container on the status page, which keeps existing clients working unchanged. On a page with no containers that default is empty, so the service is Global. An unknown slug returns 422.\n"},"container_statuses":{"type":"array","items":{"$ref":"#/components/schemas/ContainerStatusEntry"},"description":"Optional initial status per container, for a Container Service.\nEvery `container_slug` must be one this service is included in — otherwise 422. Included containers not listed default to `ok`. Ignored for a Global Service; use `status` there instead.\n"},"status":{"type":"string","enum":["ok","minor","major","critical","maintenance"],"description":"Optional initial status for a Global Service. Defaults to `ok`.\nIgnored for a Container Service; use `container_statuses` there instead.\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"},"services":{"type":"array","items":{"type":"string"},"description":"Slugs of the services to include in this container.\nA container must contain at least one service — an empty array, or a default that would resolve to none, returns 422. An unknown slug returns 422.\nDefaults to every container-scoped service on the status page. Listing a Global Service converts it to a Container Service scoped to this container.\n"}},"description":"Service membership is explicit. It can be set here, or from the service side via `scope` and `containers` on the service resource.\nPer-container service status is not set here — it is updated via notice updates or the operational dashboard.\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"}],"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"}],"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"}],"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"}}}}}}
```
