{"openapi":"3.1.1","info":{"title":"TimeMe Unternehmens-API","version":"1.18.0","description":"Mandantengebundene Integrationen. Nur HTTPS in Produktion; Secrets ausschließlich auf eigenen Servern speichern. JSON-Anfragen bis 128 KiB. 120 Anfragen pro Minute je Key. Alle Antworten sind nicht cachebar. Kein CORS für fremde Webseiten. Native IDs sind numerisch und nur im eigenen Unternehmen gültig."},"servers":[{"url":"https://api.timeme.st-braun.de"}],"tags":[{"name":"authentication"},{"name":"company"},{"name":"locations"},{"name":"employees"},{"name":"attendance"},{"name":"reports"},{"name":"payroll"},{"name":"schedules"},{"name":"absences"},{"name":"news"}],"paths":{"/v1/company":{"get":{"operationId":"get__company","tags":["company"],"summary":"Eigenes Unternehmen","description":"Mandant-ID, Name, Zeitzone, Kontingente und Freischaltungen. Zugangsdaten und interne Konfiguration werden nicht ausgegeben.\n\nErforderliche Berechtigung: company:read.","security":[{"companyToken":[]}],"parameters":[],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"tenantCode":{"type":"string"},"name":{"type":"string"},"active":{"type":"boolean"},"apiEnabled":{"type":"boolean"},"schedulingEnabled":{"type":"boolean"},"timezone":{"type":"string"},"locationLimit":{"type":"integer"},"employeeLimit":{"type":"integer"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"company:read"}},"/v1/locations":{"get":{"operationId":"get__locations","tags":["locations"],"summary":"Standorte auflisten","description":"Liste mit limit (1–200, Standard 100) und offset. Gelöschte Datensätze sind für Historien enthalten. RFID-UIDs und Standortleitungsrechte werden nicht ausgegeben.\n\nErforderliche Berechtigung: locations:read.","security":[{"companyToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Liste in data; meta mit total, limit, offset, nextOffset. Andere Listen innerhalb von data bleiben Teil des fachlichen Datensatzes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"address":{"type":"string"},"holidayState":{"type":"string","description":"Deutsches Bundesland als zweistelliger Code."},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"locations:read"},"post":{"operationId":"post__locations","tags":["locations"],"summary":"Standorte anlegen","description":"Neue Datensätze sind zunächst aktiv. Kontingente und Standortzuordnungen werden geprüft. RFID- und Standortleitungszuordnungen erfolgen weiterhin im Manager.\n\nErforderliche Berechtigung: locations:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"201":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"address":{"type":"string"},"holidayState":{"type":"string","description":"Deutsches Bundesland als zweistelliger Code."},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"locations:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Standortname."},"address":{"type":"string","description":"Anschrift."},"holidayState":{"type":"string","enum":["BW","BY","BE","BB","HB","HE","HH","MV","NI","NW","RP","SL","SN","ST","SH","TH"]}},"required":["name","holidayState"],"additionalProperties":false},"example":{"name":"Berlin","holidayState":"BE","address":"Musterstraße 1"}}}}}},"/v1/locations/{id}":{"get":{"operationId":"get__locations_id","tags":["locations"],"summary":"Standorte: Datensatz abrufen","description":"Liest genau einen eigenen Datensatz. Fremde oder unbekannte Kennungen ergeben HTTP 404.\n\nErforderliche Berechtigung: locations:read.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"address":{"type":"string"},"holidayState":{"type":"string","description":"Deutsches Bundesland als zweistelliger Code."},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"locations:read"},"patch":{"operationId":"patch__locations_id","tags":["locations"],"summary":"Standorte ändern","description":"Nur mitgesendete Felder werden geändert. Eine Reaktivierung prüft das verfügbare Kontingent.\n\nErforderliche Berechtigung: locations:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"address":{"type":"string"},"holidayState":{"type":"string","description":"Deutsches Bundesland als zweistelliger Code."},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"locations:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Standortname."},"address":{"type":"string","description":"Anschrift."},"holidayState":{"type":"string","enum":["BW","BY","BE","BB","HB","HE","HH","MV","NI","NW","RP","SL","SN","ST","SH","TH"]},"active":{"type":"boolean"}},"required":[],"additionalProperties":false},"example":{"name":"Zentrale"}}}}},"delete":{"operationId":"delete__locations_id","tags":["locations"],"summary":"Standorte löschen","description":"Deaktiviert den Datensatz und erhält die Historie. Zugeordnete Mitarbeiter verhindern das Löschen eines Standorts; der letzte aktive Standort bleibt bestehen.\n\nErforderliche Berechtigung: locations:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"locations:write"}},"/v1/employees":{"get":{"operationId":"get__employees","tags":["employees"],"summary":"Mitarbeiter auflisten","description":"Liste mit limit (1–200, Standard 100) und offset. Gelöschte Datensätze sind für Historien enthalten. RFID-UIDs und Standortleitungsrechte werden nicht ausgegeben.\n\nErforderliche Berechtigung: employees:read.","security":[{"companyToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Liste in data; meta mit total, limit, offset, nextOffset. Andere Listen innerhalb von data bleiben Teil des fachlichen Datensatzes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"email":{"type":"string","description":"Nur mit employees:read enthalten."},"postalAddress":{"type":"string","description":"Nur mit employees:read enthalten."},"locationId":{"type":["integer","null"]},"locationName":{"type":["string","null"]},"locationIds":{"type":"array","items":{"type":"integer"}},"locationNames":{"type":"array","items":{"type":"string"}},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string"},"regularStart":{"type":"string"},"regularEnd":{"type":"string"},"dailyTargetMinutes":{"type":"integer"},"regularDays":{"type":"array","items":{"type":"integer"}},"breakRule":{"type":"string"},"fixedBreakMinutes":{"type":"integer"},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"]},"maxMonthlyMinutes":{"type":["integer","null"]},"allowedShiftIds":{"type":"array","items":{"type":"integer"}},"preferredShiftIds":{"type":"array","items":{"type":"integer"}}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"employees:read"},"post":{"operationId":"post__employees","tags":["employees"],"summary":"Mitarbeiter anlegen","description":"Neue Datensätze sind zunächst aktiv. Kontingente und Standortzuordnungen werden geprüft. RFID- und Standortleitungszuordnungen erfolgen weiterhin im Manager.\n\nErforderliche Berechtigung: employees:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"201":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"email":{"type":"string","description":"Nur mit employees:read enthalten."},"postalAddress":{"type":"string","description":"Nur mit employees:read enthalten."},"locationId":{"type":["integer","null"]},"locationName":{"type":["string","null"]},"locationIds":{"type":"array","items":{"type":"integer"}},"locationNames":{"type":"array","items":{"type":"string"}},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string"},"regularStart":{"type":"string"},"regularEnd":{"type":"string"},"dailyTargetMinutes":{"type":"integer"},"regularDays":{"type":"array","items":{"type":"integer"}},"breakRule":{"type":"string"},"fixedBreakMinutes":{"type":"integer"},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"]},"maxMonthlyMinutes":{"type":["integer","null"]},"allowedShiftIds":{"type":"array","items":{"type":"integer"}},"preferredShiftIds":{"type":"array","items":{"type":"integer"}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"employees:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Vollständiger Name."},"personnelNumber":{"type":"string","description":"Innerhalb des Unternehmens eindeutige Personalnummer."},"email":{"type":"string","format":"email"},"postalAddress":{"type":"string","description":"Postanschrift, höchstens vier Zeilen / 240 Zeichen."},"locationId":{"type":"integer","minimum":1,"description":"Hauptstandort."},"locationIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Zulässiger Standort."},"uniqueItems":true},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string","enum":["fixed","target"]},"regularStart":{"type":"string","description":"HH:mm"},"regularEnd":{"type":"string","description":"HH:mm"},"dailyTargetMinutes":{"type":"integer","minimum":0,"maximum":1440},"regularDays":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6},"uniqueItems":true},"breakRule":{"type":"string","enum":["legal","fixed","none"]},"fixedBreakMinutes":{"type":"integer","minimum":0,"maximum":1440},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"],"minimum":0},"maxMonthlyMinutes":{"type":["integer","null"],"minimum":0},"allowedShiftIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Schicht-ID."},"uniqueItems":true},"preferredShiftIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Schicht-ID."},"uniqueItems":true}},"required":[],"additionalProperties":false}},"required":["name","personnelNumber","locationId"],"additionalProperties":false},"example":{"name":"Alex Beispiel","personnelNumber":"1001","locationId":1,"locationIds":[1],"regularDays":[1,2,3,4,5]}}}}}},"/v1/employees/{id}":{"get":{"operationId":"get__employees_id","tags":["employees"],"summary":"Mitarbeiter: Datensatz abrufen","description":"Liest genau einen eigenen Datensatz. Fremde oder unbekannte Kennungen ergeben HTTP 404.\n\nErforderliche Berechtigung: employees:read.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"email":{"type":"string","description":"Nur mit employees:read enthalten."},"postalAddress":{"type":"string","description":"Nur mit employees:read enthalten."},"locationId":{"type":["integer","null"]},"locationName":{"type":["string","null"]},"locationIds":{"type":"array","items":{"type":"integer"}},"locationNames":{"type":"array","items":{"type":"string"}},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string"},"regularStart":{"type":"string"},"regularEnd":{"type":"string"},"dailyTargetMinutes":{"type":"integer"},"regularDays":{"type":"array","items":{"type":"integer"}},"breakRule":{"type":"string"},"fixedBreakMinutes":{"type":"integer"},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"]},"maxMonthlyMinutes":{"type":["integer","null"]},"allowedShiftIds":{"type":"array","items":{"type":"integer"}},"preferredShiftIds":{"type":"array","items":{"type":"integer"}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"employees:read"},"patch":{"operationId":"patch__employees_id","tags":["employees"],"summary":"Mitarbeiter ändern","description":"Nur mitgesendete Felder werden geändert. Eine Reaktivierung prüft das verfügbare Kontingent.\n\nErforderliche Berechtigung: employees:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"email":{"type":"string","description":"Nur mit employees:read enthalten."},"postalAddress":{"type":"string","description":"Nur mit employees:read enthalten."},"locationId":{"type":["integer","null"]},"locationName":{"type":["string","null"]},"locationIds":{"type":"array","items":{"type":"integer"}},"locationNames":{"type":"array","items":{"type":"string"}},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string"},"regularStart":{"type":"string"},"regularEnd":{"type":"string"},"dailyTargetMinutes":{"type":"integer"},"regularDays":{"type":"array","items":{"type":"integer"}},"breakRule":{"type":"string"},"fixedBreakMinutes":{"type":"integer"},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"]},"maxMonthlyMinutes":{"type":["integer","null"]},"allowedShiftIds":{"type":"array","items":{"type":"integer"}},"preferredShiftIds":{"type":"array","items":{"type":"integer"}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"employees:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Vollständiger Name."},"personnelNumber":{"type":"string","description":"Innerhalb des Unternehmens eindeutige Personalnummer."},"email":{"type":"string","format":"email"},"postalAddress":{"type":"string","description":"Postanschrift, höchstens vier Zeilen / 240 Zeichen."},"locationId":{"type":"integer","minimum":1,"description":"Hauptstandort."},"locationIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Zulässiger Standort."},"uniqueItems":true},"flexibleLocation":{"type":"boolean"},"active":{"type":"boolean"},"workModel":{"type":"string","enum":["fixed","target"]},"regularStart":{"type":"string","description":"HH:mm"},"regularEnd":{"type":"string","description":"HH:mm"},"dailyTargetMinutes":{"type":"integer","minimum":0,"maximum":1440},"regularDays":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6},"uniqueItems":true},"breakRule":{"type":"string","enum":["legal","fixed","none"]},"fixedBreakMinutes":{"type":"integer","minimum":0,"maximum":1440},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"],"minimum":0},"maxMonthlyMinutes":{"type":["integer","null"],"minimum":0},"allowedShiftIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Schicht-ID."},"uniqueItems":true},"preferredShiftIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Schicht-ID."},"uniqueItems":true}},"required":[],"additionalProperties":false}},"required":[],"additionalProperties":false},"example":{"email":"alex@example.org"}}}}},"delete":{"operationId":"delete__employees_id","tags":["employees"],"summary":"Mitarbeiter löschen","description":"Deaktiviert den Datensatz und erhält die Historie. Zugeordnete Mitarbeiter verhindern das Löschen eines Standorts; der letzte aktive Standort bleibt bestehen.\n\nErforderliche Berechtigung: employees:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"employees:write"}},"/v1/attendance":{"get":{"operationId":"get__attendance","tags":["attendance"],"summary":"Aktuelle Anwesenheit","description":"Aktiver Buchungsstatus, Haupt-/aktueller Standort und heutige Zeitwerte je Mitarbeiter, mit limit und offset.\n\nErforderliche Berechtigung: attendance:read.","security":[{"companyToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Liste in data; meta mit total, limit, offset, nextOffset. Andere Listen innerhalb von data bleiben Teil des fachlichen Datensatzes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"employeeId":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"locationId":{"type":"integer"},"status":{"type":"string","enum":["out","working","break"]},"lastEvent":{"type":["object","null"],"properties":{"id":{"type":"integer"},"employeeId":{"type":"integer"},"type":{"type":"string","enum":["check_in","break_start","break_end","check_out"]},"occurredAt":{"type":"string","format":"date-time"},"locationId":{"type":"integer"},"locationName":{"type":"string"},"source":{"type":"string","description":"kiosk, kiosk_offline, manager_manual, manager_correction oder automatic_checkout."},"note":{"type":"string"},"automaticCheckout":{"type":"boolean"},"voided":{"type":"boolean"},"voidedAt":{"type":["string","null"],"format":"date-time"},"corrected":{"type":"boolean"}}},"totals":{"type":"object","properties":{"grossMinutes":{"type":"number","description":"Bruttozeit in Minuten."},"breakMinutes":{"type":"number","description":"Pausenzeit in Minuten."},"netMinutes":{"type":"number","description":"Nettoarbeitszeit in Minuten."}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"attendance:read"}},"/v1/time-events":{"get":{"operationId":"get__time_events","tags":["attendance"],"summary":"Buchungen eines Mitarbeiters","description":"Liefert Buchungen einschließlich stornierter Ereignisse, Herkunft und Korrekturhinweisen. employeeId, from und to sind erforderlich; maximal 366 Tage.\n\nErforderliche Berechtigung: attendance:read.","security":[{"companyToken":[]}],"parameters":[{"name":"employeeId","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"Mitarbeiter-ID."}},{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"employee":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"email":{"type":"string","description":"Nur mit employees:read enthalten."},"postalAddress":{"type":"string","description":"Nur mit employees:read enthalten."},"locationId":{"type":["integer","null"]},"locationName":{"type":["string","null"]},"locationIds":{"type":"array","items":{"type":"integer"}},"locationNames":{"type":"array","items":{"type":"string"}},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string"},"regularStart":{"type":"string"},"regularEnd":{"type":"string"},"dailyTargetMinutes":{"type":"integer"},"regularDays":{"type":"array","items":{"type":"integer"}},"breakRule":{"type":"string"},"fixedBreakMinutes":{"type":"integer"},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"]},"maxMonthlyMinutes":{"type":["integer","null"]},"allowedShiftIds":{"type":"array","items":{"type":"integer"}},"preferredShiftIds":{"type":"array","items":{"type":"integer"}}}}}},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"employeeId":{"type":"integer"},"type":{"type":"string","enum":["check_in","break_start","break_end","check_out"]},"occurredAt":{"type":"string","format":"date-time"},"locationId":{"type":"integer"},"locationName":{"type":"string"},"source":{"type":"string","description":"kiosk, kiosk_offline, manager_manual, manager_correction oder automatic_checkout."},"note":{"type":"string"},"automaticCheckout":{"type":"boolean"},"voided":{"type":"boolean"},"voidedAt":{"type":["string","null"],"format":"date-time"},"corrected":{"type":"boolean"}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"attendance:read"}},"/v1/time-sessions":{"post":{"operationId":"post__time_sessions","tags":["attendance"],"summary":"Manuelle Arbeitszeit ergänzen","description":"Ergänzt 1–32 chronologische Buchungen als manuelle Korrektur. Die API ist kein RFID-Terminal: bestehende Kiosk-Zustandswechsel bleiben unverändert. Betroffene Abrechnungsprüfungen werden geöffnet.\n\nErforderliche Berechtigung: attendance:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"201":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"},"eventIds":{"type":"array","items":{"type":"integer"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"attendance:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employeeId":{"type":"integer","minimum":1,"description":"Mitarbeiter."},"locationId":{"type":"integer","minimum":1,"description":"Standort."},"note":{"type":"string","minLength":3,"maxLength":1000},"events":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["check_in","break_start","break_end","check_out"]},"occurredAt":{"type":"string","format":"date-time","description":"ISO-8601 mit Zeitzone, z. B. 2026-11-02T07:00:00+01:00."}},"required":["type","occurredAt"],"additionalProperties":false},"minItems":1,"maxItems":32}},"required":["employeeId","locationId","note","events"],"additionalProperties":false},"example":{"employeeId":1,"locationId":1,"note":"Nachtrag nach Rücksprache","events":[{"type":"check_in","occurredAt":"2026-11-02T07:00:00+01:00"},{"type":"check_out","occurredAt":"2026-11-02T15:00:00+01:00"}]}}}}}},"/v1/time-events/{id}":{"patch":{"operationId":"patch__time_events_id","tags":["attendance"],"summary":"Buchung korrigieren","description":"Ändert Zeitpunkt, Art oder Standort einer eigenen Buchung; Prüfungen werden erneut geöffnet.\n\nErforderliche Berechtigung: attendance:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"employeeId":{"type":"integer"},"type":{"type":"string","enum":["check_in","break_start","break_end","check_out"]},"occurredAt":{"type":"string","format":"date-time"},"locationId":{"type":"integer"},"locationName":{"type":"string"},"source":{"type":"string","description":"kiosk, kiosk_offline, manager_manual, manager_correction oder automatic_checkout."},"note":{"type":"string"},"automaticCheckout":{"type":"boolean"},"voided":{"type":"boolean"},"voidedAt":{"type":["string","null"],"format":"date-time"},"corrected":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"attendance:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["check_in","break_start","break_end","check_out"]},"occurredAt":{"type":"string","format":"date-time","description":"ISO-8601 mit Zeitzone, z. B. 2026-11-02T07:00:00+01:00."},"locationId":{"type":"integer","minimum":1,"description":"Standort."},"note":{"type":"string","minLength":3,"maxLength":1000}},"required":["note"],"additionalProperties":false},"example":{"note":"Zeit korrigiert","occurredAt":"2026-11-02T07:05:00+01:00"}}}}},"delete":{"operationId":"delete__time_events_id","tags":["attendance"],"summary":"Buchung stornieren","description":"Storniert nachvollziehbar, ohne das Ereignis physisch zu löschen.\n\nErforderliche Berechtigung: attendance:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"attendance:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":3,"maxLength":1000}},"required":["note"],"additionalProperties":false},"example":{"note":"Doppelte manuelle Buchung"}}}}}},"/v1/reports":{"get":{"operationId":"get__reports","tags":["reports"],"summary":"Arbeitszeitbericht abrufen","description":"Auswertung für einen Zeitraum (maximal 366 Tage). format=json oder csv. employeeIds: kommaseparierte eigene IDs; leer bedeutet alle aktiven Mitarbeiter.\n\nErforderliche Berechtigung: reports:read.","security":[{"companyToken":[]}],"parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}},{"name":"employeeIds","in":"query","required":false,"schema":{"type":"string","description":"z. B. 1,2"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv"]}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"generatedAt":{"type":"string","format":"date-time"},"rows":{"type":"array","items":{"type":"object","properties":{"employee":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"email":{"type":"string","description":"Nur mit employees:read enthalten."},"postalAddress":{"type":"string","description":"Nur mit employees:read enthalten."},"locationId":{"type":["integer","null"]},"locationName":{"type":["string","null"]},"locationIds":{"type":"array","items":{"type":"integer"}},"locationNames":{"type":"array","items":{"type":"string"}},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string"},"regularStart":{"type":"string"},"regularEnd":{"type":"string"},"dailyTargetMinutes":{"type":"integer"},"regularDays":{"type":"array","items":{"type":"integer"}},"breakRule":{"type":"string"},"fixedBreakMinutes":{"type":"integer"},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"]},"maxMonthlyMinutes":{"type":["integer","null"]},"allowedShiftIds":{"type":"array","items":{"type":"integer"}},"preferredShiftIds":{"type":"array","items":{"type":"integer"}}}}}},"totals":{"type":"object","properties":{"grossMinutes":{"type":"number","description":"Bruttozeit in Minuten."},"breakMinutes":{"type":"number","description":"Pausenzeit in Minuten."},"netMinutes":{"type":"number","description":"Nettoarbeitszeit in Minuten."}}},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"grossMinutes":{"type":"number","description":"Bruttozeit in Minuten."},"breakMinutes":{"type":"number","description":"Pausenzeit in Minuten."},"netMinutes":{"type":"number","description":"Nettoarbeitszeit in Minuten."},"corrected":{"type":"boolean"},"manuallyChanged":{"type":"boolean"},"automaticCheckout":{"type":"boolean"},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"employeeId":{"type":"integer"},"type":{"type":"string","enum":["check_in","break_start","break_end","check_out"]},"occurredAt":{"type":"string","format":"date-time"},"locationId":{"type":"integer"},"locationName":{"type":"string"},"source":{"type":"string","description":"kiosk, kiosk_offline, manager_manual, manager_correction oder automatic_checkout."},"note":{"type":"string"},"automaticCheckout":{"type":"boolean"},"voided":{"type":"boolean"},"voidedAt":{"type":["string","null"],"format":"date-time"},"corrected":{"type":"boolean"}}}},"voidedEvents":{"type":"integer"},"corrections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"start":{"type":"string"},"end":{"type":"string"}}}},"shifts":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":["string","null"]},"open":{"type":"boolean"},"automaticCheckout":{"type":"boolean"}}}}}}}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"reports:read"}},"/v1/payroll/settings":{"get":{"operationId":"get__payroll_settings","tags":["payroll"],"summary":"Abrechnungseinstellungen lesen","description":"Lohnarten, Abwesenheitsschlüssel und Abrechnungsregeln ohne DATEV-Zugangstoken.\n\nErforderliche Berechtigung: payroll:read.","security":[{"companyToken":[]}],"parameters":[],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Abrechnungsregeln, Lohnarten, absenceCodes und CSV-Feldzuordnung."},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"payroll:read"}},"/v1/payroll/period":{"get":{"operationId":"get__payroll_period","tags":["payroll"],"summary":"Abrechnungsübersicht","description":"Prüf- und Abschlussstatus; from/to optional, sonst letzter geschlossener Abrechnungszeitraum. Maximal 45 Tage.\n\nErforderliche Berechtigung: payroll:read.","security":[{"companyToken":[]}],"parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Prüf- und Abschlussübersicht, Abrechnungseinstellungen und Zeitzone. canExport gibt an, ob alle Mitarbeiter geprüft und abgeschlossen sind."},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"payroll:read"}},"/v1/payroll/employees/{employeeId}":{"get":{"operationId":"get__payroll_employees_employeeId","tags":["payroll"],"summary":"Abrechnungstage eines Mitarbeiters","description":"Tageswerte, Abwesenheit, Prüfflag und Abschlussfähigkeit für maximal 45 Tage.\n\nErforderliche Berechtigung: payroll:read.","security":[{"companyToken":[]}],"parameters":[{"name":"employeeId","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"employee":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"personnelNumber":{"type":"string"},"email":{"type":"string","description":"Nur mit employees:read enthalten."},"postalAddress":{"type":"string","description":"Nur mit employees:read enthalten."},"locationId":{"type":["integer","null"]},"locationName":{"type":["string","null"]},"locationIds":{"type":"array","items":{"type":"integer"}},"locationNames":{"type":"array","items":{"type":"string"}},"flexibleLocation":{"type":"boolean"},"workModel":{"type":"string"},"regularStart":{"type":"string"},"regularEnd":{"type":"string"},"dailyTargetMinutes":{"type":"integer"},"regularDays":{"type":"array","items":{"type":"integer"}},"breakRule":{"type":"string"},"fixedBreakMinutes":{"type":"integer"},"active":{"type":"boolean"},"deletedAt":{"type":["string","null"],"format":"date-time"},"scheduleProfile":{"type":"object","properties":{"maxWeeklyMinutes":{"type":["integer","null"]},"maxMonthlyMinutes":{"type":["integer","null"]},"allowedShiftIds":{"type":"array","items":{"type":"integer"}},"preferredShiftIds":{"type":"array","items":{"type":"integer"}}}}}},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"days":{"type":"array","items":{"type":"object","description":"Tageswerte mit Arbeitstagen, reviewed, absenceCode und Korrekturhinweisen."}},"canClose":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"payroll:read"}},"/v1/payroll/day":{"patch":{"operationId":"patch__payroll_day","tags":["payroll"],"summary":"Abrechnungstag prüfen","description":"Setzt die Tagesprüfung oder einen eingerichteten Abwesenheitsschlüssel. Zeitkorrekturen sind separat über attendance:write möglich.\n\nErforderliche Berechtigung: payroll:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"},"day":{"type":"object","description":"Neu berechnete Tageswerte einschließlich reviewed und absenceCode."}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"payroll:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employeeId":{"type":"integer","minimum":1,"description":"Mitarbeiter."},"date":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"periodStart":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"periodEnd":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"reviewed":{"type":"boolean"},"absenceCode":{"type":"string","description":"Leer bei Arbeitszeit."}},"required":["employeeId","date","periodStart","periodEnd","reviewed"],"additionalProperties":false},"example":{"employeeId":1,"date":"2026-11-02","periodStart":"2026-11-01","periodEnd":"2026-11-30","reviewed":true}}}}}},"/v1/payroll/employees/{employeeId}/close":{"post":{"operationId":"post__payroll_employees_employeeId_close","tags":["payroll"],"summary":"Mitarbeiterabrechnung abschließen","description":"Erfordert vollständig geprüfte Tage mit Arbeitszeit oder Abwesenheit. Maximal 45 Tage.\n\nErforderliche Berechtigung: payroll:write.","security":[{"companyToken":[]}],"parameters":[{"name":"employeeId","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"payroll:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"to":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."}},"required":["from","to"],"additionalProperties":false},"example":{"from":"2026-11-01","to":"2026-11-30"}}}}}},"/v1/payroll/export":{"post":{"operationId":"post__payroll_export","tags":["payroll"],"summary":"TimeMe-Abrechnungs-CSV exportieren","description":"Nur vollständig geprüfte und abgeschlossene Zeiträume. Setzt den Exportstatus. TimeMe-CSV ist kein bestätigtes DATEV-ASCII-Importformat.\n\nErforderliche Berechtigung: payroll:export.","security":[{"companyToken":[]}],"parameters":[],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"payroll:export","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"to":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"type":{"type":"string","enum":["datev-csv"]}},"required":["from","to","type"],"additionalProperties":false},"example":{"from":"2026-11-01","to":"2026-11-30","type":"datev-csv"}}}}}},"/v1/schedules":{"get":{"operationId":"get__schedules","tags":["schedules"],"summary":"Monatspläne auflisten","description":"Die Schichtplanung muss für das Unternehmen freigeschaltet sein. Listen unterstützen limit/offset; Abwesenheitsliste enthält die letzten 1.000 Anfragen.\n\nErforderliche Berechtigung: schedules:read.","security":[{"companyToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Liste in data; meta mit total, limit, offset, nextOffset. Andere Listen innerhalb von data bleiben Teil des fachlichen Datensatzes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"month":{"type":"string"},"status":{"type":"string","enum":["draft","completed","released"]},"revision":{"type":"integer"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:read"},"post":{"operationId":"post__schedules","tags":["schedules"],"summary":"Monatsplan erstellen","description":"Legt einen Entwurf an. sourceId und copyMode=base/full übernehmen Grunddaten bzw. Belegung eines eigenen Plans.\n\nErforderliche Berechtigung: schedules:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"201":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"month":{"type":"string"},"status":{"type":"string","enum":["draft","completed","released"]},"revision":{"type":"integer"},"monthLabel":{"type":"string"},"releasedAt":{"type":["string","null"],"format":"date-time"},"employeeIds":{"type":"array","items":{"type":"integer"}},"locationIds":{"type":"array","items":{"type":"integer"}},"employees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"holidays":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"},"locationId":{"type":"integer"}}}},"entries":{"type":"array","items":{"type":"object","properties":{"employeeId":{"type":"integer"},"date":{"type":"string","format":"date"},"locationId":{"type":"integer"},"shiftId":{"type":["integer","null"]},"shift":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"breakStart":{"type":"string"},"breakMinutes":{"type":"integer"},"wageType":{"type":"string"},"absenceCode":{"type":"string"},"active":{"type":"boolean"}},"description":"Gespeicherter Schicht-Snapshot, unabhängig von späteren Vorlagenänderungen."},"allocations":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"net":{"type":"number"}}}}}}},"planning":{"type":"object","description":"Mitarbeiterprofile, Stundenaufteilung der Schichtvorlagen und angrenzende freigegebene Zuordnungen."},"limitWarnings":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"notifications":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"count":{"type":"integer"}}}},"autoNotes":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"title":{"type":"string","description":"Maximal 80 Zeichen."},"employeeIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Mitarbeiter."},"uniqueItems":true},"locationIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Standort."},"uniqueItems":true},"sourceId":{"type":"integer","minimum":1,"description":"Quellplan."},"copyMode":{"type":"string","enum":["base","full"]}},"required":["month"],"additionalProperties":false},"example":{"month":"2026-11","employeeIds":[1],"locationIds":[1]}}}}}},"/v1/shift-types":{"get":{"operationId":"get__shift_types","tags":["schedules"],"summary":"Schichtvorlagen auflisten","description":"Die Schichtplanung muss für das Unternehmen freigeschaltet sein. Listen unterstützen limit/offset; Abwesenheitsliste enthält die letzten 1.000 Anfragen.\n\nErforderliche Berechtigung: schedules:read.","security":[{"companyToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Liste in data; meta mit total, limit, offset, nextOffset. Andere Listen innerhalb von data bleiben Teil des fachlichen Datensatzes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"breakStart":{"type":"string"},"breakMinutes":{"type":"integer"},"wageType":{"type":"string"},"absenceCode":{"type":"string"},"active":{"type":"boolean"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:read"},"post":{"operationId":"post__shift_types","tags":["schedules"],"summary":"Schichtvorlage anlegen oder ändern","description":"Mit id wird eine bestehende Vorlage aktualisiert. Bestehende Pläne behalten ihre damaligen Schichtwerte.\n\nErforderliche Berechtigung: schedules:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"breakStart":{"type":"string"},"breakMinutes":{"type":"integer"},"wageType":{"type":"string"},"absenceCode":{"type":"string"},"active":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":1,"description":"Nur beim Bearbeiten einer bestehenden Vorlage."},"name":{"type":"string","description":"Name der Vorlage."},"color":{"type":"string","description":"Hex-Farbe #RRGGBB."},"startTime":{"type":"string","description":"HH:mm"},"endTime":{"type":"string","description":"HH:mm; kleiner als Beginn bedeutet Folgetag."},"breakMinutes":{"type":"integer","minimum":0},"breakStart":{"type":["string","null"]},"wageType":{"type":"string","description":"Lohnart aus DATEV-Einstellungen."},"absenceCode":{"type":"string","description":"Abwesenheitsschlüssel, sonst leer."}},"required":["name","color","startTime","endTime","breakMinutes"],"additionalProperties":false},"example":{"name":"Früh","color":"#3568c0","startTime":"07:00","endTime":"15:00","breakMinutes":30,"breakStart":null,"wageType":"","absenceCode":""}}}}}},"/v1/schedule-settings":{"get":{"operationId":"get__schedule_settings","tags":["schedules"],"summary":"Auto-Plan-Regeln lesen","description":"Die Schichtplanung muss für das Unternehmen freigeschaltet sein. Listen unterstützen limit/offset; Abwesenheitsliste enthält die letzten 1.000 Anfragen.\n\nErforderliche Berechtigung: schedules:read.","security":[{"companyToken":[]}],"parameters":[],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"historyMonths":{"type":"integer"},"variety":{"type":"integer"},"minRestHours":{"type":"number"},"rules":{"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"integer"},"locationId":{"type":"integer"},"weekdays":{"type":"array","items":{"type":"integer"}},"count":{"type":"integer"},"holiday":{"type":"string"},"holidayCount":{"type":["integer","null"]}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:read"},"put":{"operationId":"put__schedule_settings","tags":["schedules"],"summary":"Auto-Plan-Regeln speichern","description":"Ersetzt alle Regeln. Wochentage 0=Sonntag bis 6=Samstag. holiday any/only/exclude; holidayCount null verwendet count.\n\nErforderliche Berechtigung: schedules:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"historyMonths":{"type":"integer"},"variety":{"type":"integer"},"minRestHours":{"type":"number"},"rules":{"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"integer"},"locationId":{"type":"integer"},"weekdays":{"type":"array","items":{"type":"integer"}},"count":{"type":"integer"},"holiday":{"type":"string"},"holidayCount":{"type":["integer","null"]}}}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"integer","minimum":1,"description":"Schichtvorlage."},"locationId":{"type":"integer","minimum":1,"description":"Standort."},"weekdays":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6},"uniqueItems":true},"count":{"type":"integer","minimum":0,"maximum":200},"holiday":{"type":"string","enum":["any","only","exclude"]},"holidayCount":{"type":["integer","null"],"minimum":0,"maximum":200}},"required":["shiftId","locationId","weekdays","count","holiday","holidayCount"],"additionalProperties":false},"maxItems":100},"historyMonths":{"type":"integer","minimum":0,"maximum":24},"variety":{"type":"integer","minimum":0,"maximum":100},"minRestHours":{"type":"number","minimum":0,"maximum":48}},"required":["rules","historyMonths","variety","minRestHours"],"additionalProperties":false},"example":{"rules":[],"historyMonths":3,"variety":50,"minRestHours":11}}}}}},"/v1/absences":{"get":{"operationId":"get__absences","tags":["absences"],"summary":"Urlaub und Wunschfrei auflisten","description":"Die Schichtplanung muss für das Unternehmen freigeschaltet sein. Listen unterstützen limit/offset; Abwesenheitsliste enthält die letzten 1.000 Anfragen.\n\nErforderliche Berechtigung: absences:read.","security":[{"companyToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Liste in data; meta mit total, limit, offset, nextOffset. Andere Listen innerhalb von data bleiben Teil des fachlichen Datensatzes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"employeeId":{"type":"integer"},"employeeName":{"type":"string"},"kind":{"type":"string","enum":["vacation","day_off"]},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"note":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"managerNote":{"type":"string"},"createdAt":{"type":"string"},"reviewedAt":{"type":["string","null"],"format":"date-time"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"absences:read"},"post":{"operationId":"post__absences","tags":["absences"],"summary":"Urlaub oder Wunschfrei anlegen","description":"Antrag im eigenen Unternehmen; genehmigte Abwesenheiten beeinflussen die Planung.\n\nErforderliche Berechtigung: absences:write.","security":[{"companyToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"201":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"absences:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employeeId":{"type":"integer","minimum":1,"description":"Mitarbeiter."},"kind":{"type":"string","enum":["vacation","day_off"]},"from":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"to":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"status":{"type":"string","enum":["pending","approved"]},"note":{"type":"string","maxLength":240}},"required":["employeeId","kind","from","to"],"additionalProperties":false},"example":{"employeeId":1,"kind":"day_off","from":"2026-11-01","to":"2026-11-01","status":"approved"}}}}}},"/v1/shift-types/{id}":{"delete":{"operationId":"delete__shift_types_id","tags":["schedules"],"summary":"Schichtvorlage entfernen","description":"Entfernt die Vorlage aus der Auswahl; Planhistorien bleiben erhalten.\n\nErforderliche Berechtigung: schedules:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:write"}},"/v1/schedules/{id}":{"get":{"operationId":"get__schedules_id","tags":["schedules"],"summary":"Monatsplan mit Belegung lesen","description":"Enthält Revision, Zuordnungen, Konflikte und Besetzungslücken.\n\nErforderliche Berechtigung: schedules:read.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"month":{"type":"string"},"status":{"type":"string","enum":["draft","completed","released"]},"revision":{"type":"integer"},"monthLabel":{"type":"string"},"releasedAt":{"type":["string","null"],"format":"date-time"},"employeeIds":{"type":"array","items":{"type":"integer"}},"locationIds":{"type":"array","items":{"type":"integer"}},"employees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"holidays":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"},"locationId":{"type":"integer"}}}},"entries":{"type":"array","items":{"type":"object","properties":{"employeeId":{"type":"integer"},"date":{"type":"string","format":"date"},"locationId":{"type":"integer"},"shiftId":{"type":["integer","null"]},"shift":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"breakStart":{"type":"string"},"breakMinutes":{"type":"integer"},"wageType":{"type":"string"},"absenceCode":{"type":"string"},"active":{"type":"boolean"}},"description":"Gespeicherter Schicht-Snapshot, unabhängig von späteren Vorlagenänderungen."},"allocations":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"net":{"type":"number"}}}}}}},"planning":{"type":"object","description":"Mitarbeiterprofile, Stundenaufteilung der Schichtvorlagen und angrenzende freigegebene Zuordnungen."},"limitWarnings":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"notifications":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"count":{"type":"integer"}}}},"autoNotes":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:read"},"put":{"operationId":"put__schedules_id","tags":["schedules"],"summary":"Planbelegung speichern","description":"Ersetzt die gesamte Belegung eines Entwurfs. Optionale employeeIds sortieren alle vorhandenen Teilnehmer. Standort-, Abwesenheits- und Ruhezeitregeln bleiben verbindlich.\n\nErforderliche Berechtigung: schedules:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"month":{"type":"string"},"status":{"type":"string","enum":["draft","completed","released"]},"revision":{"type":"integer"},"monthLabel":{"type":"string"},"releasedAt":{"type":["string","null"],"format":"date-time"},"employeeIds":{"type":"array","items":{"type":"integer"}},"locationIds":{"type":"array","items":{"type":"integer"}},"employees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"holidays":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"},"locationId":{"type":"integer"}}}},"entries":{"type":"array","items":{"type":"object","properties":{"employeeId":{"type":"integer"},"date":{"type":"string","format":"date"},"locationId":{"type":"integer"},"shiftId":{"type":["integer","null"]},"shift":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"breakStart":{"type":"string"},"breakMinutes":{"type":"integer"},"wageType":{"type":"string"},"absenceCode":{"type":"string"},"active":{"type":"boolean"}},"description":"Gespeicherter Schicht-Snapshot, unabhängig von späteren Vorlagenänderungen."},"allocations":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"net":{"type":"number"}}}}}}},"planning":{"type":"object","description":"Mitarbeiterprofile, Stundenaufteilung der Schichtvorlagen und angrenzende freigegebene Zuordnungen."},"limitWarnings":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"notifications":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"count":{"type":"integer"}}}},"autoNotes":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1,"description":"Aktuelle Revision aus dem letzten Abruf; veraltete Revisionen ergeben HTTP 409."},"employeeIds":{"type":"array","items":{"type":"integer","minimum":1,"description":"Mitarbeiter."},"uniqueItems":true},"entries":{"type":"array","items":{"type":"object","properties":{"employeeId":{"type":"integer","minimum":1,"description":"Mitarbeiter im Plan."},"date":{"type":"string","format":"date","description":"Kalendertag YYYY-MM-DD in der Mandantenzeitzone."},"locationId":{"type":"integer","minimum":1,"description":"Standort im Plan."},"shiftId":{"type":"integer","minimum":1,"description":"Schichtvorlage."}},"required":["employeeId","date","locationId","shiftId"],"additionalProperties":false}}},"required":["revision","entries"],"additionalProperties":false},"example":{"revision":1,"entries":[]}}}}},"delete":{"operationId":"delete__schedules_id","tags":["schedules"],"summary":"Monatsplan löschen","description":"Bei veröffentlichten Plänen wird die Freigabe zurückgenommen; betroffene Abrechnungsprüfungen werden geöffnet.\n\nErforderliche Berechtigung: schedules:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1,"description":"Aktuelle Revision aus dem letzten Abruf; veraltete Revisionen ergeben HTTP 409."}},"required":["revision"],"additionalProperties":false},"example":{"revision":1}}}}}},"/v1/schedules/{id}/status":{"post":{"operationId":"post__schedules_id_status","tags":["schedules"],"summary":"Planstatus ändern","description":"draft → completed → released. Freigabe kann Benachrichtigungen an Mitarbeiter auslösen, wenn im Manager aktiviert. draft öffnet den Plan erneut.\n\nErforderliche Berechtigung: schedules:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"month":{"type":"string"},"status":{"type":"string","enum":["draft","completed","released"]},"revision":{"type":"integer"},"monthLabel":{"type":"string"},"releasedAt":{"type":["string","null"],"format":"date-time"},"employeeIds":{"type":"array","items":{"type":"integer"}},"locationIds":{"type":"array","items":{"type":"integer"}},"employees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"holidays":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"},"locationId":{"type":"integer"}}}},"entries":{"type":"array","items":{"type":"object","properties":{"employeeId":{"type":"integer"},"date":{"type":"string","format":"date"},"locationId":{"type":"integer"},"shiftId":{"type":["integer","null"]},"shift":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"breakStart":{"type":"string"},"breakMinutes":{"type":"integer"},"wageType":{"type":"string"},"absenceCode":{"type":"string"},"active":{"type":"boolean"}},"description":"Gespeicherter Schicht-Snapshot, unabhängig von späteren Vorlagenänderungen."},"allocations":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"net":{"type":"number"}}}}}}},"planning":{"type":"object","description":"Mitarbeiterprofile, Stundenaufteilung der Schichtvorlagen und angrenzende freigegebene Zuordnungen."},"limitWarnings":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"notifications":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"count":{"type":"integer"}}}},"autoNotes":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1,"description":"Aktuelle Revision aus dem letzten Abruf; veraltete Revisionen ergeben HTTP 409."},"status":{"type":"string","enum":["draft","completed","released"]}},"required":["revision","status"],"additionalProperties":false},"example":{"revision":1,"status":"completed"}}}}}},"/v1/schedules/{id}/auto":{"post":{"operationId":"post__schedules_id_auto","tags":["schedules"],"summary":"Auto-Plan starten","description":"Erfordert konfigurierte OpenAI-Anbindung; kann API-Kosten verursachen. Hinweise wie im Manager, bis 4.000 Zeichen. Ergebnis bleibt Entwurf; keine automatische Freigabe.\n\nErforderliche Berechtigung: schedules:auto.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"month":{"type":"string"},"status":{"type":"string","enum":["draft","completed","released"]},"revision":{"type":"integer"},"monthLabel":{"type":"string"},"releasedAt":{"type":["string","null"],"format":"date-time"},"employeeIds":{"type":"array","items":{"type":"integer"}},"locationIds":{"type":"array","items":{"type":"integer"}},"employees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"holidays":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"name":{"type":"string"},"locationId":{"type":"integer"}}}},"entries":{"type":"array","items":{"type":"object","properties":{"employeeId":{"type":"integer"},"date":{"type":"string","format":"date"},"locationId":{"type":"integer"},"shiftId":{"type":["integer","null"]},"shift":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"},"breakStart":{"type":"string"},"breakMinutes":{"type":"integer"},"wageType":{"type":"string"},"absenceCode":{"type":"string"},"active":{"type":"boolean"}},"description":"Gespeicherter Schicht-Snapshot, unabhängig von späteren Vorlagenänderungen."},"allocations":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"net":{"type":"number"}}}}}}},"planning":{"type":"object","description":"Mitarbeiterprofile, Stundenaufteilung der Schichtvorlagen und angrenzende freigegebene Zuordnungen."},"limitWarnings":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"notifications":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"count":{"type":"integer"}}}},"autoNotes":{"type":"array","items":{"type":"string"}}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:auto","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"integer","minimum":1,"description":"Aktuelle Revision aus dem letzten Abruf; veraltete Revisionen ergeben HTTP 409."},"notes":{"type":"string","maxLength":4000}},"required":["revision"],"additionalProperties":false},"example":{"revision":1,"notes":"Mitarbeiter #1 soll am 1.11. frei haben"}}}}}},"/v1/schedules/{id}/pdf":{"get":{"operationId":"get__schedules_id_pdf","tags":["schedules"],"summary":"Freigegebenen Plan als PDF laden","description":"Einseitige Übersicht; nur für freigegebene Pläne.\n\nErforderliche Berechtigung: schedules:read.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/pdf":{"schema":{"type":"string","contentMediaType":"application/pdf"}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"schedules:read"}},"/v1/absences/{id}":{"patch":{"operationId":"patch__absences_id","tags":["absences"],"summary":"Abwesenheitsantrag entscheiden","description":"Genehmigen, ablehnen oder erneut öffnen; bestehende Planung wird auf Konflikte geprüft.\n\nErforderliche Berechtigung: absences:write.","security":[{"companyToken":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"Idempotency-Key","in":"header","description":"Optional, 8–128 Zeichen. Gleiche Anfrage/gleicher Key liefert für 24 Stunden die gespeicherte JSON-Antwort; andere Nutzlast ergibt 409. Authentifizierung und Rechte werden erneut geprüft.","schema":{"type":"string","minLength":8,"maxLength":128}}],"responses":{"200":{"description":"Ergebnis in data; requestId dient zur Zuordnung im Protokoll. Downloads liefern die Datei direkt.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"}}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"absences:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["approved","rejected","pending"]},"managerNote":{"type":"string","maxLength":240}},"required":["status"],"additionalProperties":false},"example":{"status":"approved","managerNote":"Abgestimmt"}}}}}},"/v1/news":{"get":{"operationId":"get__news","tags":["news"],"summary":"Mitteilungen lesen","description":"Veröffentlichte allgemeine und unternehmensbezogene Mitteilungen mit Anhängen; limit/offset.\n\nErforderliche Berechtigung: news:read.","security":[{"companyToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Liste in data; meta mit total, limit, offset, nextOffset. Andere Listen innerhalb von data bleiben Teil des fachlichen Datensatzes.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"Mitteilung mit id, title, body, createdAt und freigegebenen Anhängen."}},"meta":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"nextOffset":{"type":["integer","null"]}}},"requestId":{"type":"string"}},"required":["data","requestId"]}}}},"400":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"401":{"description":"Token fehlt, ist ungültig oder abgelaufen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"403":{"description":"Berechtigung oder Mandantenfreigabe fehlt","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"404":{"description":"Nicht gefunden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"409":{"description":"Konflikt oder veraltete Revision","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"413":{"description":"Anfrage zu groß","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"429":{"description":"Limit erreicht; Retry-After beachten","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"500":{"description":"Serverfehler","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}},"503":{"description":"API zentral deaktiviert","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string"}},"required":["error","requestId"],"additionalProperties":false}}}}},"x-permission":"news:read"}},"/v1/auth/token":{"post":{"operationId":"createToken","tags":["authentication"],"summary":"Kurzlebiges Zugriffstoken erstellen","description":"Client-ID und Secret werden im Manager erzeugt. JSON-Anmeldung oder HTTP Basic (clientId:clientSecret). 10 Versuche pro Minute je IP; Token 15 Minuten gültig. Kein Refresh-Token; nach Ablauf erneut anmelden. Token ist nur für die Unternehmens-API gültig.","security":[{"clientCredentials":[]},{}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}},"required":["clientId","clientSecret"],"additionalProperties":false},"example":{"clientId":"tm_live_…","clientSecret":"tms_…"}}}},"responses":{"200":{"description":"Token erstellt","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","const":900},"scope":{"type":"string"}},"required":["access_token","token_type","expires_in","scope"],"additionalProperties":false}}}},"401":{"description":"Ungültige Zugangsdaten"},"403":{"description":"Unternehmens-API gesperrt"},"429":{"description":"Zu viele Versuche"},"503":{"description":"API deaktiviert"}}}},"/v1/status":{"get":{"operationId":"status","tags":["authentication"],"summary":"Öffentlichen Betriebsstatus lesen","security":[],"responses":{"200":{"description":"Globale API-Freigabe, Version und Serverzeit; keine Unternehmensdaten."}}}}},"components":{"securitySchemes":{"companyToken":{"type":"http","scheme":"bearer","description":"Undurchsichtiges TimeMe-Token, kein JWT; über /v1/auth/token beziehen."},"clientCredentials":{"type":"http","scheme":"basic"}}}}