A check is one run of a monitor: when it ran, from where, how long the answer took and whether it passed. Checks are kept for as long as the plan allows: 3 days on Free, 30 on Starter, 90 on Pro, and for good on Business.

## The check object
| Field | Type | Description |
|---|---|---|
| `checked_at` | string | When the check ran, in UTC. |
| `status` | string | The latest result. One of `pending`, `up`, `down`, `degraded`. |
| `response_time_ms` | integer or null | How long the answer took, in milliseconds, or null when there was none. |
| `http_status_code` | integer or null | The HTTP status received, for HTTP checks. |
| `region` | string or null | The region the check ran from (`lon`, `nyc`, `sgp` or `tor`). |
| `error_message` | string or null | Why the check failed, or null when it passed. |

## List a monitor's recent checks
`GET /api/v1/monitors/{monitor}/checks`

Returns the newest 100 checks, newest first, within the plan's history window (3 days on Free, 30 on Starter, 90 on Pro, all on Business). Not paginated.

| | |
|---|---|
| Authentication | Bearer token. Any member of the team |
| Rate limit | 60 requests per minute per user, shared by all of that user's tokens |

### Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `monitor` | path | integer | Yes | The monitor's ID. |

### Example request

```bash
curl https://monitor.agilepixel.io/api/v1/monitors/48213/checks \
  -H "Authorization: Bearer $AGILEMONITOR_TOKEN" \
  -H "Accept: application/json"
```

### Responses

| Status | When | Body |
|---|---|---|
| `200` | The monitor's recent checks. | [Checks](#check-object), in `data` |
| `401` | There is no token, or it is invalid or revoked. | [Problem](https://monitor.agilepixel.io/docs/api/errors) |
| `403` | The token is valid but may not do this: a Viewer tried to change something, the token isn't pinned to a team, or its creator has left the team. | [Problem](https://monitor.agilepixel.io/docs/api/errors) |
| `404` | Nothing with that ID belongs to the team, or the path doesn't exist. | [Problem](https://monitor.agilepixel.io/docs/api/errors) |
| `429` | The rate limit is used up. Wait for `Retry-After` seconds. | [Problem](https://monitor.agilepixel.io/docs/api/errors) |
| `500` | Something went wrong on our side. Try again; if it persists, contact support. | [Problem](https://monitor.agilepixel.io/docs/api/errors) |

#### 200

```json
{
  "data": [
    {
      "checked_at": "2026-10-07T09:15:00.000000Z",
      "status": "up",
      "response_time_ms": 182,
      "http_status_code": 200,
      "region": "lon",
      "error_message": null
    },
    {
      "checked_at": "2026-10-07T09:10:00.000000Z",
      "status": "down",
      "response_time_ms": null,
      "http_status_code": 503,
      "region": "lon",
      "error_message": "HTTP 503 Service Unavailable"
    }
  ]
}
```

#### 401

```json
{"type": "about:blank", "title": "Unauthorized", "status": 401}
```

#### 403

```json
{"type": "about:blank", "title": "Forbidden", "status": 403}
```

#### 404

```json
{"type": "about:blank", "title": "Not Found", "status": 404}
```

#### 429

```json
{"type": "about:blank", "title": "Too Many Requests", "status": 429}
```

#### 500

```json
{"type": "about:blank", "title": "Internal Server Error", "status": 500}
```
