Schedules

List on-call schedules.

get
Authorizations
AuthorizationstringRequired

The Bearer API key of your user more info.

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
/schedules
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-11-17T03:54:30.653Z",
        "endsOn": "2025-11-17T03:54:30.653Z",
        "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-11-17T03:54:30.653Z",
        "start": "2025-11-17T03:54:30.653Z"
      }
    ],
    "showGaps": true,
    "defaultShiftDuration": "text",
    "currentShift": {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-11-17T03:54:30.653Z",
      "start": "2025-11-17T03:54:30.653Z"
    },
    "nextShift": {
      "user": {
        "id": 1,
        "firstName": "text",
        "lastName": "text"
      },
      "end": "2025-11-17T03:54:30.653Z",
      "start": "2025-11-17T03:54:30.653Z"
    },
    "teams": [
      {
        "id": 1,
        "name": "text"
      }
    ]
  }
]

Create a new on-call schedule.

post
Authorizations
AuthorizationstringRequired

The Bearer API key of your user more info.

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
post
/schedules
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-11-17T03:54:30.653Z",
      "endsOn": "2025-11-17T03:54:30.653Z",
      "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-11-17T03:54:30.653Z",
      "start": "2025-11-17T03:54:30.653Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "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-11-17T03:54:30.653Z",
      "endsOn": "2025-11-17T03:54:30.653Z",
      "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-11-17T03:54:30.653Z",
      "start": "2025-11-17T03:54:30.653Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}

Get the on-call schedule with the specified id.

get
Authorizations
AuthorizationstringRequired

The Bearer API key of your user more info.

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
/schedules/{id}
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-11-17T03:54:30.653Z",
      "endsOn": "2025-11-17T03:54:30.653Z",
      "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-11-17T03:54:30.653Z",
      "start": "2025-11-17T03:54:30.653Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}

Update an on-call schedule.

put
Authorizations
AuthorizationstringRequired

The Bearer API key of your user more info.

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
/schedules/{id}
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-11-17T03:54:30.653Z",
      "endsOn": "2025-11-17T03:54:30.653Z",
      "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-11-17T03:54:30.653Z",
      "start": "2025-11-17T03:54:30.653Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "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-11-17T03:54:30.653Z",
      "endsOn": "2025-11-17T03:54:30.653Z",
      "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-11-17T03:54:30.653Z",
      "start": "2025-11-17T03:54:30.653Z"
    }
  ],
  "showGaps": true,
  "defaultShiftDuration": "text",
  "currentShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "nextShift": {
    "user": {
      "id": 1,
      "firstName": "text",
      "lastName": "text"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  },
  "teams": [
    {
      "id": 1,
      "name": "text"
    }
  ]
}

Delete the on-call schedule with the specified id.

delete
Authorizations
AuthorizationstringRequired

The Bearer API key of your user more info.

Path parameters
idnumberRequired

entity ID

Responses
delete
/schedules/{id}
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
AuthorizationstringRequired

The Bearer API key of your user more info.

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
/schedules/{id}/shifts
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-11-17T03:54:30.653Z",
      "createdAt": "2025-11-17T03:54:30.653Z",
      "updatedAt": "2025-11-17T03:54:30.653Z"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  }
]

Get overrides for the specified schedule.

get
Authorizations
AuthorizationstringRequired

The Bearer API key of your user more info.

Path parameters
idnumberRequired

entity ID

Responses
200

the shift objects

application/json
get
/schedules/{id}/overrides
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-11-17T03:54:30.653Z",
      "createdAt": "2025-11-17T03:54:30.653Z",
      "updatedAt": "2025-11-17T03:54:30.653Z"
    },
    "end": "2025-11-17T03:54:30.653Z",
    "start": "2025-11-17T03:54:30.653Z"
  }
]

Add an override shift to a schedule.

put
Authorizations
AuthorizationstringRequired

The Bearer API key of your user more info.

Path parameters
idnumberRequired

entity ID

Body
endstring · date-timeOptional
startstring · date-timeOptional
Responses
200

the overwritten schedule object

application/json
put
/schedules/{id}/overrides
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-11-17T03:54:30.653Z",
    "createdAt": "2025-11-17T03:54:30.653Z",
    "updatedAt": "2025-11-17T03:54:30.653Z"
  },
  "end": "2025-11-17T03:54:30.653Z",
  "start": "2025-11-17T03:54:30.653Z"
}
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
AuthorizationstringRequired

The Bearer API key of your user more info.

Path parameters
idnumberRequired

entity ID

Responses
200

the current shift

application/json
get
/schedules/{id}/user-on-call
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-11-17T03:54:30.653Z",
    "createdAt": "2025-11-17T03:54:30.653Z",
    "updatedAt": "2025-11-17T03:54:30.653Z"
  },
  "end": "2025-11-17T03:54:30.653Z",
  "start": "2025-11-17T03:54:30.653Z"
}

Last updated

Was this helpful?