How escalation works
When a notification policy matches an incident, its escalation chain begins executing:- Step 1 executes — the configured channels are notified
- Delay — if the next step has a
delayMinutesvalue, the chain waits - Acknowledgment check — if the current step has
requireAck: trueand someone acknowledged, the chain stops - Step 2 executes — the next set of channels is notified
- Repeat — continues through all steps until the chain completes or the incident resolves
Step fields
Each step in the chain has the following configuration:| Field | Type | Required | Description |
|---|---|---|---|
delayMinutes | integer | No | Minutes to wait before executing this step (0 = immediate, minimum 0) |
channelIds | UUID[] | Yes | Alert channels to notify (at least one required) |
requireAck | boolean | No | If true, acknowledgment is required before advancing to the next step |
repeatIntervalSeconds | integer | No | Re-notify at this interval until acknowledged (minimum 1 second) |
Example chains
Simple — Slack then PagerDuty
Notify Slack immediately. If no one acknowledges within 10 minutes, page on-call via PagerDuty:Immediate multi-channel
Notify Slack and email simultaneously with no escalation:Three-tier escalation
Team channel → engineering lead → management with increasing urgency:Acknowledgment
When a step hasrequireAck: true, the escalation chain pauses at that step until someone acknowledges the notification. Acknowledgment can happen through:
- External system — acknowledging the PagerDuty or OpsGenie alert
- DevHelm API — calling the acknowledge endpoint on the notification dispatch
repeatIntervalSeconds is set, the step re-notifies at that interval until acknowledged or the incident resolves.
Resolution behavior
TheonResolve field controls what happens when the incident resolves:
| Value | Behavior |
|---|---|
notify_all_steps | All steps that were notified receive a resolution message |
notify_current_step | Only the step that was active when the incident resolved gets notified |
silent | No resolution notification is sent |
Stateful integrations (PagerDuty, OpsGenie) always close their external alerts on resolution, even when
onResolve is silent. The silent setting only suppresses DevHelm’s resolution notification.Reopen behavior
TheonReopen field controls what happens when a resolved incident reopens:
| Value | Behavior |
|---|---|
restart_from_beginning | The escalation chain starts over from step 1 |
restart_from_current | The chain resumes from the step that was active when the incident resolved |
Escalation chain fields
| Field | Type | Required | Description |
|---|---|---|---|
steps | EscalationStep[] | Yes | Ordered steps (at least one required) |
onResolve | string | No | Action when incident resolves |
onReopen | string | No | Action when incident reopens |
Escalation chains are embedded in notification policies, not managed as separate resources. Create and update them as part of the notification policy configuration.
Next steps
Notification policies
Configure match rules that trigger escalation chains.
Alert channels
Set up the channel destinations referenced by escalation steps.
Tiered escalation guide
Step-by-step guide for building multi-tier escalation.