API - Benutzer Admin

📕 Für Administratoren und Entwickler

Über die spiritflow Public API können Benutzer des Mandanten programmatisch abgerufen und angelegt werden. Alle Endpunkte sind unter dem Basis-Pfad /api/v1/users erreichbar und erfordern einen gültigen API-Key mit dem entsprechenden Scope.


Benutzer auflisten

GET /api/v1/users

Erforderlicher Scope: users:read

Gibt alle aktiven Benutzer des Mandanten zurück.

Antwort-Felder:

FeldTypBeschreibung
idnumberEindeutige ID des Benutzers
displayNamestringAnzeigename
emailstringE-Mail-Adresse
rolesstring[]Rollen des Benutzers

Antwort (200 OK):

{
  "data": [
    {
      "id": 2,
      "displayName": "Max Mustermann",
      "email": "max.mustermann@firma.de",
      "roles": ["TENANT_ADMIN"]
    },
    {
      "id": 5,
      "displayName": "Lisa Schmidt",
      "email": "lisa.schmidt@firma.de",
      "roles": ["USER"]
    }
  ],
  "pagination": {
    "page": 0,
    "size": 2,
    "totalElements": 2,
    "totalPages": 1
  },
  "meta": {
    "requestId": "...",
    "timestamp": "2025-03-01T10:30:00Z"
  }
}

cURL-Beispiel:

curl "https://app.spiritflow.team/api/v1/users" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Einzelnen Benutzer abrufen

GET /api/v1/users/{id}

Erforderlicher Scope: users:read

Pfad-Parameter:

ParameterTypBeschreibung
idLongID des Benutzers

Antwort (200 OK): Identisch mit den Einträgen der Benutzerliste.

Fehler-Codes:

HTTP-StatusCodeBeschreibung
404NOT_FOUNDBenutzer nicht gefunden oder gehoert nicht zu diesem Mandanten

cURL-Beispiel:

curl "https://app.spiritflow.team/api/v1/users/5" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Benutzer anlegen

POST /api/v1/users

Erforderlicher Scope: users:write

Request-Body:

FeldTypPflichtBeschreibung
usernamestringJaBenutzername (eindeutig innerhalb des Mandanten)
emailstringJaE-Mail-Adresse (systemweit eindeutig)
firstNamestringJaVorname
lastNamestringJaNachname
passwordstringJaPasswort (wird serverseitig gehasht)
rolesstring[]NeinRollen, Standard: ["USER"]. Erlaubt: USER, TEAM_LEADER, PROJECT_MANAGER, EXTERNAL_MEMBER, FIELD_USER
employmentStartDatestringNeinBeschaeftigungsbeginn (YYYY-MM-DD)
weeklyWorkingHoursnumberNeinWochenstunden (überschreibt Mandanten-Standard)
workingDaysstring[]NeinArbeitstage, z.B. ["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY"]

Antwort (201 Created): Gleiche Felder wie bei der Benutzerliste.

Fehler-Codes:

HTTP-StatusCodeBeschreibung
402LICENSE_SEAT_LIMIT_REACHEDDas Lizenz-Sitzplatzlimit des Mandanten ist erreicht
409CONFLICTE-Mail-Adresse oder Benutzername bereits vergeben

cURL-Beispiel:

curl -X POST "https://app.spiritflow.team/api/v1/users" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "j.mueller",
    "email": "j.mueller@firma.de",
    "firstName": "Julia",
    "lastName": "Müller",
    "password": "sicheresPasswort123!",
    "roles": ["USER"]
  }'

Profilbild hochladen

POST /api/v1/users/{id}/avatar

Erforderlicher Scope: users:write

Pfad-Parameter:

ParameterTypBeschreibung
idLongID des Benutzers

Request: Multipart Form-Data mit dem Feld file. Unterstuetzte Formate: JPEG, PNG, GIF, WebP.

Antwort (200 OK):

{
  "data": {
    "url": "/api/attachments/profile-photos/abc123.jpg"
  }
}

Fehler-Codes:

HTTP-StatusCodeBeschreibung
400BAD_REQUESTDateiformat nicht unterstützt oder Datei fehlt
404NOT_FOUNDBenutzer nicht gefunden

cURL-Beispiel:

curl -X POST "https://app.spiritflow.team/api/v1/users/5/avatar" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -F "file=@/pfad/zum/foto.jpg"

Benutzer aktualisieren

PATCH /api/v1/users/{id}

Aktualisiert einen bestehenden Benutzer (PATCH-Semantik). Nur angegebene Felder werden geändert. null-Werte bedeuten “nicht ändern”.

Erforderlicher Scope: users:write

Pfad-Parameter:

ParameterTypBeschreibung
idLongID des Benutzers

Request-Body (alle Felder optional):

FeldTypBeschreibung
firstNameStringVorname (max. 100 Zeichen)
lastNameStringNachname (max. 100 Zeichen)
displayNameStringAnzeigename (max. 201 Zeichen). Wird in firstName und lastName aufgeteilt, wenn diese nicht explizit angegeben sind.
usernameStringBenutzername (eindeutig innerhalb des Mandanten, max. 100 Zeichen)
rolesString[]Rollen. Erlaubt: USER, TEAM_LEADER, PROJECT_MANAGER, EXTERNAL_MEMBER, FIELD_USER. Nicht erlaubt: TENANT_ADMIN, SUPER_ADMIN.
employmentStartDateStringEintrittsdatum (YYYY-MM-DD)
employmentEndDateStringAustrittsdatum (YYYY-MM-DD). null = noch beschäftigt
weeklyWorkingHoursnumberIndividuelle Wochenarbeitsstunden
workingDaysString[]Arbeitstage, z.B. ["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY"]
defaultHourlyRatenumberStandard-Stundensatz in Euro
annualVacationDaysnumberIndividuelle Urlaubstage pro Jahr
jobTitleStringBerufsbezeichnung (max. 100 Zeichen)
mobilePhoneStringMobiltelefonnummer (max. 20 Zeichen)
enabledbooleanBenutzerkonto sperren. Nur false erlaubt (sperren). Reaktivierung archivierter Benutzer ist über die Public API nicht möglich.

Antwort (200 OK): Aktualisiertes Benutzerobjekt (gleiche Struktur wie bei der Benutzerliste)

Fehler-Codes:

HTTP-StatusCodeBeschreibung
400VALIDATION_ERRORUngültige Feldwerte oder verbotene Rolle
404NOT_FOUNDBenutzer nicht gefunden
409CONFLICTBenutzername bereits vergeben

cURL-Beispiel:

curl -X PATCH "https://app.spiritflow.team/api/v1/users/7" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "jobTitle": "Senior-Entwickler",
    "weeklyWorkingHours": 38.5,
    "roles": ["USER", "TEAM_LEADER"]
  }'

Benutzer deaktivieren

DELETE /api/v1/users/{id}

Deaktiviert einen Benutzer (archiviert ihn). Der Tenant-Admin kann nicht deaktiviert werden.

Erforderlicher Scope: users:write

Pfad-Parameter:

ParameterTypBeschreibung
idLongID des Benutzers

Antwort: 204 No Content

Fehler-Codes:

HTTP-StatusCodeBeschreibung
403ACCESS_DENIEDVersuch, den Tenant-Admin zu deaktivieren
404NOT_FOUNDBenutzer nicht gefunden oder gehört nicht zu diesem Mandanten

cURL-Beispiel:

curl -X DELETE "https://app.spiritflow.team/api/v1/users/7" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"