---
title: "Update Status Page"
description: "Updates a status page. At least one field must be provided. Requires admin role."
---

`PATCH /api/status-pages/:id`

## Request Body (all optional)

| Field | Type | Description |
|-------|------|-------------|
| `customerId` | number | Move status page to another customer |
| `name` | string | Display name (1-120 chars) |
| `slug` | string | URL slug (1-120 chars, 409 on conflict) |
| `description` | string\|null | Description (max 1000 chars). `null` clears it. |
| `visibility` | string | `public` or `customer_members_only` |
| `isPublished` | boolean | Publish or unpublish the page |
| `showRecentIncidents` | boolean | Show recent incidents section |
| `showRecentMaintenance` | boolean | Show recent maintenance section |
| `designConfig` | object | Visual design settings (layout, colors, typography, …). See [Update Status Page Design](./update-status-page-design) for all fields. |
| `hiddenMonitors` | array | Monitors to hide from this status page. Each entry is `{ "type": "http"\|"dns"\|"icmp"\|"smtp"\|"ssh"\|"ftp"\|"imap_pop", "id": <monitor id> }`. Omit or send `[]` to show all monitors (the default). Monitors added later appear automatically. Maximum 500 entries. |

When present, `hiddenMonitors` replaces the stored list in full; omit the field to leave it unchanged; send `[]` to show all monitors again.

## Example (cURL)

```bash
curl -X PATCH "$BASE_URL/api/status-pages/1" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production Status - Updated",
    "isPublished": true,
    "showRecentIncidents": true,
    "hiddenMonitors": [{ "type": "http", "id": 42 }]
  }'
```

## Common errors

- `401 Unauthorized` when not authenticated
- `403 Forbidden` when not an admin
- `404 Not found` when the status page does not exist
- `409 Conflict` when slug is already taken

## Response

Returns the updated status page object. See [Error Codes](/api/error-codes-and-known-pitfalls) for error responses.
