Escalation Policies

An ordered chain of integrations to notify when an incident stays open — step 1 fires immediately (or after its own delay), then each later step fires after its own delay if nobody's resolved things yet.

A policy is scoped to one project. Each step is just { integration_id, delay_minutes } — the channel (Slack, webhook, email, etc.) is whatever that integration was configured as. See Integrations to create the integrations you’ll reference here first.
GET/escalation-policies
List Escalation Policies

Escalation policies are project-scoped alerting chains: an ordered list of integrations to notify, each after a delay.

Example Request
curl -X GET "https://api.exitprobe.com/api/v1/escalation-policies" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
Example Response
{
  "success": true,
  "data": {
    "escalation_policies": [
      {
        "id": 10, "project_id": 3, "name": "Prod on-call", "is_active": true,
        "project": { "id": 3, "name": "Default Project" },
        "steps": [
          { "id": 55, "order": 1, "delay_minutes": 0, "integration": { "id": 1, "name": "My Webhook", "type": "webhook" } },
          { "id": 56, "order": 2, "delay_minutes": 15, "integration": { "id": 2, "name": "Pager Slack", "type": "slack" } }
        ]
      }
    ]
  }
}
POST/escalation-policies
Create Escalation Policy

Steps are given as an ordered array — order is taken from array position, not an explicit field. Each step waits `delay_minutes` after the previous step (or after the incident opens, for step 1) before notifying its integration.

Request Body
project_id*integerMust belong to your account.
name*stringMax 255 chars.
is_activebooleanDefault true.
steps*array1–10 entries, in order.
steps[].integration_id*integerMust be an integration you own.
steps[].delay_minutes*integer0–1440.
Notes
  • •404 "Project not found." for an unowned project_id.
  • •422 "One or more escalation steps reference an integration that does not belong to you."
Example Request
curl -X POST /api/v1/escalation-policies \
  -H "Authorization: Bearer 1|K7f9XyZaQ2mN8pL4vR6tW1sJ0hD3cB5gA7eF9uI2oY4" \
  -H "Content-Type: application/json" \
  -d '{
    "project_id": 3,
    "name": "Prod on-call",
    "steps": [
      {"integration_id": 1, "delay_minutes": 0},
      {"integration_id": 2, "delay_minutes": 15}
    ]
  }'
Example Response
{ "success": true, "message": "Escalation policy created.", "data": { "escalation_policy": { "id": 10, "name": "Prod on-call", "steps": [ { "order": 1, "delay_minutes": 0 } ] } } }
PUT/escalation-policies/{id}
Update Escalation Policy

Same body as Create — steps are replaced wholesale each time, not merged.

Example Request
curl -X PUT "https://api.exitprobe.com/api/v1/escalation-policies/{id}" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
DELETE/escalation-policies/{id}
Delete Escalation Policy

Example Request
curl -X DELETE "https://api.exitprobe.com/api/v1/escalation-policies/{id}" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
Example Response
{ "success": true, "message": "Escalation policy removed." }