Escalation policies HTTP API
Create an escalation policy
Required permission: grafana-irm-app.escalation-chains:write
curl "{{API_URL}}/api/v1/escalation_policies/" \
--request POST \
--header "Authorization: meowmeowmeow" \
--header "Content-Type: application/json" \
--header "X-Grafana-URL: https://your-stack.grafana.net" \
--data '{
"escalation_chain_id": "F5JU6KJET33FE",
"type": "wait",
"duration": 60
}'The above command returns JSON structured in the following way:
{
"id": "E3GA6SJETWWJS",
"escalation_chain_id": "F5JU6KJET33FE",
"position": 0,
"type": "wait",
"duration": 60
}| Parameter | Required | Description |
|---|---|---|
escalation_chain_id | Yes | Each escalation policy is assigned to a specific escalation chain. |
position | Optional | Escalation policies execute one after another starting from position=0. Position=-1 puts the policy at the end. |
type | Yes | See Step types below. |
important | Optional | Default false. Uses “important” notification rules. Applicable for user/schedule/group notification types. |
duration | If type = wait | Duration in seconds (60-86400). |
action_to_trigger | If type = trigger_webhook | ID of a webhook. |
group_to_notify | If type = notify_user_group | ID of a User Group. |
persons_to_notify | If type = notify_persons | List of user IDs. |
persons_to_notify_next_each_time | If type = notify_person_next_each_time | List of user IDs. |
notify_on_call_from_schedule | If type = notify_*_from_schedule | ID of a Schedule. See Schedule notification types below. |
notify_if_time_from | If type = notify_if_time_from_to | UTC time for period start, e.g. 09:00:00Z. |
notify_if_time_to | If type = notify_if_time_from_to | UTC time for period end, e.g. 18:00:00Z. |
num_alerts_in_window | If type = notify_if_num_alerts_in_window | Number of alerts required to continue escalation. |
num_minutes_in_window | If type = notify_if_num_alerts_in_window | Time window in minutes. |
team_to_notify | If type = notify_team_members | ID of a team. |
severity | If type = declare_incident | Severity of the incident. |
Step types
wait, notify_persons, notify_person_next_each_time, notify_on_call_from_schedule, notify_next_on_call_from_schedule, notify_user_group, notify_team_members, trigger_webhook, resolve, notify_whole_channel, notify_if_time_from_to, notify_if_num_alerts_in_window, repeat_escalation, declare_incident.
Schedule notification types
Both schedule notification types require the notify_on_call_from_schedule parameter with a schedule ID:
notify_on_call_from_schedule: Notifies the user currently on-call from the specified schedule.notify_next_on_call_from_schedule: Notifies all users from the next upcoming on-call shift in the specified schedule. If there is no next shift within the lookahead window (14 days), the step is skipped and escalation continues.
HTTP request
POST {{API_URL}}/api/v1/escalation_policies/
Get an escalation policy
Required permission: grafana-irm-app.escalation-chains:read
curl "{{API_URL}}/api/v1/escalation_policies/E3GA6SJETWWJS/" \
--request GET \
--header "Authorization: meowmeowmeow" \
--header "Content-Type: application/json" \
--header "X-Grafana-URL: https://your-stack.grafana.net"The above command returns JSON structured in the following way:
{
"id": "E3GA6SJETWWJS",
"escalation_chain_id": "F5JU6KJET33FE",
"position": 0,
"type": "wait",
"duration": 60
}Update an escalation policy
Required permission: grafana-irm-app.escalation-chains:write
curl "{{API_URL}}/api/v1/escalation_policies/E3GA6SJETWWJS/" \
--request PUT \
--header "Authorization: meowmeowmeow" \
--header "Content-Type: application/json" \
--header "X-Grafana-URL: https://your-stack.grafana.net" \
--data '{
"type": "wait",
"duration": 300,
}'The above command returns JSON structured in the following way:
{
"id": "E3GA6SJETWWJS",
"escalation_chain_id": "F5JU6KJET33FE",
"position": 0,
"type": "wait",
"duration": 300
}HTTP request
PUT {{API_URL}}/api/v1/on_call_shifts/<ON_CALL_SHIFT_ID>/
HTTP request
GET {{API_URL}}/api/v1/escalation_policies/<ESCALATION_POLICY_ID>/
List escalation policies
Required permission: grafana-irm-app.escalation-chains:read
curl "{{API_URL}}/api/v1/escalation_policies/" \
--request GET \
--header "Authorization: meowmeowmeow" \
--header "Content-Type: application/json" \
--header "X-Grafana-URL: https://your-stack.grafana.net"The above command returns JSON structured in the following way:
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": "E3GA6SJETWWJS",
"escalation_chain_id": "F5JU6KJET33FE",
"position": 0,
"type": "wait",
"duration": 60
},
{
"id": "E5JJTU52M5YM4",
"escalation_chain_id": "F5JU6KJET33FE",
"position": 1,
"type": "notify_person_next_each_time",
"persons_to_notify_next_each_time": ["U4DNY931HHJS5"]
}
],
"current_page_number": 1,
"page_size": 50,
"total_pages": 1
}Note: The response is paginated. You may need to make multiple requests to get all records.
The following available filter parameter should be provided as a GET argument:
escalation_chain_id
HTTP request
GET {{API_URL}}/api/v1/escalation_policies/
Advance round-robin position
Required permission: grafana-irm-app.escalation-chains:write
For escalation policies of type notify_person_next_each_time (round-robin), this endpoint advances the round-robin pointer to the next user in the queue and returns the user that is now current.
curl "{{API_URL}}/api/v1/escalation_policies/E5JJTU52M5YM4/advance_round_robin/" \
--request POST \
--header "Authorization: meowmeowmeow" \
--header "Content-Type: application/json" \
--header "X-Grafana-URL: https://your-stack.grafana.net"The above command returns JSON structured in the following way:
{
"user_id": "U4DNY931HHJS5",
"username": "alice"
}| Parameter | Description |
|---|---|
user_id | Public ID of the user now at the head of the round-robin. |
username | Username of the user. |
Returns 400 Bad Request if the policy is not a round-robin step or if the round-robin queue has no users.
HTTP request
POST {{API_URL}}/api/v1/escalation_policies/<ESCALATION_POLICY_ID>/advance_round_robin/
Delete an escalation policy
Required permission: grafana-irm-app.escalation-chains:write
curl "{{API_URL}}/api/v1/escalation_policies/E3GA6SJETWWJS/" \
--request DELETE \
--header "Authorization: meowmeowmeow" \
--header "Content-Type: application/json" \
--header "X-Grafana-URL: https://your-stack.grafana.net"HTTP request
DELETE {{API_URL}}/api/v1/escalation_policies/<ESCALATION_POLICY_ID>/
Was this page helpful?
Related resources from Grafana Labs


