Schedules

List on-call schedules.

get
Authorizations
Query parameters
start-indexinteger · int32Optional

an integer specifying the starting point (beginning with 0) when paging through a list of entities

Default: 0
max-resultsinteger · int32 · max: 20Optional

the maximum number of results when paging through a list of schedules.

Default: 20
Responses
200
a list of on-call schedules
application/json
get
GET /api/schedules HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Accept: */*
200

a list of on-call schedules

[
  {
    "id": 1,
    "name": "text",
    "timezone": "Europe/Berlin",
    "type": "STATIC",
    "scheduleLayers": [
      {
        "name": "text",
        "startsOn": "2025-07-08T11:08:33.841Z",
        "endsOn": "2025-07-08T11:08:33.841Z",
        "users": [
          {
            "id": 1,
            "firstName": "text",
            "lastName": "text"
          }
        ],
        "rotation": "text",
        "restrictionType": "TIMES_OF_WEEK",
        "restrictions": [
          {
            "from": {
              "dayOfWeek": "MONDAY",
              "time": "text"
            },
            "to": {
              "dayOfWeek": "MONDAY",
              "time": "text"
            }
          }
        ]
      }
    ],
    "shifts": [
      {
        "user": {
          "id": 1,
          "firstName": "text",
          "lastName": "text"
        },
        "end": "2025-07-08T11:08:33.841Z",
        "start": "2025-07-08T11:08:33.841Z"
      }
    ],
    "showGaps": true,
    "defaultShiftDuration": "text",
    "currentShift": {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-07-08T11:08:33.841Z",
      "start": "2025-07-08T11:08:33.841Z"
    },
    "nextShift": {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-07-08T11:08:33.841Z",
      "start": "2025-07-08T11:08:33.841Z"
    },
    "teams": [
      {
        "id": 1,
        "name": "text"
      }
    ]
  }
]

Create a new on-call schedule.

post
Authorizations
Query parameters
abort-on-gapsbooleanOptional

Used for static schedules to prevent creating schedules with gaps

Body
idinteger · int64Optional
namestringOptional
timezonestring · enumOptionalPossible values:
typestring · enumOptionalPossible values:
showGapsbooleanOptional
defaultShiftDurationstring · P7DOptional
Responses
201
The created on-call schedule
application/json
post
POST /api/schedules HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 873

{
  "id": 1,
  "name": "text",
  "timezone": "Europe/Berlin",
  "type": "STATIC",
  "scheduleLayers": [
    {
      "name": "text",
      "startsOn": "2025-07-08T11:08:33.841Z",
      "endsOn": "2025-07-08T11:08:33.841Z",
      "users": [
        {
          "id": 1,
          "firstName": "text",
          "lastName": "text"
        }
      ],
      "rotation": "text",
      "restrictionType": "TIMES_OF_WEEK",
      "restrictions": [
        {
          "from": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          },
          "to": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          }
        }
      ]
    }
  ],
  "shifts": [
    {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-07-08T11:08:33.841Z",
      "start": "2025-07-08T11:08:33.841Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}
201

The created on-call schedule

{
  "id": 1,
  "name": "text",
  "timezone": "Europe/Berlin",
  "type": "STATIC",
  "scheduleLayers": [
    {
      "name": "text",
      "startsOn": "2025-07-08T11:08:33.841Z",
      "endsOn": "2025-07-08T11:08:33.841Z",
      "users": [
        {
          "id": 1,
          "firstName": "text",
          "lastName": "text"
        }
      ],
      "rotation": "text",
      "restrictionType": "TIMES_OF_WEEK",
      "restrictions": [
        {
          "from": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          },
          "to": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          }
        }
      ]
    }
  ],
  "shifts": [
    {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-07-08T11:08:33.841Z",
      "start": "2025-07-08T11:08:33.841Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}

Get the on-call schedule with the specified id.

get
Authorizations
Path parameters
idnumberRequired

entity ID

Query parameters
Responses
200
The schedule object. (scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules])
application/json
get
GET /api/schedules/{id} HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Accept: */*
200

The schedule object. (scheduleLayers [only available for RECURRING schedules], shifts [only available for STATIC schedules])

