Scopes#
Jede Operation verlangt genau einen Scope, benannt als <resource>.<action>:
shifts.read locations.write timesheets.read
GETverlangt.read.POST,PATCH,DELETEverlangen.write.Schreiben schliesst Lesen ein —
shifts.writeerfüllt auchshifts.read, du musst also nie beide anfordern.
Der Katalog#
Die Menge der erteilbaren Scopes ist geschlossen und Teil des Vertrags. Hier ist sie vollständig — eine Zeile je Ressource, jeweils mit ihrem .read- und .write-Scope:
Scopes |
Deckt ab |
|---|---|
|
Mandanteneinstellungen (Singleton). |
|
Bereiche innerhalb eines Standorts. |
|
Verfügbarkeitsblöcke von Mitarbeitenden (inkl. wiederkehrender). |
|
Definitionen von Pausenregeln. |
|
Personalbudgets und Umsatzziele. |
|
Mitarbeitende, ihre Mitgliedschaften, Einladungen und ihr Lebenszyklus. |
|
Anstellungsarten und ihre Lohnvorgaben. |
|
Allgemeine Termine (ausser Schichten) und ihre Teilnehmenden. |
|
Feiertagskalender. |
|
Personalkostenbericht. |
|
Abwesenheitssalden (nur lesbar). |
|
Abwesenheitsrichtlinien und ihre Stufenleitern. |
|
Abwesenheitsanträge und ihre Prüfübergänge. |
|
Standorte. |
|
Angebote für offene Schichten (auf dieser API nur lesbar). |
|
Positionen, ihre erwarteten Qualifikationen und die Zuteilung von Mitarbeitenden. |
|
Schichten, ihr Veröffentlichungsstand und ihre Zuteilungen. |
|
Qualifikationskatalog. |
|
Angebote für Schichttausche (auf dieser API nur lesbar). |
|
Journal und Salden der Zeitgutschrift. |
|
Stundenrapporte, Zeitstempel, Pausen und Freigaben. |
|
Registrierung von Webhook-Endpunkten und Rotation der Geheimnisse. |
|
Verlauf der ausgelieferten Ereignisse zum Abgleich. |
|
Arbeitsregeln (inkl. des Blocks zur Zeitgutschrift nach Art. 17b). |
Für einen einzelnen Endpunkt brauchst du diese Tabelle nicht: jede Operation in der API-Referenz nennt direkt den Scope, den sie verlangt. Sowohl diese Angabe als auch die Tabelle oben stammen aus demselben Wert, den die Berechtigungsprüfung des Servers liest — was dokumentiert ist und was durchgesetzt wird, kann also nicht auseinanderlaufen.
Die richtigen anfordern#
Scopes werden je Anbindungs-Client erteilt, wenn wir ihn registrieren — frag also nach dem, was die Anbindung tatsächlich tut, und nach nicht mehr. Ein Lohnexport, der Stunden liest, bekommt timesheets.read und sonst nichts.
Ein Tippfehler fällt schon bei der Registrierung auf, nicht zur Laufzeit: shift.read wird mit einem Vorschlag abgelehnt, statt einen Client zu registrieren, der bei jedem Aufruf scheitert.
Um später einen Scope zu ergänzen, schreib an support@shiftavo.com — dafür braucht es keine neuen Zugangsdaten.
Wenn ein Scope fehlt#
Ein Aufruf mit gültigem Token, aber ohne die nötige Berechtigung ist:
{
"error": {
"type": "permission_error",
"code": "insufficient_scope",
"message": "…",
"details": []
}
}
mit Status 403. Das ist etwas anderes als ein 401 (das Token selbst taugt nichts — siehe Authentifizierung) und als ein 404, den du auch für einen Datensatz ausserhalb deines Unternehmens bekommst, damit dessen Existenz nie durchsickert.