---
title: "Health"
description: "Liveness and readiness checks for the MachineMail API, with no authentication: /health while the process serves requests, /health/ready when storage answers."
canonical: "https://machinemail.dev/docs/reference/api/health"
---

# Health

> Liveness and readiness checks for the MachineMail API, with no authentication: /health while the process serves requests, /health/ready when storage answers.

Source: https://machinemail.dev/docs/reference/api/health

<Callout>Health checks need no authentication.</Callout>

| Method | Path            | Summary                 |
| ------ | --------------- | ----------------------- |
| `GET`  | `/health`       | [Liveness](#liveness)   |
| `GET`  | `/health/ready` | [Readiness](#readiness) |

## Liveness

```http
GET /health
```

Always `200 {"status": "ok"}` while the process serves requests. No authentication.

**Authentication:** None.

#### Response

**200** The process is up (`application/json`)

| Field | Type | | Description |
| --- | --- | --- | --- |
| `status` | `"ok"` | required |  |

#### Errors

| Status | Meaning                  |
| ------ | ------------------------ |
| `500`  | Unexpected server error. |

#### Example

```bash title="Request"
curl "https://api.machinemail.dev/health"
```

```json title="Response 200"
{
  "status": "ok"
}
```

## Readiness

```http
GET /health/ready
```

Pings the storage backend: `200` with `status: ready` (`checks.storage: true`) when it answers, `503` with `status: unavailable` when it does not. No authentication.

**Authentication:** None.

#### Response

**200** Ready (`application/json`)

| Field | Type | | Description |
| --- | --- | --- | --- |
| `status` | `"ready" \| "unavailable"` | required | ready when storage answers; the HTTP status is then 200, otherwise 503. |
| `checks` | `object` | required | The checks behind status. |

#### Errors

| Status | Meaning                           |
| ------ | --------------------------------- |
| `500`  | Unexpected server error.          |
| `503`  | Not ready: storage did not answer |

#### Example

```bash title="Request"
curl "https://api.machinemail.dev/health/ready"
```

```json title="Response 200"
{
  "status": "ready",
  "checks": {
    "storage": true
  }
}
```