{
  "id": 1,
  "name": "text",
  "timezone": "Europe/Berlin",
  "type": "STATIC",
  "scheduleLayers": [
    {
      "name": "text",
      "startsOn": "2025-07-08T11:08:33.841Z",
      "endsOn": "2025-07-08T11:08:33.841Z",
      "users": [
        {
          "id": 1,
          "firstName": "text",
          "lastName": "text"
        }
      ],
      "rotation": "text",
      "restrictionType": "TIMES_OF_WEEK",
      "restrictions": [
        {
          "from": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          },
          "to": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          }
        }
      ]
    }
  ],
  "shifts": [
    {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-07-08T11:08:33.841Z",
      "start": "2025-07-08T11:08:33.841Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}

Update an on-call schedule.

put
Authorizations
Path parameters
idnumberRequired

entity ID

Query parameters
abort-on-gapsbooleanOptional

Used for static schedules to prevent updating schedules with gaps

Body
idinteger · int64Optional
namestringOptional
timezonestring · enumOptionalPossible values:
typestring · enumOptionalPossible values:
showGapsbooleanOptional
defaultShiftDurationstring · P7DOptional
Responses
200
The updated on-call schedule
application/json
put
PUT /api/schedules/{id} HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 873

{
  "id": 1,
  "name": "text",
  "timezone": "Europe/Berlin",
  "type": "STATIC",
  "scheduleLayers": [
    {
      "name": "text",
      "startsOn": "2025-07-08T11:08:33.841Z",
      "endsOn": "2025-07-08T11:08:33.841Z",
      "users": [
        {
          "id": 1,
          "firstName": "text",
          "lastName": "text"
        }
      ],
      "rotation": "text",
      "restrictionType": "TIMES_OF_WEEK",
      "restrictions": [
        {
          "from": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          },
          "to": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          }
        }
      ]
    }
  ],
  "shifts": [
    {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-07-08T11:08:33.841Z",
      "start": "2025-07-08T11:08:33.841Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}
200

The updated on-call schedule

{
  "id": 1,
  "name": "text",
  "timezone": "Europe/Berlin",
  "type": "STATIC",
  "scheduleLayers": [
    {
      "name": "text",
      "startsOn": "2025-07-08T11:08:33.841Z",
      "endsOn": "2025-07-08T11:08:33.841Z",
      "users": [
        {
          "id": 1,
          "firstName": "text",
          "lastName": "text"
        }
      ],
      "rotation": "text",
      "restrictionType": "TIMES_OF_WEEK",
      "restrictions": [
        {
          "from": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          },
          "to": {
            "dayOfWeek": "MONDAY",
            "time": "text"
          }
        }
      ]
    }
  ],
  "shifts": [
    {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-07-08T11:08:33.841Z",
      "start": "2025-07-08T11:08:33.841Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}

Delete the on-call schedule with the specified id.

delete
Authorizations
Path parameters
idnumberRequired

entity ID

Responses
204
empty response
delete
DELETE /api/schedules/{id} HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Accept: */*
204

empty response

No content

Get shifts for the specified schedule and date range.

get
Authorizations
Path parameters
idnumberRequired

entity ID

Query parameters
fromstring · date-timeOptional

from date, default is start of last month

untilstringOptional

until date, default is from date plus 3 months

exclude-overridesbooleanOptional

if true, shifts won't include overrides

Default: false
Responses
200
the shift objects
application/json
get
GET /api/schedules/{id}/shifts HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Accept: */*
200

the shift objects

[
  {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text",
      "email": "text",
      "timezone": "Europe/Berlin",
      "position": "text",
      "department": "text",
      "avatarUrl": "text",
      "language": "de",
      "region": "DE",
      "role": "STAKEHOLDER",
      "shiftColor": "text",
      "mutedUntil": "2025-07-08T11:08:33.841Z",
      "createdAt": "2025-07-08T11:08:33.841Z",
      "updatedAt": "2025-07-08T11:08:33.841Z"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  }
]

Get overrides for the specified schedule.

get
Authorizations
Path parameters
idnumberRequired

entity ID

Responses
200
the shift objects
application/json
get
GET /api/schedules/{id}/overrides HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Accept: */*
200

the shift objects

[
  {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text",
      "email": "text",
      "timezone": "Europe/Berlin",
      "position": "text",
      "department": "text",
      "avatarUrl": "text",
      "language": "de",
      "region": "DE",
      "role": "STAKEHOLDER",
      "shiftColor": "text",
      "mutedUntil": "2025-07-08T11:08:33.841Z",
      "createdAt": "2025-07-08T11:08:33.841Z",
      "updatedAt": "2025-07-08T11:08:33.841Z"
    },
    "end": "2025-07-08T11:08:33.841Z",
    "start": "2025-07-08T11:08:33.841Z"
  }
]

Add an override shift to a schedule.

put
Authorizations
Path parameters
idnumberRequired

entity ID

Body
endstring · date-timeOptional
startstring · date-timeOptional
Responses
200
the overwritten schedule object
application/json
put
PUT /api/schedules/{id}/overrides HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 391

{
  "user": {
    "id": 1,
    "firstName": "text",
    "lastName": "text",
    "email": "text",
    "timezone": "Europe/Berlin",
    "position": "text",
    "department": "text",
    "language": "de",
    "region": "DE",
    "role": "STAKEHOLDER",
    "shiftColor": "text",
    "mutedUntil": "2025-07-08T11:08:33.841Z",
    "createdAt": "2025-07-08T11:08:33.841Z",
    "updatedAt": "2025-07-08T11:08:33.841Z"
  },
  "end": "2025-07-08T11:08:33.841Z",
  "start": "2025-07-08T11:08:33.841Z"
}
200

the overwritten schedule object

{
  "id": 1,
  "name": "text",
  "type": "STATIC"
}

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

get
Authorizations
Path parameters
idnumberRequired

entity ID

Responses
200
the current shift
application/json
get
GET /api/schedules/{id}/user-on-call HTTP/1.1
Host: 
Authorization: YOUR_API_KEY
Accept: */*
{
  "user": {
    "id": 1,
    "firstName": "text",
    "lastName": "text",
    "email": "text",
    "timezone": "Europe/Berlin",
    "position": "text",
    "department": "text",
    "avatarUrl": "text",
    "language": "de",
    "region": "DE",
    "role": "STAKEHOLDER",
    "shiftColor": "text",
    "mutedUntil": "2025-07-08T11:08:33.841Z",
    "createdAt": "2025-07-08T11:08:33.841Z",
    "updatedAt": "2025-07-08T11:08:33.841Z"
  },
  "end": "2025-07-08T11:08:33.841Z",
  "start": "2025-07-08T11:08:33.841Z"
}

Was this helpful?