Grafana Cloud

Escalation policies HTTP API

Create an escalation policy

Required permission: grafana-irm-app.escalation-chains:write

shell
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:

JSON
{
  "id": "E3GA6SJETWWJS",
  "escalation_chain_id": "F5JU6KJET33FE",
  "position": 0,
  "type": "wait",
  "duration": 60
}
ParameterRequiredDescription
escalation_chain_idYesEach escalation policy is assigned to a specific escalation chain.
positionOptionalEscalation policies execute one after another starting from position=0. Position=-1 puts the policy at the end.
typeYesSee Step types below.
importantOptionalDefault false. Uses “important” notification rules. Applicable for user/schedule/group notification types.
durationIf type = waitDuration in seconds (60-86400).
action_to_triggerIf type = trigger_webhookID of a webhook.
group_to_notifyIf type = notify_user_groupID of a User Group.
persons_to_notifyIf type = notify_personsList of user IDs.
persons_to_notify_next_each_timeIf type = notify_person_next_each_timeList of user IDs.
notify_on_call_from_scheduleIf type = notify_*_from_scheduleID of a Schedule. See Schedule notification types below.
notify_if_time_fromIf type = notify_if_time_from_toUTC time for period start, e.g. 09:00:00Z.
notify_if_time_toIf type = notify_if_time_from_toUTC time for period end, e.g. 18:00:00Z.
num_alerts_in_windowIf type = notify_if_num_alerts_in_windowNumber of alerts required to continue escalation.
num_minutes_in_windowIf type = notify_if_num_alerts_in_windowTime window in minutes.
team_to_notifyIf type = notify_team_membersID of a team.
severityIf type = declare_incidentSeverity 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

shell
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:

JSON
{
  "id": "E3GA6SJETWWJS",
  "escalation_chain_id": "F5JU6KJET33FE",
  "position": 0,
  "type": "wait",
  "duration": 60
}

Update an escalation policy

Required permission: grafana-irm-app.escalation-chains:write

shell
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:

JSON
{
  "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

shell
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:

JSON
{
  "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.

shell
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:

JSON
{
  "user_id": "U4DNY931HHJS5",
  "username": "alice"
}
ParameterDescription
user_idPublic ID of the user now at the head of the round-robin.
usernameUsername 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

shell
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>/