Monitors API
The two endpoints that exist: list monitors and retrieve a monitor. Both read-only.
The Monitors API exposes monitor configuration for the calling key's
organization. These two endpoints are the entire public API. Both require
the monitors:read scope.
| Endpoint | Scope |
|---|---|
GET /v1/monitors | monitors:read |
GET /v1/monitors/{monitor_uuid} | monitors:read |
There are no POST, PATCH or DELETE endpoints, no incident endpoints, no
status-page endpoints, and no check-result endpoints. Manage everything from
the dashboard.
Base URL
https://api.statusowl.net/v1
List monitors
GET /v1/monitors
Returns monitors in the calling key's organization, newest first.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer ≥ 1 | 1 | Page number |
per_page | integer 1–100 | 25 | Results per page |
type | string | — | http, https, tcp or ping |
is_active | true / false | — | Filter by active state |
Example
curl "https://api.statusowl.net/v1/monitors?type=http&per_page=10" \
-H "Authorization: Bearer sowl_live_xxxxxxxxxxxxxxxxxxxx"
Response
{
"data": [
{
"monitor_uuid": "9b6f6c8e-1f70-4b9b-87a0-9f3a8a8a4a01",
"name": "Marketing site",
"type": "https",
"target": "https://statusowl.net",
"port": null,
"interval": 60,
"regions": ["global"],
"maintenance_mode": false,
"is_active": true,
"last_check_at": "2026-08-05T19:14:02.118Z",
"last_status": "up",
"last_response_time_ms": 142,
"created_at": "2026-06-01T15:21:08.422Z",
"updated_at": "2026-07-12T11:03:55.901Z"
}
],
"pagination": {
"page": 1,
"per_page": 10,
"total": 1,
"total_pages": 1
}
}
Retrieve a monitor
GET /v1/monitors/{monitor_uuid}
Returns the full configuration for one monitor, including the HTTP-specific fields the list endpoint omits.
Response
{
"data": {
"monitor_uuid": "9b6f6c8e-1f70-4b9b-87a0-9f3a8a8a4a01",
"name": "Marketing site",
"type": "https",
"target": "https://statusowl.net",
"port": null,
"interval": 60,
"regions": ["global"],
"maintenance_mode": false,
"description": "Public marketing site",
"is_active": true,
"last_check_at": "2026-08-05T19:14:02.118Z",
"last_status": "up",
"last_response_time_ms": 142,
"http_method": "GET",
"expected_status_codes": [200, 301],
"follow_redirects": true,
"timeout_ms": 10000,
"created_at": "2026-06-01T15:21:08.422Z",
"updated_at": "2026-07-12T11:03:55.901Z"
}
}
A monitor that does not exist, or belongs to another organization, returns
404. The two cases are not distinguished — that would leak the existence of
foreign UUIDs.
Field reference
| Field | Type | Notes |
|---|---|---|
monitor_uuid | UUID | Stable identifier |
name | string | Human-readable label; also the label on a status page |
type | enum | http, https, tcp or ping |
target | string | URL for HTTP types; hostname or IP for tcp / ping |
port | integer / null | TCP port; null otherwise |
interval | integer | Check interval in seconds |
regions | string[] | Always exactly one entry — see Monitoring regions |
maintenance_mode | boolean | When true, the monitor is not checked |
description | string / null | Detail endpoint only |
is_active | boolean | Inactive monitors are not scheduled |
last_check_at | timestamptz / null | Most recent check |
last_status | string / null | up, down, or null before the first check |
last_response_time_ms | integer / null | Most recent latency |
http_method | enum / null | Detail only |
expected_status_codes | integer[] / null | Detail only |
follow_redirects | boolean / null | Detail only |
timeout_ms | integer / null | Detail only |
created_at | timestamptz | |
updated_at | timestamptz |
The list endpoint omits description, http_method, expected_status_codes,
follow_redirects and timeout_ms. Fetch a single monitor for those.
Errors
| Status | Cause |
|---|---|
| 400 | Invalid query or path parameter (type=foo, per_page=500, a non-UUID id) |
| 401 | Missing, malformed, revoked or expired key |
| 403 | Missing monitors:read, or the source IP is not on the key's allowlist |
| 404 | No such monitor in the calling organization |
| 429 | Rate limit or quota exceeded |
Full reference in Errors.
Not available
- Write endpoints. The
monitors:writescope exists in the catalog and no endpoint consumes it. On the roadmap. - Check results and uptime data. No time-series endpoint — no uptime
percentages, response-time series or per-day history. The
metrics:readscope is reserved for this and grants access to nothing today. - Incidents, status pages, maintenance, audit logs. No endpoints.
- Bulk operations. List with
per_page=100and iterate.
See also
- Authentication — presenting the key.
- Rate limits & quotas — headers and backoff.
- Scopes — what is enforced versus reserved.