# 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"}}}}}},"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"}}}}}}
```

## 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","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"}}}},"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"},"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"}}}},"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"},"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"}}}},"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"},"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"}}}},"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"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.statuspal.io/next/platform/api-reference/status-pages.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
