> ## 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.

# API Reference

> Complete reference for the Kodo Status REST API

## Base URL

All API requests should be made to:

```
https://kodostatus.com/api/v1
```

## Authentication

Authenticate requests using the `X-API-Key` header:

```bash theme={null}
curl "https://kodostatus.com/api/v1/incidents" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json"
```

You can also use the `Authorization: Bearer` header as an alternative:

```bash theme={null}
curl "https://kodostatus.com/api/v1/incidents" \
  -H "Authorization: Bearer your_api_key_here"
```

<Card title="Get Your API Key" icon="key" href="https://kodostatus.com/dashboard/api">
  Generate an API key from your dashboard
</Card>

## Response Format

All responses are returned in JSON format:

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Example Incident",
  "status": "investigating",
  "created_at": "2024-01-15T10:30:00Z"
}
```

## Error Handling

Errors return appropriate HTTP status codes with a JSON body:

```json theme={null}
{
  "error": "Invalid API key"
}
```

Some endpoints include additional detail for validation errors:

```json theme={null}
{
  "error": "Invalid request body",
  "code": "INVALID_SCHEMA",
  "details": {
    "fieldErrors": { "slug": ["Required"] }
  }
}
```

| Status Code | Description                                              |
| ----------- | -------------------------------------------------------- |
| 200         | Success                                                  |
| 201         | Created                                                  |
| 400         | Bad Request -- invalid input or validation failure       |
| 401         | Unauthorized -- missing or invalid API key               |
| 403         | Forbidden -- plan limit reached or feature not available |
| 404         | Not Found                                                |
| 409         | Conflict -- duplicate slug, domain, or version mismatch  |
| 429         | Rate Limited                                             |
| 500         | Server Error                                             |

## Rate Limits

| Endpoint Type     | Limit               |
| ----------------- | ------------------- |
| Standard (reads)  | 100 requests/minute |
| Standard (writes) | 30 requests/minute  |
| Heartbeat         | 120 requests/minute |
| Beacon            | Unlimited           |

Rate limit headers are included in responses:

```
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 99
X-RateLimit-Reset: 1704844800
```

## API Categories

<CardGroup cols={2}>
  <Card title="Status Pages" icon="globe" href="/api-reference/status-pages/list">
    Create and configure status pages
  </Card>

  <Card title="Status Page Design" icon="palette" href="/api-reference/status-pages/design">
    Draft, validate, and publish page designs with versioning
  </Card>

  <Card title="Incidents" icon="triangle-exclamation" href="/api-reference/incidents/list">
    Create and manage incidents
  </Card>

  <Card title="Services" icon="server" href="/api-reference/services/list">
    Manage status page services
  </Card>

  <Card title="Uptime Monitors" icon="chart-line" href="/api-reference/uptime-monitors/list">
    HTTP endpoint monitoring
  </Card>

  <Card title="Heartbeat" icon="heart-pulse" href="/api-reference/heartbeat/send">
    Monitor background jobs
  </Card>

  <Card title="Notifications" icon="bell" href="/api-reference/notifications/list-channels">
    Configure alert channels
  </Card>

  <Card title="Webhooks" icon="webhook" href="/api-reference/webhooks/list">
    Receive real-time events
  </Card>
</CardGroup>
