StatusPage
Field reference and a complete example manifest for the StatusPage Kind.
StatusPage
A public (or private) status page, its components, and its scheduled maintenance windows. metadata.name is the natural key, unique per organization.
Only part of the full design is live today. Built: page-level fields, components[], and maintenanceWindows[]. Not built: component groups, per-component outage thresholds, and a manual status override; those wait on a many-to-many monitor-to-component table this Kind's schema does not have yet.
Fields
Generated from up0 schema explain StatusPage --version v1 --output json against a live deployment, annotated below (the live output carries no per-field notes for this Kind yet).
| Field | Type | Required | Default | Meaning |
|---|---|---|---|---|
slug | string | yes | - | The URL-safe identifier the public page is served under. |
description | string | no | (none) | Free text shown on the page. |
isPublic | boolean | no | true | A private page requires authentication to view. |
customDomain | string | no | (none) | Serve the page under your own domain instead of upzero's. |
branding | object | no | (none) | Arbitrary JSON: logo URL, primary color, and similar page styling. |
components | array of object | no | [] | See below. |
maintenanceWindows | array of object | no | [] | See below. |
components[]. Each entry is matched by name, individually created, updated, or removed, not the whole list replaced as one unit.
| Field | Type | Required | Meaning |
|---|---|---|---|
name | string | yes | The component's display name, unique on this page. |
description | string | no | Free text. |
monitor | string | no | One Monitor, referenced by metadata.name. A component with no monitor is valid; it just has nothing driving its status automatically. |
sortOrder | integer | no | Display order, lower first. Defaults to 0. |
maintenanceWindows[].
| Field | Type | Required | Meaning |
|---|---|---|---|
components | array of string | yes | Which components (by name) this window applies to. |
startsAt | string (ISO 8601) | yes | |
endsAt | string (ISO 8601) | yes | |
message | string | yes | Shown on the page for the duration of the window. |
Example
Created directly through the API for this page (a sync needs a connected repository, which this walk could not complete):
# up0/status-pages/public-status.yaml
apiVersion: up0.io/v1
kind: StatusPage
metadata:
name: public-status
spec:
slug: acme-status
description: Acme service status
isPublic: true
components:
- name: API
monitor: production-api
- name: Database
monitor: production-db-tcp
maintenanceWindows:
- components: [Database]
startsAt: "2026-10-01T02:00:00Z"
endsAt: "2026-10-01T04:00:00Z"
message: Scheduled database upgradeReal response, applying just the page-level fields (no components, since the real POST create endpoint accepts only what PageCreate itself defines; components/maintenanceWindows are the sync process's own additions on top, applied on a subsequent reconcile):
{"id":"f0009be0-d747-4871-8f7f-6f52e8e01537","user_id":"58185525-fe85-4925-bfd0-031f56725277","name":"1651 example","slug":"docs-1651-example","description":"Configuration-as-code docs walk (#1651)","is_public":true,"custom_domain":null,"branding":{},"overall_status":"operational","created_at":"2026-09-16T13:29:31.437920+00:00","updated_at":"2026-09-16T13:29:31.437925+00:00","components":[]}No password field
A private page's password is never declared in a manifest, the same secrets-never-in-git rule ingestion tokens follow. Set it from the console; the CLI has no status-pages command group to set it from today.