Stampfactory
Dokumentation

API-Referenz

REST API für die Stampfactory Zeiterfassungs- und Personalverwaltungsplattform

Überblick

Die Stampfactory API ist eine REST API und stellt alle Funktionen der Zeiterfassungs- und Personalverwaltungsplattform bereit. Sie ist mandantenfähig: jeder Mandant hat eine eigene Datenbank, und jede Anfrage wird über die Subdomain dem richtigen Mandanten zugeordnet.

Basis-URL

Jeder Mandant erreicht die API über seine eigene Subdomain. Der Pfad-Präfix ist immer /rest.

https://{tenant}.stamp.eu/rest

Für den Beispielmandanten demo lautet die Basis-URL also https://demo.stamp.eu/rest. Eigene Domains werden unterstützt; auch dort bleibt der Präfix /rest unverändert.

Authentifizierung

Die API nutzt Bearer-Token (Laravel Sanctum). Den Token liefert der Login-Endpunkt. Er muss bei allen weiteren Anfragen im Header Authorization mitgeschickt werden.

Token beziehen

curl -X POST https://demo.stamp.eu/rest/login \
  -H "Content-Type: application/json" \
  -d '{"code": "admin", "password": "geheim1234"}'

Token verwenden

curl -H "Authorization: Bearer {token}" \
  https://demo.stamp.eu/rest/employees

Mit DELETE /rest/login wird der Token wieder ungültig, GET /rest/login liefert die angemeldete Person, und PUT /rest/login ändert das eigene Passwort.

Hinweis

Der Terminal-Endpunkt POST /rest/terminal/{code} ist bewusst ohne Token erreichbar, damit Hardware-Terminals ohne Anmeldung stempeln können.

Datenformate

Die folgenden Formate gelten verbindlich für die gesamte API.

TypFormatBeispiel
Dauer (Anzeige)String HH:MM:SS.mmm, Feldname ohne Suffix"08:00:00.000"
Dauer (Rohwert)Ganzzahl in Millisekunden, Feldname mit Suffix _ms28800000
DatumISO 8601 (YYYY-MM-DD)"2026-07-25"
Fachliche Zeitstempel (Stempelungen, Korrekturen)ISO 8601 in der Zeitzone des Mandanten"2026-07-25T08:00:00+02:00"
Technische Metadaten (created_at, updated_at)ISO 8601 in UTC"2026-07-25T06:00:00+00:00"
IDsUUID beziehungsweise TypeID als String"9d3f8c1a-4b2e-4f7d-9a11-2c5e8b0d1f34"
Arbeitszeit-FlagsGanzzahlige Bitmaske im Feld flags512 steht für Feiertag
Monats-PeriodenYYYY-MM"2026-07"
Hinweis

Dauerwerte gibt es je nach Feld in zwei Varianten. Für Anzeigen eignet sich der formatierte String, für Berechnungen der Millisekundenwert mit dem Suffix _ms. Beide beschreiben denselben Wert.

Arbeitszeit-Flags

Das Feld flags fasst die Eigenschaften eines Arbeitstags als Bitmaske zusammen. Ein Tag kann mehrere Eigenschaften gleichzeitig tragen, etwa halber Urlaubstag und Feiertag. Die Prüfung erfolgt per bitweisem UND:

const VACATION = 1 << 2; // 4
const isVacation = (day.flags & VACATION) !== 0;

Antwortformat

Erfolgreiche Antworten liefern die fachliche Nutzlast unter data. Ausgenommen sind die Stempel-Endpunkte POST /rest/terminal/{code} und /rest/mobile, die aus Kompatibilitätsgründen ein flaches Objekt zurückgeben.

Listen sind, sofern sie paginiert werden, im Laravel-Paginator-Format aufgebaut und enthalten neben data zusätzlich links und meta.

{
  "data": [ ],
  "links": { "first": "…", "last": "…", "prev": null, "next": "…" },
  "meta": { "current_page": 1, "per_page": 25, "total": 137 }
}

Fehlerformat

Alle Fehler mit Status 4xx und 5xx nutzen denselben Envelope. Das Feld type verweist auf die passende Stelle in der Fehlerreferenz.

