Status Pages
Publish public server health pages with incidents, maintenance windows, uptime history, and custom themes.
ServerBee provides two public status experiences:
- Default status page:
https://your-server/status, backed byGET /api/status, showing all non-hidden servers. - Configurable status pages:
https://your-server/status/{slug}, backed byGET /api/status/{slug}, showing the specific servers and options selected by an administrator.
Both are public and do not require authentication.
Default /status Page
The default status page is useful when you want a quick public overview without creating a custom page.
It shows:
- Online/total server count
- All servers where
hidden = false - Server group labels
- Online/offline status
- Live metrics for online servers: CPU, memory, disk, network speed/transfer, uptime, and load
- Public server remarks where configured
Public API:
GET /api/statusConfigurable Status Pages
Create and manage pages in Settings → Status Pages. Each page has its own slug and can be shared independently.
Page Settings
| Setting | API field | Description |
|---|---|---|
| Title | title | Public page title |
| Slug | slug | URL segment for /status/{slug} |
| Description | description | Optional introductory text |
| Servers | server_ids_json | Servers shown on this page |
| Group by server group | group_by_server_group | Organize servers by their ServerBee group |
| Show values | show_values | Show numeric uptime/status values on the public page |
| Custom CSS | custom_css | Extra CSS applied to this page |
| Enabled | enabled | Disabled pages return 404 |
| Yellow uptime threshold | uptime_yellow_threshold | Days below this percentage show as degraded |
| Red uptime threshold | uptime_red_threshold | Days below this percentage show as major outage |
| Theme | theme_ref | Preset/custom theme reference, or null to follow admin default |
The current API request fields use server_ids_json and status_page_ids_json for selected IDs. These fields accept JSON arrays in request bodies.
Public Page Data
GET /api/status/{slug}The response includes:
page-- page metadata and display optionstheme-- resolved theme variablesservers-- selected server statuses, uptime percentages, and 90-day daily uptime dataactive_incidents-- unresolved incidents linked to the pageplanned_maintenances-- active/upcoming maintenance windows linked to the pagerecent_incidents-- resolved incidents from the recent history window
Server entries include server_id, server_name, region/country, OS, group, online, uptime_percent, uptime_daily, and in_maintenance.
Uptime Timeline
Each server on a configurable status page can show a 90-day uptime timeline. Each bar represents one day:
- Green -- healthy uptime
- Yellow -- uptime below the page's yellow threshold
- Red -- uptime below the page's red threshold
- Gray -- no data
Uptime data comes from the uptime_daily table, populated by the server's background aggregation tasks. Missing dates are gap-filled so the timeline remains continuous.
Incidents
Incidents are public announcements for outages or degraded service. They can be linked to specific servers, status pages, or both.
Fields
| Field | Description |
|---|---|
title | Incident title |
status | investigating, identified, monitoring, or resolved |
severity | minor, major, or critical |
server_ids_json | Optional affected servers |
status_page_ids_json | Optional affected status pages |
An incident can have multiple updates. Adding an update records a message and moves the incident to the update's status. Setting status to resolved also sets resolved_at.
API
| Method | Path | Description |
|---|---|---|
| GET | /api/incidents | List incidents; supports status filtering |
| POST | /api/incidents | Create an incident |
| PUT | /api/incidents/{id} | Update an incident |
| DELETE | /api/incidents/{id} | Delete an incident |
| POST | /api/incidents/{id}/updates | Add an incident update |
Maintenance Windows
Maintenance windows announce planned work and also suppress notifications for associated servers while active.
Fields
| Field | Description |
|---|---|
title | Maintenance title |
description | Optional details |
start_at | UTC start time |
end_at | UTC end time; must be after start_at |
server_ids_json | Optional affected servers |
status_page_ids_json | Optional affected status pages |
active | Whether the window is enabled |
API
| Method | Path | Description |
|---|---|---|
| GET | /api/maintenances | List maintenance windows |
| POST | /api/maintenances | Create a maintenance window |
| PUT | /api/maintenances/{id} | Update a maintenance window |
| DELETE | /api/maintenances/{id} | Delete a maintenance window |
Admin API
| Method | Path | Description |
|---|---|---|
| GET | /api/status-pages | List configured status pages |
| POST | /api/status-pages | Create a status page |
| PUT | /api/status-pages/{id} | Update a status page |
| DELETE | /api/status-pages/{id} | Delete a status page |
Create example:
{
"title": "Production Status",
"slug": "production",
"description": "Public health for production services",
"server_ids_json": ["server-id-1", "server-id-2"],
"group_by_server_group": true,
"show_values": true,
"enabled": true,
"uptime_yellow_threshold": 99.9,
"uptime_red_threshold": 95
}To set a custom theme during update, pass theme_ref, for example "preset:default" or a custom theme reference. Use null to follow the admin default.