> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kodostatus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Status Page

> Create a new status page

<Info>
  Creating status pages is subject to your plan's page limit. Starter is limited to 1 page, Pro to 2, Team to 3, and Enterprise is unlimited.
</Info>

## Body Parameters

### Required

<ParamField body="name" type="string" required>
  Display name for the status page
</ParamField>

<ParamField body="slug" type="string" required>
  URL slug (must be unique across all organizations). Used in `/status/{slug}`
</ParamField>

<Info>
  The `slug` must contain only lowercase letters, numbers, and hyphens. For example: `my-company`, `acme-status`, `api2`.
</Info>

### Optional

<ParamField body="status_page_visibility" type="string" default="public">
  Visibility mode: `public`, `private`, `internal`. Availability depends on plan.
</ParamField>

<ParamField body="service_ids" type="string[]">
  Array of service IDs to assign to this page. Services will be displayed in the order provided.
</ParamField>

<ParamField body="primary_color" type="string">
  Brand color in `#RRGGBB` hex format. Example: `"#22c55e"`
</ParamField>

<ParamField body="secondary_color" type="string">
  Secondary brand color in `#RRGGBB` hex format. Example: `"#3b82f6"`
</ParamField>

<ParamField body="tagline" type="string">
  Short tagline displayed below the page name.
</ParamField>

<ParamField body="logo_url" type="string">
  URL to a logo image displayed in the page header.
</ParamField>

<ParamField body="favicon_url" type="string">
  URL to a favicon image for the status page.
</ParamField>

<ParamField body="theme_mode" type="string" default="dark">
  Color scheme: `light`, `dark`, or `system`.
</ParamField>

<ParamField body="status_page_theme" type="string" default="default">
  Pre-built theme: `default`, `minimal`, `corporate`, `neon`, `ocean`, `sunset`.
</ParamField>

<ParamField body="font_family" type="string" default="inter">
  Font family: `inter`, `dm-sans`, `space-grotesk`, `jetbrains-mono`, `poppins`, `merriweather`, `system`.
</ParamField>

<ParamField body="header_style" type="string" default="centered">
  Header layout: `centered` or `left-aligned`.
</ParamField>

<ParamField body="border_radius" type="string" default="rounded">
  Border radius preset: `rounded`, `sharp`, `pill`.
</ParamField>

<ParamField body="show_subscribe_form" type="boolean" default={true}>
  Whether to show the email subscribe form on the public page.
</ParamField>

<ParamField body="show_incident_history" type="boolean" default={true}>
  Whether to show the incident history timeline.
</ParamField>

<ParamField body="show_uptime_graph" type="boolean" default={true}>
  Whether to show uptime percentage graphs per service.
</ParamField>

<ParamField body="announcement_text" type="string">
  Banner announcement text displayed at the top of the page.
</ParamField>

<ParamField body="announcement_type" type="string">
  Announcement style: `info`, `warning`, `critical`, `maintenance`.
</ParamField>

<ParamField body="announcement_enabled" type="boolean" default={false}>
  Whether the announcement banner is visible.
</ParamField>

## Response

Returns the created status page object with a `201` status code.

## Common Errors

| Status | Message                                                          | Description                                    |
| ------ | ---------------------------------------------------------------- | ---------------------------------------------- |
| 400    | `Slug must contain only lowercase letters, numbers, and hyphens` | Invalid slug format                            |
| 400    | `Invalid primary_color format (use #RRGGBB)`                     | Color must be a 6-digit hex code               |
| 400    | `Invalid font_family`                                            | Font ID not in the allowed list                |
| 403    | `Plan limit reached`                                             | Your plan's status page limit has been reached |
| 409    | `This slug is already taken`                                     | Another status page already uses this slug     |

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://kodostatus.com/api/v1/status-pages" \
    -H "X-API-Key: your_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Partner Dashboard",
      "slug": "acme-partners",
      "status_page_visibility": "private",
      "primary_color": "#6366f1",
      "tagline": "Real-time system health",
      "theme_mode": "dark",
      "font_family": "dm-sans",
      "service_ids": ["svc_abc123", "svc_def456"]
    }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://kodostatus.com/api/v1/status-pages', {
    method: 'POST',
    headers: {
      'X-API-Key': process.env.KODO_API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      name: 'Partner Dashboard',
      slug: 'acme-partners',
      status_page_visibility: 'private',
      primary_color: '#6366f1',
      tagline: 'Real-time system health',
      theme_mode: 'dark',
      font_family: 'dm-sans',
      service_ids: ['svc_abc123', 'svc_def456']
    })
  });
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "page": {
      "id": "uuid",
      "name": "Partner Dashboard",
      "slug": "acme-partners",
      "status_page_visibility": "private",
      "is_default": false,
      "primary_color": "#6366f1",
      "tagline": "Real-time system health",
      "theme_mode": "dark",
      "font_family": "dm-sans",
      "created_at": "2024-06-15T12:00:00Z",
      "updated_at": "2024-06-15T12:00:00Z"
    }
  }
  ```
</ResponseExample>
