Escalation Policies API
Create and manage escalation policies through the Ionhour API — build the multi-step rules that route unacknowledged incidents to the right people and teams.
Escalation policies define who gets notified, when, and through what channel when an incident occurs. Policies are workspace-scoped and evaluated in priority order.
These are dashboard API endpoints — they require an OAuth session token ($ACCESS_TOKEN) and do not accept ionh_ API keys. For API-key access to escalation policies, use the MCP integration. See which credential goes where.
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 $ACCESS_TOKEN" \
-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 $ACCESS_TOKEN" \
"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 $ACCESS_TOKEN" \
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 $ACCESS_TOKEN" \
-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 $ACCESS_TOKEN"Signals API
Send heartbeat pings to Ionhour, report job failures, query historical signal data, and subscribe to real-time signal updates over server-sent events (SSE).
On-Call Schedules API
Create and manage on-call schedules through the Ionhour API — rotations, participants, and overrides, plus querying who is currently on call for any given team.