> 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/developer-docs/rest-api/api-reference/schedules.md).

# Schedules

## GET /schedules

> List on-call schedules.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Schedule":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"type":{"type":"string","enum":["STATIC","RECURRING"]},"scheduleLayers":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerConfig"}},"shifts":{"type":"array","items":{"$ref":"#/components/schemas/ShiftRel"}},"showGaps":{"type":"boolean"},"defaultShiftDuration":{"type":"string","format":"P7D"},"currentShift":{"$ref":"#/components/schemas/ShiftRel"},"nextShift":{"$ref":"#/components/schemas/ShiftRel"},"teams":{"type":"array","items":{"$ref":"#/components/schemas/TeamRel"}},"managedBy":{"$ref":"#/components/schemas/ManagedBy"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"ScheduleLayerConfig":{"required":["rotation","startsOn","users"],"type":"object","properties":{"name":{"type":"string"},"startsOn":{"type":"string","format":"date-time"},"endsOn":{"type":"string","format":"date-time"},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserRel"}},"rotation":{"type":"string","description":"ISO-8601 duration of the rotation length. Whole-day rotations are formatted like 'P7D'; hourly (sub-day) rotations are supported and formatted like 'PT4H'.","format":"P7D"},"restrictionType":{"type":"string","description":"Note: 'TIMES_OF_DAY' is just a UI state representation, the API always uses 'TIMES_OF_WEEK'","enum":["TIMES_OF_WEEK"]},"restrictions":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerRestriction"}}}},"UserRel":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"ScheduleLayerRestriction":{"description":"When this layer's users are on call, as a half-open interval [from, to) on the week. A 'to' at or before its 'from' wraps past Monday 00:00, so FRIDAY 17:00 to MONDAY 09:00 is one interval; 'from' equal to 'to' covers the whole week.","required":["from","to"],"type":"object","properties":{"from":{"$ref":"#/components/schemas/TimeOfWeek"},"to":{"$ref":"#/components/schemas/TimeOfWeek"}}},"TimeOfWeek":{"required":["dayOfWeek","time"],"type":"object","properties":{"dayOfWeek":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"time":{"type":"string","format":"15:00"}}},"ShiftRel":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/UserRel"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"TeamRel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"ManagedBy":{"type":"object","readOnly":true,"description":"Present when this entity is managed outside of the ilert web app, for example through Terraform, Pulumi or the API. Read-only.","properties":{"type":{"type":"string","enum":["API","TERRAFORM","PULUMI","ILERT"]},"source":{"type":"string","description":"Identifier of the system managing this entity."}}}}},"paths":{"/schedules":{"get":{"tags":["Schedules"],"summary":"List on-call schedules.","parameters":[{"name":"include","in":"query","description":"Describes optional properties that should be included in the response. You may declare multiple. (currentShift, nextShift, scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules], past [show shifts in the past, only for STATIC])","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["scheduleLayers","shifts","currentShift","nextShift","past"]}}},{"name":"start-index","in":"query","description":"an integer specifying the starting point (beginning with 0) when paging through a list of entities","schema":{"type":"integer","format":"int32","default":0}},{"name":"max-results","in":"query","description":"the maximum number of results when paging through a list of schedules.","schema":{"maximum":20,"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"a list of on-call schedules","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Schedule"}}}}}}}}}}
```

## POST /schedules

> Create a new on-call schedule.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Schedule":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"type":{"type":"string","enum":["STATIC","RECURRING"]},"scheduleLayers":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerConfig"}},"shifts":{"type":"array","items":{"$ref":"#/components/schemas/ShiftRel"}},"showGaps":{"type":"boolean"},"defaultShiftDuration":{"type":"string","format":"P7D"},"currentShift":{"$ref":"#/components/schemas/ShiftRel"},"nextShift":{"$ref":"#/components/schemas/ShiftRel"},"teams":{"type":"array","items":{"$ref":"#/components/schemas/TeamRel"}},"managedBy":{"$ref":"#/components/schemas/ManagedBy"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"ScheduleLayerConfig":{"required":["rotation","startsOn","users"],"type":"object","properties":{"name":{"type":"string"},"startsOn":{"type":"string","format":"date-time"},"endsOn":{"type":"string","format":"date-time"},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserRel"}},"rotation":{"type":"string","description":"ISO-8601 duration of the rotation length. Whole-day rotations are formatted like 'P7D'; hourly (sub-day) rotations are supported and formatted like 'PT4H'.","format":"P7D"},"restrictionType":{"type":"string","description":"Note: 'TIMES_OF_DAY' is just a UI state representation, the API always uses 'TIMES_OF_WEEK'","enum":["TIMES_OF_WEEK"]},"restrictions":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerRestriction"}}}},"UserRel":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"ScheduleLayerRestriction":{"description":"When this layer's users are on call, as a half-open interval [from, to) on the week. A 'to' at or before its 'from' wraps past Monday 00:00, so FRIDAY 17:00 to MONDAY 09:00 is one interval; 'from' equal to 'to' covers the whole week.","required":["from","to"],"type":"object","properties":{"from":{"$ref":"#/components/schemas/TimeOfWeek"},"to":{"$ref":"#/components/schemas/TimeOfWeek"}}},"TimeOfWeek":{"required":["dayOfWeek","time"],"type":"object","properties":{"dayOfWeek":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"time":{"type":"string","format":"15:00"}}},"ShiftRel":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/UserRel"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"TeamRel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"ManagedBy":{"type":"object","readOnly":true,"description":"Present when this entity is managed outside of the ilert web app, for example through Terraform, Pulumi or the API. Read-only.","properties":{"type":{"type":"string","enum":["API","TERRAFORM","PULUMI","ILERT"]},"source":{"type":"string","description":"Identifier of the system managing this entity."}}}}},"paths":{"/schedules":{"post":{"tags":["Schedules"],"summary":"Create a new on-call schedule.","parameters":[{"name":"abort-on-gaps","in":"query","description":"Used for static schedules to prevent creating schedules with gaps","schema":{"type":"boolean"}}],"requestBody":{"description":"The on-call schedule. (scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules])","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}},"required":true},"responses":{"201":{"description":"The created on-call schedule","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}}}}}}}}
```

