Skip to Content
Authentifizierung

Authentifizierung und API-Keys

Die API verwendet Unternehmens-API-Keys (Service-Accounts, nicht an einen Benutzer gebunden). Jeder Request authentifiziert sich mit dem Key als Bearer-Token:

curl https://api.kinmu.app/v1/organization \ -H "Authorization: Bearer kinmu_sk_live_xxxxxxxx"

Eigenschaften der Keys

Das Unternehmen wird immer aus dem Key aufgelöst: Du sendest nie eine companyId in der URL oder im Body.

AspektDetail
Formatkinmu_sk_live_<40+ chars> (Produktion) · kinmu_sk_test_<40+ chars> (Sandbox).
SichtbarkeitWird beim Erstellen nur ein einziges Mal angezeigt. Danach siehst du nur noch den Präfix + die ersten Zeichen.
AusstellungÜber das Dashboard my.kinmu.app → Entwickler (nur global_admin / company_manager).
LimitMaximal 10 aktive Keys pro Unternehmen.
AblaufOptional (90 / 180 / 365 Tage oder ohne Ablauf).

Scopes

Jeder Key trägt explizite Scopes (Least Privilege). Ohne den erforderlichen Scope antwortet der Endpoint mit 403 invalid_scope.

ScopeErlaubt
org:empleados:readMitarbeitende lesen.
org:empleados:writeMitarbeitende anlegen, aktualisieren und austragen.
org:fichajes:readStempelungen und Work Summaries lesen.
org:fichajes:writeStempelungen erfassen.
org:ausencias:readAbwesenheiten lesen.
org:ausencias:writeAbwesenheiten erstellen, genehmigen und ablehnen.
org:saldos:readUrlaubssalden lesen.
org:estructura:readLocations und Units lesen.
org:informes:readReports anfordern und herunterladen.
webhooks:manageAusgehende Webhooks verwalten.

GET /v1/organization erfordert keinen bestimmten Scope: Er dient der Introspektion und dem Validieren des Keys. Reports verlangen zusätzlich den Lese-Scope ihrer Domäne: z. B. erfordert absences_export den Scope org:ausencias:read.

Gib jeder Integration nur die Scopes, die sie braucht.

Sandbox

Keys mit kinmu_sk_test_ arbeiten immer auf einem Sandbox-Unternehmen mit synthetischen Daten, isoliert von deinen echten Daten. Siehe den Sandbox-Guide.

Rotation

Einen Key rotieren = einen neuen erstellen und den alten widerrufen. Der Ablauf ohne Downtime:

  1. Erstelle den neuen Key mit denselben Scopes.
  2. Deploye deine Integration mit dem neuen Key.
  3. Verifiziere, dass sie funktioniert (z. B. mit GET /v1/organization).
  4. Widerrufe den alten Key.

Widerruf

Der Widerruf über das Dashboard wirkt sofort: Der Key funktioniert ab dem nächsten Request nicht mehr (401 unauthenticated). Widerrufe jeden Key umgehend, den du für kompromittiert hältst, und prüfe seine last_used_ip.

Best Practices

  • Veröffentliche einen Key niemals in Client-Code, mobilen Apps, Repositories oder Logs. Es sind Server-Credentials.
  • Bewahre Keys in einem Secrets-Manager oder in Umgebungsvariablen auf.
  • Verwende einen Key pro Integration, um granular widerrufen zu können.
  • Wende Least Privilege an: nur die unbedingt nötigen Scopes.
  • Konfiguriere ein Ablaufdatum und rotiere regelmäßig.
  • Protokolliere in Logs niemals den Header Authorization.

Authentifizierungsfehler

HTTPcodeUrsache
401unauthenticatedKey fehlt, ist ungültig, widerrufen oder abgelaufen.
403invalid_scopeDer Key hat den erforderlichen Scope nicht (errors.required_scope).
403subscription_inactiveDas Abonnement des Unternehmens ist ausgesetzt.
403addon_disabledDas Addon Public API ist nicht aktiv.

Das vollständige Fehlerformat findest du unter Konventionen → Fehler.

Last updated on