Alert routing rules

Replace a routing rule

FULL REPLACEMENT, not a merge. Every field you do not send is RESET, not kept: PUT {"name": "P1 → SRE"} on a rule that used to catch critical + firing for the SRE group leaves it with no severities, no statuses, no label matchers and no recipient group. Read the rule first, change what you want, send the whole thing back.

That reset is not a cosmetic loss. An empty filter set means MATCHES EVERYTHING, so a rule stripped this way becomes a catch-all at its own position: every rule after it in the integration stops being reached, and the emptied rule falls back to its default action, which suppresses. Alerts keep arriving and nobody gets woken. The answer is still 200 and nothing appears in any log.

position is not settable here — use the reorder endpoint. There is no PATCH on this path: it would read as partial update and behave as replacement, so it answers 405.

put/api/v1/observability/routing-rules/{routing_rule}

Request

  • Base URL: https://wardenpoint.com (the document declares no server; this is the origin it was published from)
  • URL: https://wardenpoint.com/api/v1/observability/routing-rules/{routing_rule}
  • Auth: API key in header X-API-Key

Path parameters

routing_rulestring uuid required

Routing rule UUID.

Request body

namestring nullable

Label for humans.

recipient_group_uuidstring uuid nullable

Group to notify when the rule matches. Must belong to the same company as the API key — a group UUID from anywhere else is refused with 422 rather than stored as "no group". Null mutes matching alerts on purpose.

target_kind'group' | 'event'

Who the rule pages: group (a recipient group you name) or event (the people the alert itself names — a GitLab merge request lists its reviewers). event is accepted only for sources that name people; every other source rejects it with 422. A rule with event takes no recipient_group_uuid.

addressee_set'all' | 'added' | 're_requested' | 'reviewed' nullable

Which of the people named by the event to page. Required when target_kind is event, otherwise null. all — every reviewer; added — only those this event added; re_requested — only those asked to review again; reviewed — only those who already looked at the diff. Anyone the event names but whose login is not bound to a recipient on the integration page is recorded there for binding, and an event where nobody is bound lands in the triage inbox with addressee_unresolved.

severitiesstring[] nullable

Empty or omitted means any severity.

statusesstring[] nullable

Empty or omitted means any status.

threshold_countinteger nullable

Occurrences needed to reach threshold_action, overriding the integration for alerts this rule matches. Omit to inherit — but read the note above about what "omit" means once any sibling is set.

window_minutesinteger nullable

Length of the counting window, overriding the integration. Falls back to 1 minute when the override block is engaged, which is short enough that a threshold above 1 is effectively never reached — set it deliberately.

below_threshold_action'suppress' | 'message' | 'escalate' nullable

Applied to occurrences before the threshold. Falls back to the integration's default action.

threshold_action'suppress' | 'message' | 'escalate' nullable

Applied to the occurrence that hits the threshold — this is the one that decides whether people are woken, and at which priority: escalate pages at critical and starts the escalation chain, message pages at normal and starts none, suppress records without notifying. Falls back to the integration's default action.

after_threshold_action'suppress' | 'message' | 'escalate' nullable

Applied to further occurrences in the same window. Falls back to suppress, not to the integration default — one incident pages once by design. That is also why leaving this out while setting a sibling can quietly mute a repeating alert for the rest of the window.

Example request

{
  "label_matchers": [
    {
      "key": "service",
      "value": "checkout"
    }
  ]
}

Response

Updated rule.

Example response

{
  "data": {
    "label_matchers": [
      {
        "key": "service",
        "value": "checkout"
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.