## GET /schedules/{id}

> Get the on-call schedule with the specified id.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Schedule":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"type":{"type":"string","enum":["STATIC","RECURRING"]},"scheduleLayers":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerConfig"}},"shifts":{"type":"array","items":{"$ref":"#/components/schemas/ShiftRel"}},"showGaps":{"type":"boolean"},"defaultShiftDuration":{"type":"string","format":"P7D"},"currentShift":{"$ref":"#/components/schemas/ShiftRel"},"nextShift":{"$ref":"#/components/schemas/ShiftRel"},"teams":{"type":"array","items":{"$ref":"#/components/schemas/TeamRel"}},"managedBy":{"$ref":"#/components/schemas/ManagedBy"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"ScheduleLayerConfig":{"required":["rotation","startsOn","users"],"type":"object","properties":{"name":{"type":"string"},"startsOn":{"type":"string","format":"date-time"},"endsOn":{"type":"string","format":"date-time"},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserRel"}},"rotation":{"type":"string","description":"ISO-8601 duration of the rotation length. Whole-day rotations are formatted like 'P7D'; hourly (sub-day) rotations are supported and formatted like 'PT4H'.","format":"P7D"},"restrictionType":{"type":"string","description":"Note: 'TIMES_OF_DAY' is just a UI state representation, the API always uses 'TIMES_OF_WEEK'","enum":["TIMES_OF_WEEK"]},"restrictions":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerRestriction"}}}},"UserRel":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"ScheduleLayerRestriction":{"description":"When this layer's users are on call, as a half-open interval [from, to) on the week. A 'to' at or before its 'from' wraps past Monday 00:00, so FRIDAY 17:00 to MONDAY 09:00 is one interval; 'from' equal to 'to' covers the whole week.","required":["from","to"],"type":"object","properties":{"from":{"$ref":"#/components/schemas/TimeOfWeek"},"to":{"$ref":"#/components/schemas/TimeOfWeek"}}},"TimeOfWeek":{"required":["dayOfWeek","time"],"type":"object","properties":{"dayOfWeek":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"time":{"type":"string","format":"15:00"}}},"ShiftRel":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/UserRel"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"TeamRel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"ManagedBy":{"type":"object","readOnly":true,"description":"Present when this entity is managed outside of the ilert web app, for example through Terraform, Pulumi or the API. Read-only.","properties":{"type":{"type":"string","enum":["API","TERRAFORM","PULUMI","ILERT"]},"source":{"type":"string","description":"Identifier of the system managing this entity."}}}}},"paths":{"/schedules/{id}":{"get":{"tags":["Schedules"],"summary":"Get the on-call schedule with the specified id.","parameters":[{"name":"id","in":"path","description":"entity ID","required":true,"schema":{"type":"number"}},{"name":"include","in":"query","description":"Describes optional properties that should be included in the response. You may declare multiple. (currentShift, nextShift, scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules], past [show shifts in the past, only for STATIC])","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["scheduleLayers","shifts","currentShift","nextShift","past"]}}}],"responses":{"200":{"description":"The schedule object. (scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules])","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}}}}}}}}
```

## PUT /schedules/{id}

> Update an on-call schedule.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Schedule":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"type":{"type":"string","enum":["STATIC","RECURRING"]},"scheduleLayers":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerConfig"}},"shifts":{"type":"array","items":{"$ref":"#/components/schemas/ShiftRel"}},"showGaps":{"type":"boolean"},"defaultShiftDuration":{"type":"string","format":"P7D"},"currentShift":{"$ref":"#/components/schemas/ShiftRel"},"nextShift":{"$ref":"#/components/schemas/ShiftRel"},"teams":{"type":"array","items":{"$ref":"#/components/schemas/TeamRel"}},"managedBy":{"$ref":"#/components/schemas/ManagedBy"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"ScheduleLayerConfig":{"required":["rotation","startsOn","users"],"type":"object","properties":{"name":{"type":"string"},"startsOn":{"type":"string","format":"date-time"},"endsOn":{"type":"string","format":"date-time"},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserRel"}},"rotation":{"type":"string","description":"ISO-8601 duration of the rotation length. Whole-day rotations are formatted like 'P7D'; hourly (sub-day) rotations are supported and formatted like 'PT4H'.","format":"P7D"},"restrictionType":{"type":"string","description":"Note: 'TIMES_OF_DAY' is just a UI state representation, the API always uses 'TIMES_OF_WEEK'","enum":["TIMES_OF_WEEK"]},"restrictions":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerRestriction"}}}},"UserRel":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"ScheduleLayerRestriction":{"description":"When this layer's users are on call, as a half-open interval [from, to) on the week. A 'to' at or before its 'from' wraps past Monday 00:00, so FRIDAY 17:00 to MONDAY 09:00 is one interval; 'from' equal to 'to' covers the whole week.","required":["from","to"],"type":"object","properties":{"from":{"$ref":"#/components/schemas/TimeOfWeek"},"to":{"$ref":"#/components/schemas/TimeOfWeek"}}},"TimeOfWeek":{"required":["dayOfWeek","time"],"type":"object","properties":{"dayOfWeek":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"time":{"type":"string","format":"15:00"}}},"ShiftRel":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/UserRel"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"TeamRel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"ManagedBy":{"type":"object","readOnly":true,"description":"Present when this entity is managed outside of the ilert web app, for example through Terraform, Pulumi or the API. Read-only.","properties":{"type":{"type":"string","enum":["API","TERRAFORM","PULUMI","ILERT"]},"source":{"type":"string","description":"Identifier of the system managing this entity."}}}}},"paths":{"/schedules/{id}":{"put":{"tags":["Schedules"],"summary":"Update an on-call schedule.","parameters":[{"name":"id","in":"path","description":"entity ID","required":true,"schema":{"type":"number"}},{"name":"abort-on-gaps","in":"query","description":"Used for static schedules to prevent updating schedules with gaps","schema":{"type":"boolean"}}],"requestBody":{"description":"The on-call schedule. (scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules])","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}},"required":true},"responses":{"200":{"description":"The updated on-call schedule","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}}}}}}}}
```

