---
title: "Create a status page"
method: POST
path: "/api/v1/status-pages"
tags: ["StatusPages"]
---

# Create a status page

`POST /api/v1/status-pages`

## Request

- Base URL: `https://app.lastping.dev`
- URL: `https://app.lastping.dev/api/v1/status-pages`
- Auth: API key in header `X-Api-Key`

Creates a new status page for the authenticated project.

**Free-tier limit:** at most one `public` status page per project.
Attempting to create a second public page returns 403.

`slug` is optional. Omit it to have one generated automatically. The
slug namespace is global across all LastPing accounts (it backs the
public `/status/{slug}` URL); a 409 is returned only if an explicitly
supplied slug is already taken — a generated slug cannot collide with
another account's page.

## Request body

- StatusPageCreate: Body for POST /api/v1/status-pages (create). See StatusPageUpdate for PATCH.
  - `slug` string: URL-safe slug for the status page. If supplied, must match `^[a-z0-9][a-z0-9-]{1,48}[a-z0-9]$` (3–50 chars, lowercase alphanumeric with hyphens, start/end alphanumeric). The slug namespace is **global across all LastPing accounts** (it backs the public `/status/{slug}` URL), so an explicitly supplied slug may collide with another account's and return 409. `slug` is optional on create: omitting it generates a random, collision-free slug in the same format, so this hazard only applies to callers who deliberately choose a name.
  - `title` string, required: Human-readable display title for the status page.
  - `check_ids` string[]: Ordered list of check UUIDs to display on the page. All checks must belong to the authenticated project. Duplicates are silently deduped. Omit or pass an empty array for a page with no checks.
  - `visibility` 'public' | 'private': `public` pages are accessible without authentication at `/status/{slug}`. `private` pages are visible only in the dashboard. Defaults to `private` on create if omitted.

## Response `201`

Status page created.

- StatusPage: A status page resource returned by the API.
  - `id` string, uuid: Unique status page identifier.
  - `slug` string: URL-safe slug for the page.
  - `title` string: Human-readable display title.
  - `check_ids` string[]: Ordered list of check UUIDs displayed on this page (never null; may be empty).
  - `visibility` 'public' | 'private': Page visibility.
  - `public_url` string: Full URL of the public status page (e.g. `https://app.lastping.dev/status/my-services`). Empty string when `visibility` is `private`.
  - `created_at` string, date-time: RFC 3339 UTC timestamp when the status page was created.

## Other responses

- `400`: Invalid request body, bad slug, missing title, or invalid visibility.
- `401`: Missing or invalid API key.
- `403`: Free-tier public status page limit reached (max 1 per project).
- `409`: The supplied `slug` is already taken. Since the slug namespace is global, this can be another account's page, not just your own.

---

[API](https://skmtc.dev/lastping/apis/lastping-management-api.md) · [All operations](https://skmtc.dev/lastping/apis/lastping-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lastping/apis/lastping-management-api/revisions/bbc6eda91c46?raw)
