Static Documentation

Incident Responders

Version latest · Updated 2026-06-18
Interactive docs View on GitHub

Incident Responders#

Incident responders are people, teams, rotations, or escalation policies explicitly requested to help with an active incident.

Responders are different from the incident assignee:

  • Assignee is the main owner of the incident.
  • Responder is an additional participant asked to help.
  • Accepting a responder request does not automatically assign the incident to that user.

Target types#

A responder request can target one of these objects:

Target typeRequired field
usertarget_user_id
teamtarget_team_id
rotationtarget_rotation_id
escalation_policytarget_escalation_policy_id

Only one target id must be provided for the selected target_type.

Request a responder#

POST /api/incidents/{incident_id}/responders

Request body:

{
  "target_type": "user",
  "target_user_id": 42,
  "message": "Please help with database checks",
  "expires_after_minutes": 30
}

Response:

{
  "id": 15,
  "incident_id": 14784,
  "group_id": 14784,
  "target_type": "user",
  "target_user_id": 42,
  "target_team_id": null,
  "target_rotation_id": null,
  "target_escalation_policy_id": null,
  "target": {
    "type": "user",
    "id": 42,
    "label": "Alice Smith",
    "user": {
      "id": 42,
      "username": "alice",
      "display_name": "Alice Smith",
      "email": "alice@example.com"
    }
  },
  "requested_by_id": 1,
  "requested_by": {
    "id": 1,
    "username": "admin",
    "display_name": "Admin",
    "email": "admin@example.com"
  },
  "accepted_by_id": null,
  "accepted_by": null,
  "declined_by_id": null,
  "declined_by": null,
  "status": "requested",
  "message": "Please help with database checks",
  "response_message": null,
  "notification_status": "sent",
  "notification_error": null,
  "requested_at": "2026-06-17T10:00:00Z",
  "responded_at": null,
  "expires_at": "2026-06-17T10:30:00Z",
  "created_at": "2026-06-17T10:00:00Z",
  "updated_at": "2026-06-17T10:00:00Z"
}

List incident responders#

GET /api/incidents/{incident_id}/responders

Returns all responder requests for the incident.

Example response:

[
  {
    "id": 15,
    "incident_id": 14784,
    "group_id": 14784,
    "target_type": "user",
    "target_user_id": 42,
    "target": {
      "type": "user",
      "id": 42,
      "label": "Alice Smith",
      "user": {
        "id": 42,
        "username": "alice",
        "display_name": "Alice Smith",
        "email": "alice@example.com"
      }
    },
    "status": "requested",
    "message": "Please help with database checks",
    "response_message": null,
    "requested_at": "2026-06-17T10:00:00Z",
    "responded_at": null,
    "expires_at": "2026-06-17T10:30:00Z"
  }
]

Update responder status#

PUT /api/incidents/{incident_id}/responders/{responder_id}

Request body:

{
  "status": "accepted",
  "response_message": "I am joining"
}

Allowed statuses:

StatusDescription
acceptedThe responder accepted the request.
declinedThe responder declined the request.
resolvedThe responder request was manually resolved.
expiredThe responder request expired. Usually set by the scheduler.

Example response:

{
  "id": 15,
  "incident_id": 14784,
  "group_id": 14784,
  "target_type": "user",
  "target_user_id": 42,
  "target": {
    "type": "user",
    "id": 42,
    "label": "Alice Smith"
  },
  "requested_by_id": 1,
  "accepted_by_id": 42,
  "accepted_by": {
    "id": 42,
    "username": "alice",
    "display_name": "Alice Smith",
    "email": "alice@example.com"
  },
  "declined_by_id": null,
  "declined_by": null,
  "status": "accepted",
  "message": "Please help with database checks",
  "response_message": "I am joining",
  "requested_at": "2026-06-17T10:00:00Z",
  "responded_at": "2026-06-17T10:05:00Z",
  "expires_at": "2026-06-17T10:30:00Z"
}

Notification center#

Pending responder requests are shown in the notification center.

Read more: Notification Center.

Permissions#

Responder requests can be created by users who can respond to the incident team.

Responder status can be updated by users who can act as the target responder:

  • the targeted user;
  • a user allowed to respond for the targeted team;
  • a user allowed to respond for the targeted rotation team;
  • a user allowed to respond for the targeted escalation policy team.

A random viewer who is not the target cannot accept or decline another user's responder request.

Timeline events#

Responder actions are written to the incident timeline.

Event typeExample message
responder_requestedResponder requested: Alice Smith. Please help with this incident.
responder_acceptedAlice Smith accepted responder request. I am joining
responder_declinedAlice Smith declined responder request. Busy now
responder_expiredResponder request expired for Alice Smith

Browser push notification#

When browser push is configured for the target responder, IncidentRelay sends a push notification for the responder request.

The notification should include enough context to act without opening the incident first:

  • incident title;
  • priority;
  • requester;
  • team;
  • service, when available;
  • request message;
  • link to the incident.

Push delivery failure does not prevent the responder request from being created. In that case notification_status and notification_error describe the delivery result.