Create Status Page

POST /api/status-pages

Create Status Page

POST /api/status-pages

Creates a new status page. Requires admin role.

Request Body

FieldTypeRequiredDefaultDescription
customerIdnumberYesCustomer ID (must belong to your organization)
namestringYesDisplay name (1–120 chars). Slug auto-generated from name.
slugstringNoautoURL slug (1–120 chars, auto-normalized to lowercase-hyphens)
descriptionstringNonullDescription (max 1000 chars)
visibilitystringNopublicpublic or customer_members_only
isPublishedbooleanNotrueWhether the page is publicly visible
customDomainHostnamestringNonullCustom domain (3–253 chars). Creates a pending DNS verification record.

Example (cURL)

curl -X POST "$BASE_URL/api/status-pages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": 5,
    "name": "Production Status",
    "description": "Real-time status of our production services",
    "visibility": "public"
  }'

Response

{
  "statusPage": {
    "id": 1,
    "publicId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "organizationId": 1,
    "customerId": 5,
    "name": "Production Status",
    "slug": "production-status",
    "description": "Real-time status of our production services",
    "visibility": "public",
    "isPublished": true,
    "showRecentIncidents": false,
    "showRecentMaintenance": false,
    "customDomainId": null,
    "createdAt": "2026-01-15T10:00:00.000Z",
    "updatedAt": "2026-01-15T10:00:00.000Z"
  },
  "dns": null
}

If customDomainHostname is provided, the response includes DNS verification instructions:

{
  "dns": {
    "txtName": "_uptimeify-verify.status.example.com",
    "txtValue": "abc123-def456-ghi789"
  }
}

Common errors

  • 401 Unauthorized when not authenticated
  • 403 Forbidden when not an admin
  • 409 Conflict when slug is already taken