## DELETE /schedules/{id}

> Delete the on-call schedule with the specified id.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}}},"paths":{"/schedules/{id}":{"delete":{"tags":["Schedules"],"summary":"Delete the on-call schedule with the specified id.","parameters":[{"name":"id","in":"path","description":"entity ID","required":true,"schema":{"type":"number"}}],"responses":{"204":{"description":"empty response","content":{}}}}}}}
```

## GET /schedules/name/{name}

> Get the schedule with the specified name.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Schedule":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"type":{"type":"string","enum":["STATIC","RECURRING"]},"scheduleLayers":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerConfig"}},"shifts":{"type":"array","items":{"$ref":"#/components/schemas/ShiftRel"}},"showGaps":{"type":"boolean"},"defaultShiftDuration":{"type":"string","format":"P7D"},"currentShift":{"$ref":"#/components/schemas/ShiftRel"},"nextShift":{"$ref":"#/components/schemas/ShiftRel"},"teams":{"type":"array","items":{"$ref":"#/components/schemas/TeamRel"}},"managedBy":{"$ref":"#/components/schemas/ManagedBy"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"ScheduleLayerConfig":{"required":["rotation","startsOn","users"],"type":"object","properties":{"name":{"type":"string"},"startsOn":{"type":"string","format":"date-time"},"endsOn":{"type":"string","format":"date-time"},"users":{"type":"array","items":{"$ref":"#/components/schemas/UserRel"}},"rotation":{"type":"string","description":"ISO-8601 duration of the rotation length. Whole-day rotations are formatted like 'P7D'; hourly (sub-day) rotations are supported and formatted like 'PT4H'.","format":"P7D"},"restrictionType":{"type":"string","description":"Note: 'TIMES_OF_DAY' is just a UI state representation, the API always uses 'TIMES_OF_WEEK'","enum":["TIMES_OF_WEEK"]},"restrictions":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleLayerRestriction"}}}},"UserRel":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"ScheduleLayerRestriction":{"description":"When this layer's users are on call, as a half-open interval [from, to) on the week. A 'to' at or before its 'from' wraps past Monday 00:00, so FRIDAY 17:00 to MONDAY 09:00 is one interval; 'from' equal to 'to' covers the whole week.","required":["from","to"],"type":"object","properties":{"from":{"$ref":"#/components/schemas/TimeOfWeek"},"to":{"$ref":"#/components/schemas/TimeOfWeek"}}},"TimeOfWeek":{"required":["dayOfWeek","time"],"type":"object","properties":{"dayOfWeek":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"time":{"type":"string","format":"15:00"}}},"ShiftRel":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/UserRel"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"TeamRel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"ManagedBy":{"type":"object","readOnly":true,"description":"Present when this entity is managed outside of the ilert web app, for example through Terraform, Pulumi or the API. Read-only.","properties":{"type":{"type":"string","enum":["API","TERRAFORM","PULUMI","ILERT"]},"source":{"type":"string","description":"Identifier of the system managing this entity."}}}}},"paths":{"/schedules/name/{name}":{"get":{"tags":["Schedules"],"summary":"Get the schedule with the specified name.","parameters":[{"name":"name","in":"path","description":"unique name of the schedule","required":true,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Describes optional properties that should be included in the response. You may declare multiple. (currentShift, nextShift, scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules], past [show shifts in the past, only for STATIC])","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["scheduleLayers","shifts","currentShift","nextShift","past"]}}}],"responses":{"200":{"description":"The schedule object. (scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules])","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}}}}}}}}
```

