Escalation Policies
An escalation policy notifies more people, step by step, while an incident is open and nobody has acknowledged it. For example: the on-call person first, their backup 15 minutes later, then the team lead.
Escalation policies are included in the Business plans.
Policies add to notification roles
A policy doesn't replace notification roles. The trigger's roles still fire immediately, and their repeat setting works as before. The policy's steps run in addition.
How a policy runs
- The incident opens and the trigger's notification roles send the first notification.
- Step 1 waits for its delay, counted from that first notification.
- Each later step waits for its own delay, counted from the previous step.
- After the last step, the policy starts over if it is set to repeat. Otherwise it is finished.
For example:
| Step | Delay | Sent after | Message starts with |
|---|---|---|---|
| 1 | 5 minutes | 5 minutes | [ESCALATED 1/3] |
| 2 | 15 minutes | 20 minutes | [ESCALATED 2/3] |
| 3 | 30 minutes | 50 minutes | [ESCALATED 3/3] |
What stops it
| Event | Effect |
|---|---|
| Acknowledge | Stops the policy |
| Snooze | Pauses the policy |
| The incident resolves | Stops the policy |
| The check is paused | Steps are skipped |
| A maintenance window is active | Steps are skipped |
Steps and targets
A policy has a name, an optional description and 1 to 10 steps. Each step has:
- A delay from 0 to 1440 minutes (24 hours).
- Targets, at least one per step:
- Notification roles, which reach the role's people, custom recipients and integrations such as Slack.
- People or on-call schedules per channel: email, SMS, phone call or push notification. A schedule means whoever is on call when the step is sent.
Each list holds up to 20 entries. SMS and phone calls use your credits.
Deleting a role, a person or a schedule removes it from every step. That can leave a step with no targets, so review your policies after removing someone from the team.
Repeat
After the last step, a policy can start over:
- Repeat times: 0 to 10.
0means it doesn't repeat. - Repeat after: 1 to 1440 minutes between rounds. Required when it repeats.
Attach a policy
You can attach a policy at three levels. The most specific one wins:
- Trigger: the policy set on the trigger itself.
- Server: used by the server's triggers that have no policy of their own.
- Group: used when neither the trigger nor the server has one. Subgroups without their own policy inherit it.
Each trigger, server and group can have one policy. Clearing a policy at one level lets the next one apply. Deleting a policy removes it from everything that used it, which then relies on notification roles only.
Test a policy
A dry run shows who each step would reach right now, resolving roles and schedules as of this moment. Nothing is sent. Run it after changing a rotation or a role, since the answer can change as shifts change.
Who can manage policies
Everyone on the account can see policies and run a dry run. Creating, editing and deleting them needs the on-call permission. Attaching a policy to a server or group needs write access to it.
Relation to repeat notifications
| Role repeat | Escalation policy | |
|---|---|---|
| Set on | Notification role | Trigger, server or group |
| Who gets it | The same recipients each time | Different targets per step |
| Timing | One fixed interval | A delay per step |
| Message starts with | [REPEATED] | [ESCALATED 2/3] |
| Plans | All | Business |
| Stopped by acknowledge | Yes | Yes |
Use a role repeat to keep reminding the same people. Use a policy when the alert should move on to someone else.
API
Authenticate with an API key.
| Request | What it does |
|---|---|
GET /api/v2/escalation-policies | List policies |
POST /api/v2/escalation-policies | Create a policy |
GET /api/v2/escalation-policies/{id} | A policy with its steps, each step's total wait, and how many servers, groups and triggers use it |
PUT /api/v2/escalation-policies/{id} | Update a policy. Sending steps replaces all steps |
DELETE /api/v2/escalation-policies/{id} | Delete a policy |
POST /api/v2/escalation-policies/{id}/test | Dry run. Nothing is sent |
PUT /api/v2/servers/{id}/escalation-policy | Set a server's policy with escalation_policy_id, or clear it with null |
PUT /api/v2/groups/{id}/escalation-policy | Set a group's policy with escalation_policy_id, or clear it with null |
On a trigger, send escalation_policy_id inside the trigger's data, next to notification_roles. Use null to clear it. Leaving it out of an update keeps the current policy.
A policy looks like this:
{
"name": "Primary",
"description": "On-call first, then the team lead",
"repeat_times": 2,
"repeat_after_minutes": 30,
"steps": [
{
"delay_minutes": 5,
"targets": {
"recipients": {
"sms": {"schedules": [12]},
"notification": {"schedules": [12]}
}
}
},
{
"delay_minutes": 15,
"targets": {
"notification_roles": [41],
"recipients": {
"call": {"contacts": [7]}
}
}
}
]
}
Under recipients, the channels are email, sms, call and notification (push). Each takes clients (the account owner), contacts (team members) and schedules.