brily
API reference

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. Requires name plus operator and value.
  • json_path — JSONPath extraction. Requires path plus operator and value.
  • latency_p95 — p95 latency over the last window_minutes (default 10). Use value_ms.

List monitors

GET/v0/monitorsList monitors in the scoped project

Query params:

  • enabled — filter by true / false
  • cursor, limit — pagination
curl https://api.brily.app/v0/monitors?limit=25 \
  -H "Authorization: Bearer $BRILY_TOKEN"

Create a monitor

POST/v0/monitorsCreate a monitor
curl -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

GET/v0/monitors/{id}

Update a monitor

PATCH/v0/monitors/{id}Partial update

Only send fields you want to change. Arrays (assertions, regions) replace, they don't merge — fetch-modify-send is the safe pattern.

Delete a monitor

DELETE/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

POST/v0/monitors/{id}/pause
POST/v0/monitors/{id}/resume

Useful for scheduled maintenance or feature-flag rollouts. Alerts are suppressed while paused.

Monitor check history

GET/v0/monitors/{id}/checksList individual check results

Query 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

GET/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"
}