brily
API reference

Incidents.

Manage status-page incidents programmatically. Every incident has a four-state lifecycle (Investigating → Identified → Monitoring → Resolved) and a list of affected components.

The Incident object

{
  "id": "inc_1402",
  "title": "Checkout latency degraded",
  "state": "monitoring",
  "severity": "p2",
  "impact": "partial",
  "affected_components": ["comp_checkout", "comp_api"],
  "status_page_id": "sp_shipOS",
  "updates": [
    {
      "state": "investigating",
      "body": "Elevated errors on checkout submit. Looking.",
      "posted_at": "2026-04-18T02:19:00Z"
    },
    {
      "state": "identified",
      "body": "Root cause: stale connection pool. Fix rolling out.",
      "posted_at": "2026-04-18T02:34:00Z"
    }
  ],
  "started_at": "2026-04-18T02:17:00Z",
  "resolved_at": null,
  "postmortem_url": null,
  "created_at": "2026-04-18T02:19:00Z"
}

Lifecycle states

  • investigating — acknowledged, root cause unknown
  • identified — root cause confirmed, fix underway
  • monitoring — fix deployed, verifying recovery
  • resolved — incident closed

Severity levels

  • p1 — core service down / paying users blocked
  • p2 — feature degraded, workarounds available
  • p3 — minor issue, monitoring-only

List incidents

GET/v0/incidents

Query params: state, severity, status_page_id, from, to, cursor, limit.

Create an incident

POST/v0/incidents
curl -X POST https://api.brily.app/v0/incidents \
  -H "Authorization: Bearer $BRILY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Checkout latency degraded",
    "severity": "p2",
    "impact": "partial",
    "affected_components": ["comp_checkout"],
    "status_page_id": "sp_shipOS",
    "initial_update": {
      "state": "investigating",
      "body": "Elevated errors on checkout submit. Looking."
    }
  }'

Post an update

POST/v0/incidents/{id}/updates
curl -X POST https://api.brily.app/v0/incidents/inc_1402/updates \
  -H "Authorization: Bearer $BRILY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "identified",
    "body": "Root cause: stale DB connection pool. Rolling fix to canary."
  }'

Every update publishes to the status page and notifies all subscribers by email (or RSS). The statefield on the parent incident is automatically set to the latest update's state.

Resolve an incident

POST/v0/incidents/{id}/resolve
{
  "body": "Fully recovered across all regions. Post-mortem to follow within 72h."
}

Attach a post-mortem

PATCH/v0/incidents/{id}
{
  "postmortem_url": "https://status.ship-os.com/incidents/inc_1402/postmortem"
}

We host post-mortems on the status page by default. Pass a URL to link an external write-up (e.g., engineering blog).

Promote an alert to an incident

POST/v0/alerts/{alert_id}/promote

Shortcut that creates an incident with affected_componentspre-filled from the alert's monitor, and an initial investigatingupdate with the alert's context embedded. This is what the one-click button in the dashboard calls.

curl -X POST https://api.brily.app/v0/alerts/alt_7Fq/promote \
  -H "Authorization: Bearer $BRILY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "severity": "p1",
    "status_page_id": "sp_shipOS"
  }'