Skip to content

Merge incidents

An outage can open more than one incident: a teammate files one by hand while a monitor opens another, or two services each open their own. Merging folds the duplicates (the sources) into the incident you keep (the target), so responders and customers follow one timeline.

  • Sources resolve as merged. Each source becomes resolved with resolution_reason: "merged" and merged_into_id set to the target. A merged incident cannot be reopened.
  • Monitors and participants move. The sources’ affected monitors and participants are added to the target.
  • The highest severity wins. The target takes the highest severity among itself and its sources.
  • Updates stay on the source. The target lists each source under merged_from, with the source’s id, title, created_at and its own updates, so you can read the full history from the target.
  • Published sources point to the target. A source that is on a status page gets one public update, “Merged into” followed by the target’s title, and the target is added to that page.
  • Sources are quiet. A merge sends no resolved notification and no subscriber email for the sources.
  • Paging carries over. The sources’ escalations stop. If a source was still paging and the target was not, the target’s escalation starts.
  • All or nothing. If any source cannot be merged, nothing changes.

The incident in the path is the target. Send between 1 and 20 source ids:

Terminal window
curl -X POST https://api.siteqwality.com/incident/$TARGET_ID/merge \
-H "Authorization: Bearer $SITEQWALITY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "source_ids": ["<source-id-1>", "<source-id-2>"] }'

The response is the target incident, with the moved monitors and participants and the sources under merged_from.

StatusMeaning
200Merged. The body is the target.
400source_ids is empty or has more than 20 ids.
404The target, or any source, is not an incident in your account.
409The merge is not allowed. data.conflict says why (below).

A 409 carries one of these codes in data.conflict, and data.incident_id names the incident it refused:

data.conflictMeaning
same_incidentOne of the sources is the target itself.
source_mergedA source was already merged into another incident.
source_resolvedA source is already resolved.
target_resolvedThe target is resolved.
target_mergedThe target was itself merged into another incident. Merge into that one instead.