Escalation Policies API
Create and manage multi-step escalation policies for workspace-scoped incident routing.
Escalation policies define who gets notified, when, and through what channel when an incident occurs. Policies are workspace-scoped and evaluated in priority order.
Escalation policies replace the legacy escalation rules. See Escalation Policies for the full conceptual documentation.
Create Escalation Policy
POST /escalation-policiesRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
workspaceId | number | Yes | Workspace this policy belongs to |
name | string | Yes | Human-readable name |
priority | number | Yes | Evaluation order (0 = highest). Must be unique per workspace. |
projectIds | number[] | No | Projects this policy applies to. null = catch-all. |
ackTimeoutMinutes | number | No | Re-escalate if acknowledged but not resolved within this time. null = no timeout. |
repeatCount | number | No | How many times to repeat the escalation cycle (default: 0) |
enabled | boolean | No | Whether the policy is active (default: true) |
steps | array | Yes | Escalation steps (see below) |
Step Object
| Field | Type | Required | Description |
|---|---|---|---|
position | number | Yes | Order within the policy (0-indexed) |
delayMinutes | number | Yes | Minutes after incident creation to fire this step |
targets | array | Yes | Notification targets (see below) |
Step Target Object
| Field | Type | Required | Description |
|---|---|---|---|
targetType | string | Yes | ALERT_CHANNEL, USER, ON_CALL_SCHEDULE, or TEAM |
alertChannelId | number | Conditional | Required when targetType is ALERT_CHANNEL |
targetUserId | number | Conditional | Required when targetType is USER |
targetScheduleId | number | Conditional | Required when targetType is ON_CALL_SCHEDULE |
targetTeamId | number | Conditional | Required when targetType is TEAM |
Example
curl -X POST https://api.ionhour.com/api/escalation-policies \
-H "Authorization: Bearer ionh_your_key" \
-H "Content-Type: application/json" \
-d '{
"workspaceId": 1,
"name": "Production Escalation",
"priority": 0,
"projectIds": [1, 2],
"ackTimeoutMinutes": 30,
"repeatCount": 1,
"steps": [
{
"position": 0,
"delayMinutes": 0,
"targets": [
{ "targetType": "ON_CALL_SCHEDULE", "targetScheduleId": 1 },
{ "targetType": "ALERT_CHANNEL", "alertChannelId": 3 }
]
},
{
"position": 1,
"delayMinutes": 5,
"targets": [
{ "targetType": "TEAM", "targetTeamId": 1 }
]
},
{
"position": 2,
"delayMinutes": 15,
"targets": [
{ "targetType": "ALERT_CHANNEL", "alertChannelId": 5 }
]
}
]
}'List Escalation Policies
GET /escalation-policiesQuery Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | number | Yes | Filter by workspace |
curl -H "Authorization: Bearer ionh_your_key" \
"https://api.ionhour.com/api/escalation-policies?workspaceId=1"Get Escalation Policy
GET /escalation-policies/:idReturns a single policy with its steps and targets.
curl -H "Authorization: Bearer ionh_your_key" \
https://api.ionhour.com/api/escalation-policies/1Update Escalation Policy
PUT /escalation-policies/:idUpdates a policy. Include only fields you want to change. To update steps, send the full steps array — it replaces the existing steps.
curl -X PUT https://api.ionhour.com/api/escalation-policies/1 \
-H "Authorization: Bearer ionh_your_key" \
-H "Content-Type: application/json" \
-d '{"name": "Updated Policy", "ackTimeoutMinutes": 60}'Delete Escalation Policy
DELETE /escalation-policies/:idcurl -X DELETE https://api.ionhour.com/api/escalation-policies/1 \
-H "Authorization: Bearer ionh_your_key"