## GET /schedules/{id}/shifts

> Get shifts for the specified schedule and date range.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Shift":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"User":{"required":["email","firstName","lastName"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"position":{"type":"string"},"department":{"type":"string"},"avatarUrl":{"type":"string","readOnly":true},"language":{"type":"string","enum":["de","en","it","fr","es"],"description":"Language of the user. `it`, `fr` and `es` only apply to notifications; the web app is shown in English for these languages."},"region":{"type":"string","enum":["DE","GB","CH","CN","IN","US","FR","ES","CA","IE"]},"role":{"$ref":"#/components/schemas/Role"},"shiftColor":{"type":"string","description":"Optional hex-color code for the user's shifts in schedules calendars"},"mutedUntil":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"createdAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"updatedAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"Role":{"type":"string","enum":["STAKEHOLDER","GUEST","VIEWER","RESPONDER","USER","ADMIN"],"description":"The user's role."}}},"paths":{"/schedules/{id}/shifts":{"get":{"tags":["Schedules"],"summary":"Get shifts for the specified schedule and date range.","parameters":[{"name":"id","in":"path","description":"entity ID","required":true,"schema":{"type":"number"}},{"name":"from","in":"query","description":"from date, default is start of last month","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","description":"until date, default is from date plus 3 months","schema":{"type":"string"}},{"name":"exclude-overrides","in":"query","description":"if true, shifts won't include overrides","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"the shift objects","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Shift"}}}}}}}}}}
```

## GET /schedules/{id}/overrides

> Get overrides for the specified schedule.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Shift":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"User":{"required":["email","firstName","lastName"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"position":{"type":"string"},"department":{"type":"string"},"avatarUrl":{"type":"string","readOnly":true},"language":{"type":"string","enum":["de","en","it","fr","es"],"description":"Language of the user. `it`, `fr` and `es` only apply to notifications; the web app is shown in English for these languages."},"region":{"type":"string","enum":["DE","GB","CH","CN","IN","US","FR","ES","CA","IE"]},"role":{"$ref":"#/components/schemas/Role"},"shiftColor":{"type":"string","description":"Optional hex-color code for the user's shifts in schedules calendars"},"mutedUntil":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"createdAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"updatedAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"Role":{"type":"string","enum":["STAKEHOLDER","GUEST","VIEWER","RESPONDER","USER","ADMIN"],"description":"The user's role."}}},"paths":{"/schedules/{id}/overrides":{"get":{"tags":["Schedules"],"summary":"Get overrides for the specified schedule.","parameters":[{"name":"id","in":"path","description":"entity ID","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"the shift objects","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Shift"}}}}}}}}}}
```

