Monitors.
CRUD for uptime monitors. A monitor is one check against one URL or endpoint, running on a configurable interval from one or more probe regions.
The Monitor object
{
"id": "mon_9Fq2K3hC",
"name": "homepage",
"url": "https://example.com",
"method": "GET",
"interval_seconds": 60,
"regions": ["fra", "hel", "ams"],
"quorum": 2,
"assertions": [
{ "type": "status", "operator": "eq", "value": 200 },
{ "type": "latency_p95", "operator": "lt", "value_ms": 900 }
],
"headers": { "X-Health-Check": "brily" },
"alert_policy": {
"severity": "p1",
"slack_channel": "#ops-alerts",
"escalate_after_minutes": 10
},
"enabled": true,
"project_id": "proj_7KfD1",
"created_at": "2026-04-18T09:12:14Z"
}Assertion types
status— HTTP status code. Operators:eq,neq,in,not_in.body_contains— substring in response body. Case sensitive by default; add"case_insensitive": true.header— named response header value. Requiresnameplusoperatorandvalue.json_path— JSONPath extraction. Requirespathplusoperatorandvalue.latency_p95— p95 latency over the lastwindow_minutes(default 10). Usevalue_ms.
List monitors
/v0/monitorsList monitors in the scoped projectQuery params:
enabled— filter bytrue/falsecursor,limit— pagination
curl https://api.brily.app/v0/monitors?limit=25 \
-H "Authorization: Bearer $BRILY_TOKEN"Create a monitor
/v0/monitorsCreate a monitorcurl -X POST https://api.brily.app/v0/monitors \
-H "Authorization: Bearer $BRILY_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
-d '{
"name": "api-health",
"url": "https://api.example.com/health",
"method": "GET",
"interval_seconds": 60,
"regions": ["fra", "hel", "ams"],
"quorum": 2,
"assertions": [
{ "type": "status", "operator": "eq", "value": 200 },
{ "type": "json_path", "path": "$.status", "operator": "eq", "value": "ok" }
]
}'Returns 201 Created with the full Monitor object and an X-Request-Id header.
Retrieve a monitor
/v0/monitors/{id}Update a monitor
/v0/monitors/{id}Partial updateOnly send fields you want to change. Arrays (assertions, regions) replace, they don't merge — fetch-modify-send is the safe pattern.
Delete a monitor
/v0/monitors/{id}Returns 204 No Content. Monitor history is retained for 30 days after deletion so you can inspect past incidents; re-creating with the same name within that window restores history.
Pause / resume
/v0/monitors/{id}/pause/v0/monitors/{id}/resumeUseful for scheduled maintenance or feature-flag rollouts. Alerts are suppressed while paused.
Monitor check history
/v0/monitors/{id}/checksList individual check resultsQuery params: from, to (ISO 8601), region, status (ok, warn, err), pagination. Raw checks are retained for 30 days; older data is rolled up to hourly in GET /v0/monitors/{id}/uptime.
Uptime rollups
/v0/monitors/{id}/uptimeAggregated uptime by day / hour{
"data": [
{ "bucket": "2026-04-17", "uptime": 0.9998, "incidents": 0 },
{ "bucket": "2026-04-18", "uptime": 0.9732, "incidents": 1 }
],
"range": { "from": "2026-04-12", "to": "2026-04-18" },
"granularity": "day"
}