---
key: create-an-on-call-schedule
title: Create an on-call schedule
audience: staff
section: critical-alerts
routes: ["/critical-alerts/schedules", "/critical-alerts/schedules/new"]
permissions: ["critical_alerts.schedules.manage"]
features: ["critical_alerts.core"]
since: 0.0.1
updated: 0.0.1
status: published
summary: Say who is on call, on which days and hours, with an optional backup for after-hours, so a destination can reach whoever is covering right now.
keywords: [on call, rotation, after hours, who is covering, weekend coverage, backup, coverage window, standby, duty roster]
related: [add-a-critical-alert-destination, publish-a-critical-alert-draft, critical-alerts-guide]
---

In the sidebar, open **Critical Alerts**, then **Setup**, then **On-Call Schedules**. The page address is `/critical-alerts/schedules`.

A schedule does not send anything itself. A destination whose kind is **Schedule** asks it "who is on right now?" and sends to that person, team or branch.

## Before you start

- Your admin has to give your role permission to manage critical alert schedules.
- People need a phone number on their profile to receive calls or texts.

## Steps

1. Press **New schedule**. The **Create schedule** drawer opens.
2. Type a **Name**. The **Key** fills in from it and cannot change later.
3. Choose the **Timezone** the days and hours are read in. Leave it blank to use your organization's.
4. Under **Primary on-call coverage**, choose the **Target type** (**User**, **Team** or **Branch**) and pick the **On-call targets**.
5. The **Default window** is all day, every day. To limit it, press **Customize window** and set **Days**, **Start** and **End**. **All the time** puts it back.
6. If someone else should cover the remaining hours, under **Backup coverage** press **Add backup**, then choose its **Target type**, **Targets**, **Days**, **Start** and **End**. The backup window starts at 19:00 and ends at 07:00 unless you change it. **Remove backup** takes it away.
7. Press **Create schedule**. The schedule is saved as a draft.
8. On its row, press **Publish** so destinations start using it.

## What you see

- Each row shows the timezone, how many coverage windows it has and who is in them, and a version line.
- The **Filters** button narrows by **Status** and **Publish state**.
- **Advanced** at the bottom of the drawer hides **Show policy JSON** for unusual rotations; most schedules never need it.
- **Version history** lists earlier live versions with **Make live** on each.

## If something looks different

- "No secondary coverage": there is no backup, and primary coverage handles everything.
- A destination still reaches the old person after you changed the schedule: publish the schedule. Destinations follow the live version, not the draft.
- You need a window that crosses midnight: a **Start** later than the **End** is allowed. The default backup window, 19:00 to 07:00, already does this.

[[route:/critical-alerts/schedules|Open Schedules]]
