Skip to main content

Resolve rotations and plan escalations

On-call tooling and the incident driver both live behind these two endpoints — the call resolves who is accountable at a given instant, and the plan flattens the escalation ladder you would walk when an incident refuses an ACK. Both are pure compute: nothing is persisted, no pages are sent, and no state changes. An incident driver (the webhook-worker escalation scheduler) still fires pages through the notify channel downstream. Resolve a rotation. POST /api/v1/oncall/resolve answers “who is on call now” — a rotation is a fixed-length shift schedule anchored to an absolute start (anchor), with members rotating through it in order.
Plan an escalation. POST /api/v1/oncall/escalation/plan flattens the policy into the ordered pages timeline: each step names a target (a live rotation resolved at the page’s fire instant, or a static member list), the channels paged, and the escalate_after_seconds window before the next step. Each layer of the walk fires at a cumulative offsetSeconds from the incident start; policy.repeat loops the whole policy that many extra times if no step is ever acknowledged.
Rotation targets resolve at each page’s fire instant, so a hand-off that lands mid-escalation reaches the right human.