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

# Health check

> GET /v1/health — public liveness/readiness probe; 200 when healthy, 503 when degraded.

<Info>**GET** `https://api.craftkit.dev/v1/health`</Info>

Public liveness and readiness probe. Returns `200` with `status: "ok"` when every dependency check
passes, and `503` with `status: "degraded"` when any check fails. No authentication is required.

## Authorization

None. This endpoint is public and takes no input.

## Response

`200` when healthy, `503` when degraded. The JSON body has the same shape in both cases.

<ResponseField name="status" type="string">
  `ok` when every check passed; `degraded` (with HTTP `503`) when at least one failed.
</ResponseField>

<ResponseField name="version" type="string">
  Short git commit SHA of the running deployment (first 7 chars), or `local` when not deployed on
  Vercel.
</ResponseField>

<ResponseField name="checks" type="object">
  <Expandable title="checks">
    <ResponseField name="database" type="string">
      `ok` if a `SELECT 1` against Postgres succeeded, `error` otherwise.
    </ResponseField>
  </Expandable>
</ResponseField>

## Errors

| Status | code       | Meaning                                                                                         |
| ------ | ---------- | ----------------------------------------------------------------------------------------------- |
| 503    | `degraded` | One or more dependency checks failed — inspect `checks`. Signals an outage, not a client error. |

This endpoint never returns `4xx`: it takes no input and requires no auth.

```bash cURL theme={null}
curl -i https://api.craftkit.dev/v1/health
```

```json 200 theme={null}
{
  "status": "ok",
  "version": "a1b2c3d",
  "checks": {
    "database": "ok"
  }
}
```
