---
title: On-call & escalations
description: Rotation schedules with layers and overrides, escalation policies that page person by person until someone acknowledges, and personal paging methods.
canonical: https://watchfor.io/docs/alerting/on-call
---

# On-call & escalations

Rotation schedules with layers and overrides, escalation policies that page person by person until someone acknowledges, and personal paging methods.

On-call turns "a channel got a message" into "**a person is responsible**": a
**schedule** decides *who* is on call at any moment, and an **escalation
policy** keeps paging — person by person, step by step — until someone
**acknowledges** the incident. Both live under **Alerting → On-call** and
are managed by owners and admins; everyone sets up their own paging methods
under **My notifications**.

**Also via API:** [`GET /v1/on-call`](/docs/api/plan#who-is-on-call)
answers "who is on call right now" for scripts and AI agents.

> **Warn**
>
> Being on the schedule is not enough — the person on call needs at least one
> enabled method under **My notifications** (email, Telegram, ntfy, Pushover,
> Gotify or Pushbullet). When the
> person on call right now has none, the dashboard shows an amber notice and
> the on-call page a banner: "X is on call but can't be paged". The API says
> the same in `current_on_call.reachable`.

## Schedules (who's on call)

Go to **Alerting → On-call → Schedules** and create a schedule:

- **Timezone** — all handoffs and restrictions are computed in the
  schedule's own timezone, so they stay put across daylight-saving changes.
  A new schedule starts in your profile time zone (your device's when the
  profile has none).
- **Layers** — most teams need one. A layer has a **rotation** (daily,
  weekly, or every *N* days, 1–90), a **handoff time**, an **anchor date**
  the rotation counts from, and an ordered list of **participants** who take
  turns. Add layers (up to five) for follow-the-sun or business-hours setups:
  a higher layer with a **time restriction** (e.g. 09:00–17:00) and
  **weekday restriction** (e.g. Mon–Fri) covers those hours, the base layer
  covers the rest. Overnight ranges (22:00–06:00) wrap past midnight.
- **Preview** — the editor shows the next four weeks as you type, so you can
  see the rotation before saving.

A participant without a personal paging method shows a **⚠ warning** in the
editor and on the schedule card — they cannot be paged until they add one.

### Overrides and replacements

- **Add override** — "Tomas covers the weekend": pick a person and a time
  range, and they replace whoever the rotation would pick for that range.
  Vacations and swaps without touching the rotation. Overrides cannot
  overlap; delete or adjust the existing one first.
- **Replace a person** — click a participant in the calendar legend to
  replace them in every layer, either **immediately** (including the current
  shift) or **from the next shift** (an override keeps them on call until
  their current shift ends). Useful when someone leaves the team.

### Calendar and totals

The schedule card shows **who is on call right now** and until when, then a
**week or month calendar** of shifts you can navigate freely. Below it,
**per-person totals** for the visible period — time on call, share of the
period and **shift count** — make on-call compensation straightforward. A
shift is counted in the period its **handoff (end)** falls in: a week ending
on the 1st belongs to the new month. Days before the rotation's start (its
earliest anchor date) have no shifts, so a schedule created mid-month isn't
shown as uncovered before it existed. **Print / PDF** exports exactly what the
calendar shows, totals included.

## Escalation policies (what happens on an incident)

A policy is an ordered chain of **steps** (up to ten) for **critical**
incidents:

1. *Notify the on-call person of schedule X* → wait 5 minutes →
2. *Notify the next targets* → wait →
3. …and optionally **repeat the whole chain** (once, twice or three times) if
   still unacknowledged.

Each step has a **wait** (0 minutes to 24 hours) before the next step and up
to ten **targets**: the **current on-call** of a schedule, a **specific
person**, or a **notification channel** (a Slack room, a PagerDuty service…).
People are paged through their [personal methods](#personal-notification-methods);
a channel target is delivered like any other channel message.

The chain stops as soon as the incident is **acknowledged** (from the
dashboard or the [API](/docs/api/incidents#acknowledge-an-incident)) or
**resolved**, or when a maintenance window or mute silences the monitor —
planned work never wakes anyone. Every step that fires is written to the
incident timeline ("Escalation step 2 — Production escalation, paged …") and
the policy card lists its **recent escalations**.

> **Info**
>
> Only **critical** incidents page the on-call chain. Warnings go to the
> regular channels as usual; silenced incidents (mute or maintenance) never
> start a chain.

## Personal notification methods

Escalations page people through **their own** methods — not the shared
channels — so the person on call is reached wherever they are. Everyone sets
theirs up under **Alerting → On-call → My notifications**:

| Method | What you enter |
| --- | --- |
| **Email** | Your address |
| **Telegram** | Your chat ID — message [@WatchForAlertsBot](/docs/notifications/telegram) and send `/start`; it replies with the ID |
| **ntfy** | The full topic URL (ntfy.sh or self-hosted) you subscribe to in the ntfy app |
| **Pushover** | Your Pushover user key |
| **Gotify** | One field: the server URL and an application token as `https://gotify.example.com|TOKEN` |
| **Pushbullet** | An access token from Pushbullet → Settings → Account |

Methods can be added, disabled temporarily and removed at any time. Add more
than one and every enabled method is paged.

## Activating a policy

Attach the policy to a **contact group**: **Alerting → Channels & contacts → Contacts & groups → Contact
Groups → select the group → Escalation policy**, then Save. Every monitor
whose [notification targets](/docs/alerting#confirmation-settings) include
that group then escalates its critical incidents through the policy —
regular channel notifications keep working alongside. The **Flow** button on
a monitor's Alerting tab (and on the contact group) shows the complete
picture: channels first, then each escalation step with who would be paged
right now.

## Plans

On-call is a plan feature: the number of schedules depends on your plan, and
escalation policies are available whenever schedules are. See
[pricing](/pricing) for what is included.

## Related

	- [How incidents work](/docs/alerting/incidents): Acknowledging stops the chain — here is everything else it does.
	- [Contacts & groups](/docs/notifications/contact-groups): The group that connects monitors, channels and the escalation policy.
	- [PagerDuty](/docs/notifications/pagerduty): Prefer paging through PagerDuty? Use it as a channel or an escalation target.

---

Canonical page: https://watchfor.io/docs/alerting/on-call · All docs: https://watchfor.io/docs · Site guide: https://watchfor.io/llms.txt