## PUT /schedules/{id}/overrides

> Add an override shift to a schedule.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Shift":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"User":{"required":["email","firstName","lastName"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"position":{"type":"string"},"department":{"type":"string"},"avatarUrl":{"type":"string","readOnly":true},"language":{"type":"string","enum":["de","en","it","fr","es"],"description":"Language of the user. `it`, `fr` and `es` only apply to notifications; the web app is shown in English for these languages."},"region":{"type":"string","enum":["DE","GB","CH","CN","IN","US","FR","ES","CA","IE"]},"role":{"$ref":"#/components/schemas/Role"},"shiftColor":{"type":"string","description":"Optional hex-color code for the user's shifts in schedules calendars"},"mutedUntil":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"createdAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"updatedAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"Role":{"type":"string","enum":["STAKEHOLDER","GUEST","VIEWER","RESPONDER","USER","ADMIN"],"description":"The user's role."},"ScheduleRel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"type":{"type":"string","enum":["STATIC","RECURRING"]}}}}},"paths":{"/schedules/{id}/overrides":{"put":{"tags":["Schedules"],"summary":"Add an override shift to a schedule.","parameters":[{"name":"id","in":"path","description":"entity ID","required":true,"schema":{"type":"number"}}],"requestBody":{"description":"the shift which should overwrite the schedule (must not be in the past)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shift"}}},"required":true},"responses":{"200":{"description":"the overwritten schedule object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleRel"}}}}}}}}}
```

## GET /schedules/{id}/user-on-call

> Get the user (wrapped in a shift object) on-call for the specified schedule.

```json
{"openapi":"3.0.1","info":{"title":"ilert REST API","version":"v2.2026.9-r.4"},"tags":[{"name":"Schedules"}],"servers":[{"url":"/api"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","description":"The Bearer API key of your user <a href='/api-docs/#section/Authentication'>more info</a>.","name":"Authorization","in":"header"}},"schemas":{"Shift":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"},"end":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"}}},"User":{"required":["email","firstName","lastName"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"timezone":{"$ref":"#/components/schemas/TimeZone"},"position":{"type":"string"},"department":{"type":"string"},"avatarUrl":{"type":"string","readOnly":true},"language":{"type":"string","enum":["de","en","it","fr","es"],"description":"Language of the user. `it`, `fr` and `es` only apply to notifications; the web app is shown in English for these languages."},"region":{"type":"string","enum":["DE","GB","CH","CN","IN","US","FR","ES","CA","IE"]},"role":{"$ref":"#/components/schemas/Role"},"shiftColor":{"type":"string","description":"Optional hex-color code for the user's shifts in schedules calendars"},"mutedUntil":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"createdAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"},"updatedAt":{"type":"string","description":"Date in ISO-8601","format":"date-time"}}},"TimeZone":{"type":"string","enum":["Europe/Berlin","America/New_York","America/Los_Angeles","Asia/Istanbul"]},"Role":{"type":"string","enum":["STAKEHOLDER","GUEST","VIEWER","RESPONDER","USER","ADMIN"],"description":"The user's role."}}},"paths":{"/schedules/{id}/user-on-call":{"get":{"tags":["Schedules"],"summary":"Get the user (wrapped in a shift object) on-call for the specified schedule.","parameters":[{"name":"id","in":"path","description":"entity ID","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"the current shift","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shift"}}}},"204":{"description":"if no user is on-call","content":{}}}}}}}
```


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.ilert.com/developer-docs/rest-api/api-reference/schedules.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
