Schichten und Arbeitsbereiche abrufen
Beta Die REST-API ist in der Beta. Endpunkte und Felder können sich bis zur Version 1.0.0 noch ändern.
Beide Endpunkte brauchen den Scope shifts:read (Berechtigung Schichten & Bereiche). Wie Schichten in TimeMonkey entstehen, steht unter Schichtplanung.
Schichten auflisten
/api/v1/shiftsScopeshifts:readGET /api/v1/shifts liefert die Schichten, die im Zeitraum from bis to beginnen, sortiert nach start, dann id. Benötigter Scope: shifts:read.
Enthalten sind nur Schichten aus veröffentlichten Wochenplänen. Pläne der aktuellen und vergangener Wochen gelten dabei immer als veröffentlicht. Nicht enthalten sind archivierte Pläne und Schichten, die ein verbundener Standort plant.
Parameter
| Name | Pflicht | Typ | Beschreibung |
|---|---|---|---|
from | ja | Datum YYYY-MM-DD | Erster Tag des Zeitraums (inklusive, Europe/Berlin) |
to | ja | Datum YYYY-MM-DD | Letzter Tag des Zeitraums (inklusive, Europe/Berlin). Der Zeitraum darf höchstens 366 Tage umfassen |
employeeId | nein | ID | Nur Schichten, in die dieser Mitarbeiter eingeteilt ist |
limit | nein | Ganzzahl 1–500 | Einträge pro Seite. Standard: 100 |
cursor | nein | String | Wert von nextCursor aus der vorherigen Antwort |
Antwortfelder
| Feld | Typ | Beschreibung |
|---|---|---|
id | String | ID der Schicht |
weekplanId | String | ID des Wochenplans, zu dem die Schicht gehört |
start | Zeitpunkt | Beginn der Schicht (ISO 8601, UTC) |
end | Zeitpunkt | Ende der Schicht (ISO 8601, UTC) |
breaks | Liste | Geplante Pausen, jeweils mit start und end als Zeitpunkt |
areaId | String oder null | ID des Arbeitsbereichs |
areaName | String oder null | Name des Arbeitsbereichs |
serviceName | String oder null | Schichtbezeichnung, falls vergeben |
employeeIds | Liste von Strings | IDs der eingeteilten Mitarbeiter deines Standorts. Mitarbeiter anderer Standorte sind nicht enthalten |
Beispiel
- curl
- JavaScript
- Python
curl -s "https://api.time.monkeymed.de/api/v1/shifts?from=2026-10-19&to=2026-10-25" \
-H "Authorization: Bearer $TIMEMONKEY_API_KEY"
const query = new URLSearchParams({from: '2026-10-19', to: '2026-10-25'});
const response = await fetch(`https://api.time.monkeymed.de/api/v1/shifts?${query}`, {
headers: {Authorization: `Bearer ${process.env.TIMEMONKEY_API_KEY}`},
});
const {data} = await response.json();
for (const shift of data) {
console.log(shift.start, shift.areaName, shift.employeeIds.length, 'Mitarbeiter');
}
import os
import requests
response = requests.get(
"https://api.time.monkeymed.de/api/v1/shifts",
headers={"Authorization": f"Bearer {os.environ['TIMEMONKEY_API_KEY']}"},
params={"from": "2026-10-19", "to": "2026-10-25"},
timeout=30,
)
response.raise_for_status()
for shift in response.json()["data"]:
print(shift["start"], shift["areaName"], len(shift["employeeIds"]), "Mitarbeiter")
{
"data": [
{
"id": "6712ab34cd56ef7890a1b2d4",
"weekplanId": "6712ab34cd56ef7890a1b2c3",
"start": "2026-10-19T06:00:00.000Z",
"end": "2026-10-19T14:00:00.000Z",
"breaks": [
{"start": "2026-10-19T10:00:00.000Z", "end": "2026-10-19T10:30:00.000Z"}
],
"areaId": "65b0c1d2e3f4a5b6c7d8e9f0",
"areaName": "Prophylaxe",
"serviceName": "Frühdienst",
"employeeIds": ["650a1b2c3d4e5f6071829304"]
}
],
"nextCursor": null
}
Arbeitsbereiche abrufen
/api/v1/areasScopeshifts:readGET /api/v1/areas liefert alle Arbeitsbereiche der Schichtplanung deines Standorts. Benötigter Scope: shifts:read. Der Endpunkt hat keine Parameter und ist nicht paginiert: Die Antwort enthält nur data.
| Feld | Typ | Beschreibung |
|---|---|---|
id | String | ID des Arbeitsbereichs, entspricht areaId einer Schicht |
name | String | Name des Arbeitsbereichs |
hidden | Boolean | true, wenn der Bereich in der Planung ausgeblendet ist |
- curl
- JavaScript
- Python
curl -s https://api.time.monkeymed.de/api/v1/areas \
-H "Authorization: Bearer $TIMEMONKEY_API_KEY"
const response = await fetch('https://api.time.monkeymed.de/api/v1/areas', {
headers: {Authorization: `Bearer ${process.env.TIMEMONKEY_API_KEY}`},
});
const {data} = await response.json();
console.log(data.filter((area) => !area.hidden).map((area) => area.name));
import os
import requests
response = requests.get(
"https://api.time.monkeymed.de/api/v1/areas",
headers={"Authorization": f"Bearer {os.environ['TIMEMONKEY_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print([area["name"] for area in response.json()["data"] if not area["hidden"]])
{
"data": [
{"id": "65b0c1d2e3f4a5b6c7d8e9f0", "name": "Prophylaxe", "hidden": false},
{"id": "65b0c1d2e3f4a5b6c7d8e9f1", "name": "Empfang", "hidden": false},
{"id": "65b0c1d2e3f4a5b6c7d8e9f2", "name": "Labor alt", "hidden": true}
]
}