> ## Documentation Index
> Fetch the complete documentation index at: https://test-8ad8522e-feat-ai-sre.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Schedule

> Flexibly configure schedules and rotation rules to ensure 24/7 incident response

In an On-call system, **schedules** are the bridge connecting "incidents" to "people". A well-designed on-call mechanism ensures someone always responds when incidents occur, while preventing any single person from being under high pressure for extended periods, enabling sustainable operations for the team.

Flashduty On-call provides highly flexible scheduling capabilities, supporting daily, weekly, and custom rotation cycles, as well as complex scenarios like day/night shifts and primary/backup on-call.

## Core Concepts

***

Understanding these concepts before configuration will help you better plan your schedules:

| Concept                 | Description                                                                                                                                                                                                                                                   |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Schedule**            | An independent on-call unit (e.g., "SRE Schedule", "DBA Schedule") containing multiple specific on-call rules                                                                                                                                                 |
| **Layer**               | A schedule can contain multiple layers of rules. For example, layer one is "Day Shift", layer two is "Night Shift". Multiple layers combine to form the complete on-call plan                                                                                 |
| **Rotation**            | Determines how on-call personnel hand off. For example, "handoff every Monday at 10 AM"                                                                                                                                                                       |
| **Override**            | Temporarily adjust the on-call person for a specific time period without modifying permanent rules (commonly used for leave, temporary coverage)                                                                                                              |
| **Date Mask**           | Select which days to participate in on-call, e.g., Team A on-call Monday to Friday, Team B on weekends                                                                                                                                                        |
| **Continuous Rotation** | When enabled, rotation boundaries are calculated based on shift start time, preventing shifts from being split at 00:00. Only supported when date mask is configured. See [Date mask and continuous rotation](#date-mask-and-continuous-rotation) for details |
| **Fair Rotation**       | The system automatically adjusts rotation order to ensure each member gets opportunities in different time periods, preventing someone from always being on-call during weekends                                                                              |

![Schedule Concepts](https://docs-cdn.flashcat.cloud/images/png/3423a4f3133d5caa1f0aaebca970d404.png)

## Configuration Process

***

<Steps>
  <Step title="Create a Schedule">
    Go to **Schedule Management**, click "Create Schedule"

    * **Schedule Name**: 1–40 characters, must be unique within the account
    * **Owning Team**: Specifies which team manages this schedule; team members gain edit permissions for this schedule
    * **Schedule Description**: Supports Markdown syntax, content can be included in notifications; up to 500 characters
    * **Time Zone**: Required. The schedule's rotations and shifts are computed on the **wall-clock time of this zone** (e.g. "handover at 09:00 daily" means 09:00 in the schedule's own zone). **It cannot be changed after creation**; to use a different zone, create a new schedule and migrate the dispatch policy references

    <Note>
      The schedule list shows a **Time Zone** column. The roster page labels two zones side by side: "times on this page are shown in your time zone" is the viewer's effective zone (personal time zone, or the organization zone when none is set), while the **schedule time zone** is the zone the shifts are defined in; concrete times on screen are converted to the viewer's zone.
    </Note>

    <Note>Schedules created before multi-time-zone support shipped have no time zone field and are evaluated as Asia/Shanghai.</Note>

    <Note>The Free plan allows you to create only 1 schedule. Upgrade to the Standard plan or higher to create more.</Note>
  </Step>

  <Step title="Set Shift Notifications">
    To prevent forgetting shifts or handoffs, the system provides two notification triggers:

    * **Advance Notification**: Notifies both outgoing and incoming personnel N minutes before handoff (in 5-minute increments)
    * **Scheduled Notification**: Sends a daily notification at a fixed time (e.g., 8:00 AM) reminding who is currently on-call. The fixed time is interpreted in the schedule's time zone (same wall-clock basis as rotations and shifts); when your time zone differs from the schedule's, a badge next to the time input labels the schedule's time zone

    After enabling either notification trigger, you need to configure notification channels:

    * **Personal Channels**: Send notifications directly to on-call personnel
      * **Follow personal preference**: Each responder receives notifications via their personally configured channels
      * **Follow unified settings**: Administrators select notification channels (SMS, email, and integrated IM apps)
    * **Group Chat Channels**: Send notifications to group chats, supporting the following platforms:
      * Feishu app, DingTalk app, Slack app (select chat groups via integrated IM apps; the picker automatically excludes platform-created chats such as war rooms, and stale targets render as **Chat unavailable** and can be removed)
      * WeCom bot, DingTalk bot, Feishu bot (send via webhook URL)
      * Slack bot, Telegram bot, Zoom bot

    <Warning>
      When you choose **Follow personal preference**, on-call personnel must meet the following prerequisites — otherwise they will not receive notifications even while on shift:

      1. Set up personal channels such as SMS and email in **Personal Center**
      2. Log in through the **Flashduty app** inside an IM platform (Feishu, DingTalk, WeCom, etc.) and complete account binding
      3. Configure notification preferences on the **Personal Account** page (choose which channels to prioritize)
    </Warning>
  </Step>

  <Step title="Define On-call Rules">
    This is the core step. You can add one or more layers of rules. Each layer includes:

    * **On-call Personnel**: Select members participating in rotation, supports grouping and primary/backup roles
    * **Start Time**: When this layer of rules takes effect
    * **End Time** (optional): When this layer expires. Leave blank for no expiration. Combined with the start time, this is useful for phased rotations — for example, "effective starting next Monday" or "valid within this quarter"
    * **Rotation Cycle**: Supports four units — hour, day, week, and month — with values from 1 to 30. For example, "2 days" means rotation every 2 days
    * **Handoff Time**: When the rotation cycle adds up to 1 week (e.g., 1 week, or 7 days), you can specify the day and time for handoff
    * **Fair Rotation**: When enabled, the system automatically adjusts rotation order to prevent someone from always being on-call during weekends
    * **Date Mask**: Select which days of the week to schedule on-call. **Monday through Friday** are selected by default. See [Date mask and continuous rotation](#date-mask-and-continuous-rotation) for details
    * **Time Restriction**: (Optional) Restrict actual on-call hours within each rotation cycle, with the following modes:
      * **No restriction**: Members are on-call for the entire rotation cycle
      * **Daily**: Set daily on-call time ranges (e.g., 09:00–18:00), multiple periods can be added. Input uses HH:MM wall-clock time, which cannot express 24:00 — so **an end time of `00:00` means end of day**, and `00:00–00:00` means on-call for the full day
      * **Weekly**: Set day+time on-call ranges (e.g., Monday 09:00 – Friday 18:00), multiple periods can be added

    <Note>When date mask is enabled, the "Weekly" restriction mode is unavailable since the date mask already provides day-of-week control. If you enable the date mask while the time restriction is already in "Weekly" mode, the system automatically resets it to "No restriction" to avoid conflicts. After setting time restrictions, there may be gaps with no one on-call — ensure other rules provide coverage.</Note>
  </Step>
</Steps>

## Delete a schedule

***

You can delete a schedule from the schedule list or the schedule detail page. The system asks for confirmation before deletion.

<Warning>
  If a schedule is referenced by escalation rules, the delete button is disabled. Hover over it to see the list of referencing escalation rules (channel → rule name). Remove the references in the corresponding channels before deleting the schedule, so that you don't miss new incident notifications after deletion.
</Warning>

## On-call roles

***

On-call roles distinguish responders with different responsibilities within the same schedule (e.g., "primary" and "backup") and are an account-level resource:

* **Shared across the account**: Roles take effect at the account level and are shared by all schedules
* **Grouped by role inside a rule**: When adding personnel to a schedule rule, you can bind members to a specific role, forming a "role → member" mapping
* **Escalation rules target by role**: Escalation rules support notifying **all on-call personnel**, **specific roles** (e.g., notify primary only), or **specific members**, enabling finer-grained alert routing

<Note>
  By default, each account has only one on-call role, so you don't need to choose a role when adding responders. If you need multiple roles (such as primary/backup), contact Flashduty support to enable them. Once enabled, you can assign roles to members both in schedule rules and in overrides. Self-service role management is not available in the console.
</Note>

## Override and time off

***

When on-call personnel need time off or have a temporary conflict, **don't modify permanent rules** — use the "Override" feature instead. An override is an independent rule type that **fully preempts** the normal on-call rules within its effective window. Once the window ends, the original rules resume automatically.

### Two ways to create an override

<Steps>
  <Step title="Create from the calendar">
    On the schedule details page, click the time slot you want to adjust in the calendar view, and choose **Override**. The system prefills the default window as **\[today 00:00, next day 00:00]**, which you can adjust as needed.
  </Step>

  <Step title="Create via &#x22;Add Rule&#x22;">
    In the on-call rule list, click **Add Rule** and switch the rule type to **Override**. This entry point is ideal for planning time off or coverage in bulk ahead of time.
  </Step>
</Steps>

### Configurable fields

Overrides have a smaller field set than regular rules and only include:

* **Start Time** / **End Time**: Define the override window. Defaults to `[today 00:00, next day 00:00]`
* **Replacement Person**: The member who replaces the original on-call person within that window

Overrides do not support rotation cycle, date mask, grouping, or other regular-rule fields. For accounts with multiple on-call roles enabled, you can also assign a role to the replacement person in an override.

<Note>
  * **Preemption semantics**: Within its time window, an override **fully replaces** all regular on-call rules (regardless of which layer they belong to), rather than stacking with them. Once the window ends, the original rules automatically resume
  * **Audit trail**: All override records are saved for later review
</Note>

<Tip>
  We recommend having a brief sync meeting between outgoing and incoming on-call personnel before official handoff to confirm outstanding issues and current system status—this is safer than just system notifications.
</Tip>

## Date mask and continuous rotation

***

### Date mask

Date mask controls which days of the week an on-call rule takes effect. By selecting different day combinations, you can flexibly implement differentiated scheduling between weekdays and weekends.

Common use cases:

* **Weekday/weekend separation**: Team A on-call during weekdays, Team B on weekends
* **Specific day scheduling**: Assign certain personnel only on Monday, Wednesday, and Friday
* **Day/night shift by day**: Configure day and night shift rules for weekdays, and full-day on-call rules for weekends

### Continuous rotation

By default, schedules are divided at 00:00 each calendar day. If a shift spans midnight, it will be split into separate time segments.

![Default Rotation](https://docs-cdn.flashcat.cloud/images/png/695199d7990bf99cafab58ed10be75a1.png)

When **continuous rotation** is enabled, rotation boundaries are calculated based on shift start time rather than the 00:00 cutoff. Each on-call member will complete a full rotation cycle without being split at midnight.

![Continuous Rotation](https://docs-cdn.flashcat.cloud/images/png/d56eca56d65aa17df67110ad4a0c61a7.png)

<Note>
  Consider enabling continuous rotation in the following scenarios:

  * Rotation cycle is 24 hours
  * Shift start time is not 00:00
  * Day-of-week date mask is configured
  * Different rotation rules for weekdays and weekends
</Note>

## Common scheduling scenarios

***

<Tabs>
  <Tab title="24/7 Simple Rotation">
    **Requirement**: Ops team has A, B, C—each person on-call for one week, handoff Monday at 10:00 AM.

    **Configuration**:

    * Personnel sequence: A, B, C
    * Rotation cycle: 1 week
    * Handoff time: Monday 10:00

    **Result**: A on-call one week → B on-call one week → C on-call one week → A on-call one week...

    ![Simple Rotation](https://docs-cdn.flashcat.cloud/images/png/1a730fa3bf86e2bf206f1e4c9869371c.png)
  </Tab>

  <Tab title="Day/Night Shift Separation">
    **Requirement**:

    * **Day Shift** (9:00-18:00): Development team rotates
    * **Night Shift** (18:00-next day 9:00): SRE team rotates
    * **Weekends**: Monitoring team on-call all day

    **Configuration Approach**: Create multiple rules

    1. **Rule 1 (Dev Day Shift)**: Add dev personnel, restrict effective time to `Weekdays 09:00 ~ 18:00`
    2. **Rule 2 (SRE Night Shift)**: Add SRE personnel, restrict effective time to `Weekdays 18:00 ~ 09:00`
    3. **Rule 3 (Monitoring Team)**: Add monitoring personnel, restrict effective time to `Saturday 00:00 ~ Sunday 23:59`

    ![Day Night Shift Rules](https://docs-cdn.flashcat.cloud/images/png/b9d927672873bd1baf46f5146fde34e9.png)

    ![Day Night Shift Effect](https://docs-cdn.flashcat.cloud/images/png/d9045ae9474bc300d38bf0d24bb69abc.png)
  </Tab>

  <Tab title="Primary/Backup On-call">
    **Requirement**: Critical business needs double coverage with a primary and backup on-call person.

    **Configuration Approach**:

    * **Within Same Rule**: When adding on-call personnel, you can set primary and backup together
    * **Notification**: In escalation rule notification recipients, you can choose to notify the schedule's primary or backup on-call
    * **Advantage**: No need to create multiple layers, simpler management

    ![Primary Backup Configuration](https://docs-cdn.flashcat.cloud/images/png/3eef3b3290befffa076316d1bae8b521.png)

    ![Primary Backup Notification](https://docs-cdn.flashcat.cloud/images/png/261cb975427527cc305c3ad467dd935e.png)
  </Tab>
</Tabs>

## View schedule details

***

Click a schedule name to enter the detail page, where you can view the scheduling calendar and manage on-call rules. The upper right corner provides these options:

* **View switcher**: Toggle between "Week", "Two Weeks", and "Calendar" (month view)
* **Highlight my shifts**: When enabled, your on-call shifts are highlighted for quick identification

Click any time slot in the calendar to view the current responders or create an override.

## View My Schedule

***

The **Schedules** list page embeds a **My Schedule** section at the top, summarizing your on-call assignments in a week view: the left column lists the schedules in which you have shifts this week, and the calendar on the right shows your on-call time slots in each schedule.

Click the left and right arrows next to the section title to browse previous or upcoming weeks, and click the dot button in the middle to quickly jump back to the current week.

Shift times are rendered in your effective time zone; when a schedule's time zone differs from yours, an extra line showing the same slot in the schedule's time zone is attached for comparison.

## Related Topics

***

<CardGroup cols={2}>
  <Card title="Escalation Rules" icon="sitemap" href="/en/on-call/channel/escalation-rule">
    Configure alert notification rules and escalation paths
  </Card>

  <Card title="Service Calendar" icon="calendar" href="/en/on-call/configuration/service-calendar">
    Define workdays and rest days
  </Card>
</CardGroup>
