The AgileMonitor API lets scripts, deploy pipelines and AI agents set up and manage a team's uptime monitoring: monitors, the contacts they alert, their checks and incidents, and the team's plan. Everything the API can do is also in the dashboard.

| | |
|---|---|
| Base URL | `https://monitor.agilepixel.io/api/v1` |
| Authentication | `Authorization: Bearer <token>`, a team API token. See [Authentication](https://monitor.agilepixel.io/docs/api/authentication) |
| Format | JSON in and out. Send `Content-Type: application/json` with a body |
| Errors | `application/problem+json` (RFC 9457). See [Errors](https://monitor.agilepixel.io/docs/api/errors) |
| Description | [OpenAPI 3.1](https://monitor.agilepixel.io/docs/api/openapi.yaml), for client generators, Postman and agents |
| Changes | [Changelog](https://monitor.agilepixel.io/docs/api/changelog) |

## Quick start
1. An Owner or Admin of the team creates a token in **Settings, API tokens**. Copy it: it is shown once.
2. Keep it in an environment variable, never in a repository:

   ```bash
   export AGILEMONITOR_TOKEN='3|example-sanctum-token'
   ```

3. Check the plan has room, and what intervals it allows:

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

4. Create a monitor:

   ```bash
   curl -X POST https://monitor.agilepixel.io/api/v1/monitors \
     -H "Authorization: Bearer $AGILEMONITOR_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"name": "Storefront", "type": "http", "url": "https://shop.example.com", "check_interval_minutes": 5}'
   ```

   The response is the new [monitor](https://monitor.agilepixel.io/docs/api/monitors#monitor-object), with a `Location` header pointing at it. It alerts nobody until you attach [notification contacts](https://monitor.agilepixel.io/docs/api/notification-contacts).

## What's in the API
| Resource | What you can do |
|---|---|
| [Monitors](https://monitor.agilepixel.io/docs/api/monitors) | List, create, update, pause, resume and delete |
| [Checks](https://monitor.agilepixel.io/docs/api/checks) | Read a monitor's recent results |
| [Incidents](https://monitor.agilepixel.io/docs/api/incidents) | Read the team's or a monitor's incidents |
| [Notification contacts](https://monitor.agilepixel.io/docs/api/notification-contacts) | List, create, update and delete where alerts go |
| [Team](https://monitor.agilepixel.io/docs/api/team) | Read the plan, its limits and how much is used |
| [Heartbeats](https://monitor.agilepixel.io/docs/api/heartbeats) | Ping a heartbeat monitor from a scheduled job (no token) |
| [Badges](https://monitor.agilepixel.io/docs/api/badges) | Embed a status badge (no token) |

Status pages, maintenance windows, servers and sites are managed in the dashboard only. An AI assistant can use the same features through the [MCP server](https://monitor.agilepixel.io/docs/api/mcp).

## Rate limits
Each user may make 60 API requests a minute. Every token the user creates shares that allowance. Responses carry `X-RateLimit-Limit` and `X-RateLimit-Remaining`. Past the limit, requests get a [429 problem](https://monitor.agilepixel.io/docs/api/errors) with `Retry-After`: wait that many seconds before trying again.

Heartbeat pings have their own limit: 60 a minute per monitor and 300 a minute per IP address.

## Pagination
`GET /monitors` returns a page at a time: 25 monitors by default, up to 100 with `per_page`. The response has `links` (`first`, `last`, `prev`, `next`) and `meta` (`current_page`, `last_page`, `total` and so on). Follow `links.next` until it is null; filters carry over.

The other lists aren't paginated. They return a fixed number of the newest records: 100 checks, 50 incidents for a monitor, 100 incidents for the team.

## Formats
- Times are ISO 8601 in UTC with microseconds, such as `2026-10-07T09:15:00.000000Z`.
- IDs are integers. Heartbeat tokens are UUIDs.
- A single record comes back in `data`, and so does a list.
- Optional fields are always present, as null when they have no value. New fields may be added at any time; ignore the ones you don't know.
- New values may be added to enums such as `status`. Treat a value you don't know as `pending`.

## Versioning
The version is in the path: `/api/v1`. Additions such as new fields, endpoints and optional parameters arrive in v1 without notice. A breaking change is announced in the [changelog](https://monitor.agilepixel.io/docs/api/changelog) with what to do and by when. A deprecated operation keeps working until its sunset date, and its responses carry `Deprecation` and `Sunset` headers.