{
  "request_id": "9f1c2f7e-5b3c-4a11-9a1d-2f0a5c7d3e88",
  "timestamp": "2026-07-25T06:00:00Z",
  "message": "Das Feld Code ist erforderlich.",
  "field_errors": {
    "code": ["Das Feld Code ist erforderlich."]
  },
  "errors": [
    {
      "title": "Validation Error",
      "detail": "The given data was invalid.",
      "type": "https://stamp-factory.eu/docs/errors#validation_error",
      "_meta": {
        "path": "/rest/employees",
        "fields": { "code": ["Das Feld Code ist erforderlich."] }
      }
    }
  ]
}

field_errors erscheint nur bei Validierungsfehlern (Status 422). Endpunktspezifische Zusatzdaten wie warnings, earliest oder code stehen kanonisch in errors[0]._meta; gleichlautende Felder auf oberster Ebene sind eine Übergangslösung für ältere Clients.

Die request_id entspricht dem Response-Header X-Request-Id und hilft dem Support dabei, eine konkrete Anfrage wiederzufinden.

Fehlerreferenz

Alle Fehlercodes mit Bedeutung, typischen Auslösern und Beispielantworten.

Berechtigungsmodell

Die API verwendet rollenbasierte Zugriffskontrolle. Jede Benutzerin und jeder Benutzer erhält genau eine Rolle, die bestimmt, auf welche Funktionen Zugriff besteht.

Systemrollen

RolleBeschreibung
Workspace AdminVollzugriff auf alle Ressourcen. Kann nicht gelöscht oder eingeschränkt werden.
HR AdminVerwaltung von Mitarbeitenden, Abwesenheiten und Berichten.
LohnbuchhaltungZugriff auf Lohndaten, Zeiterfassungs-Export und Berichte.
Zeiterfassung AdminVerwaltung von Arbeitszeiten, Arbeitszeitmodellen und Feiertagskalendern.
MitarbeitendeEigene Stempelungen (Web, Mobil, Terminal) und eigene Benachrichtigungen.

Zusätzlich lassen sich über POST /rest/roles eigene Rollen mit individuellen Berechtigungen anlegen.

Berechtigungen

Berechtigungen sind in Funktionsbereiche gegliedert:

BereichBerechtigungen
Mitarbeitendeemployees:view, employees:manage, employees:assign_roles
Zeiterfassungtime-tracking:view, time-tracking:correct, time-tracking:export, time-tracking:clock-web, time-tracking:clock-mobile, time-tracking:clock-terminal
Abwesenheitenabsences:view, absences:manage, absences:approve
Arbeitszeitmodelleschedule-models:view, schedule-models:manage
Feiertagskalenderholidays:view, holidays:manage
Organisationorg:manage
Projekteprojects:view, projects:manage
Lohnabrechnungpayroll:view, payroll:manage
Berichtereports:view
Einstellungensettings:manage
Benachrichtigungennotifications:own, notifications:department

Sichtbarkeit

Die Sichtbarkeit von Mitarbeitenden richtet sich nach der zugewiesenen Rolle:

  • Workspace Admin: sieht alle Mitarbeitenden.
  • Rollen mit employees:view oder employees:manage: sehen Mitarbeitende der eigenen Organisationseinheit und aller untergeordneten Einheiten.
  • Rollen ohne diese Berechtigungen: sehen nur die eigenen Daten.

Module

Funktionen lassen sich pro Mandant als Modul aktivieren. Ist ein Modul deaktiviert, antworten die zugehörigen Endpunkte mit Status 403 und dem Code forbidden. Welche Module ein Mandant nutzt, liefert GET /rest/ in den Feldern modules und available_modules.

ModulBeschreibung
leave_requestsAbwesenheitsverwaltung
overtime_accountsÜberstundenkonten
projectsProjektzeiterfassung
locationsStandortverwaltung
departmentsAbteilungsstruktur
cost_centersKostenstellenverwaltung
short_workKurzarbeit
shift_rosterDienstplan
payrollLohnabrechnung und Monatsabschluss
datev_payrollDATEV Lohn und Gehalt
exportZeitwirtschafts-Export
nfc_clockStempeln per NFC-Tag
geo_clockStandortprüfung beim Stempeln
mobile_appMobile App
terminalsHardware-Terminals
employee_documentsDigitale Personalakte
eauElektronische Arbeitsunfähigkeitsbescheinigung
dls_importImport aus Lohnprogrammen
webhooksWebhooks
moodStimmungsbarometer
custom_domainEigene Domain
Hinweis

Die Prüfungen nach Arbeitszeitgesetz sind kein Modul. Sie laufen für jeden Mandanten automatisch mit und lassen sich nicht abschalten.