> For the complete documentation index, see [llms.txt](https://docs.ilert.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ilert.com/on-call-management-and-escalations/on-call-schedules/static-schedules.md).

# Static schedules

Create a static on-call schedule by placing individual shifts on a calendar, for coverage that follows no repeating pattern.

A static schedule is a calendar of individual shifts. You place each shift yourself, and nothing repeats. Use one when you can only plan a few weeks ahead or when coverage has no pattern, such as a launch weekend or on-call over the holidays. If people take turns in a repeating cycle, use a [recurring schedule](/on-call-management-and-escalations/on-call-schedules/recurring-schedules.md) instead.

You can't turn a static schedule into a recurring one later, or the other way around.

## Create a static schedule

{% stepper %}
{% step %}

### Open the editor

Go to **On-call schedules** and click **Create schedule**. On **Create new on-call schedule**, click **Continue** on the **Static schedule** card.
{% endstep %}

{% step %}

### Name the schedule

Fill in the settings on the left:

| Field                        | What it does                                                                                                                                                        |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Teams**                    | The teams that own the schedule. It starts with the team you have selected in the top bar. A schedule can belong to up to 15 teams.                                 |
| **Name**                     | Required, and unique in your account.                                                                                                                               |
| **Timezone**                 | The timezone the shifts are planned in. It starts as the timezone in your profile and can't be changed after the schedule is saved.                                 |
| **Default shift duration**   | How long a new shift lasts, from 8 hours to 4 weeks, or **Custom** for any number of hours and minutes.                                                             |
| **Default shift start time** | When a shift dragged onto a day starts, in `HH:mm`. This is your own preference, not part of the schedule, so it carries over to the next static schedule you edit. |
| {% endstep %}                |                                                                                                                                                                     |

{% step %}

### Add shifts

Add shifts in either of two ways:

* **Drag a user onto the calendar.** Find them in the list under **Drag users onto calendar**, which you can search by name or email. In month view, the shift starts on that day at the default start time, or now if you drop it on today after that time. If another shift ends that day, the new one starts when it ends, and it stops early where the next shift begins, so back-to-back shifts need no exact times. In week view, the shift starts at the time slot you drop it on. Either way, it lasts the default shift duration unless it is cut short.
* **Click a day or select a range of days.** A **Create shift** dialog opens with **Start** and **End** filled in. Choose the **User** and click **Create**.

To edit or delete a shift, click it. To move a shift, drag it, and to change its length, drag its edges. In month view, moving a shift resets its start to the default start time and its end to midnight after its last day, so click it afterwards to check its times.
{% endstep %}

{% step %}

### Save

Click **Save**. ilert opens the new schedule.
{% endstep %}
{% endstepper %}

<figure><img src="https://3394882078-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M76ygPnS4HUcFSX8ulm%2Fuploads%2Fgit-blob-f3aaad4559d791cbe1bde578a5a527a68cf500c3%2Fstatic-schedule-editor.png?alt=media" alt="The Create static schedule editor. On the left are Teams, Name set to Acme Payments launch weekend, Timezone, Default shift duration set to 24 hours, Default shift start time set to 09:00, and a user list under Drag users onto calendar filtered to Helena Guzman, then a Warn me about gaps when saving checkbox and Save. On the right, a month calendar for October 2026 shows three 24-hour shifts that start at 09:00: Helena Guzman on Friday, Humza Vega on Saturday and Helena Guzman on Sunday."><figcaption><p>Each user dropped on a day gets one shift of the default duration, starting at the default start time.</p></figcaption></figure>

To check the result, look at **On-call** on the schedule's page. It shows who is on call now and who is next. A static schedule does nothing on its own. It pages people only once an [escalation policy](/on-call-management-and-escalations/escalation-policies.md) uses it.

The user list isn't shown in narrow browser windows. There, add shifts by clicking days.

## Rules for shifts

* **One person at a time.** Shifts can't overlap. The shift dialog shows **Date should not overlap with other shifts**, and ilert rejects overlapping shifts when you save. Back-to-back shifts are fine, and ilert merges back-to-back shifts of the same person into one.
* **Stakeholders and viewers can't take shifts.** The user list leaves them out. It isn't limited to the schedule's teams.
* **The past can't change.** When you save, ilert drops shifts that have already ended and starts a shift that is under way from the current time. It does this without a warning.
* **A schedule needs a shift in the future.** Without one, ilert refuses to save the schedule, even to rename it. For an existing schedule whose shifts have all ended, it shows **All shifts have been dropped as they were in the past, shifts must not be empty.** For a new schedule, or after you delete every shift, it shows **shifts must not be empty (Note: past shifts are dropped)**. Add a future shift, then save.

## Warn about gaps

A gap is a stretch of time between now and the last shift in which nobody is on call. Time after the last shift doesn't count.

When **Warn me about gaps when saving** is ticked, ilert refuses to save a schedule with a gap and shows **schedule contains gaps**. It saves nothing and doesn't show where the gaps are. To save a schedule with gaps on purpose, untick the box. ilert stores the setting with the schedule.

When an alert escalates to a schedule during a gap, ilert moves straight on to the next level of the escalation policy, without waiting for the level's timeout. If no level has anyone on call, nobody is notified and the alert stays pending. See [What happens if there is a gap in a schedule?](/on-call-management-and-escalations/on-call-schedules.md#what-happens-if-there-is-a-gap-in-a-schedule)

## Edit a static schedule

Open the schedule and click **Edit**. The editor works as it does for a new schedule, except that **Timezone** is locked. Shifts that have ended open read-only. See [The past can't change](#rules-for-shifts).

To cover a single shift for someone, add an override instead of editing the schedule. Overrides work the same way on static and recurring schedules. See [Overrides](/on-call-management-and-escalations/on-call-schedules.md#overrides).

## Create one through the API

A static schedule has `"type": "STATIC"` and a `shifts` array. Each shift has a `user`, a `start` and an `end`, with times in the schedule's `timezone` and without an offset. To make ilert reject a schedule with gaps, add `?abort-on-gaps=true` to the request. See the [schedules API reference](/developer-docs/rest-api/api-reference/schedules.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ilert.com/on-call-management-and-escalations/on-call-schedules/static-schedules.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
