Skip to Content
Guides nach Use CaseZutrittskontrolle

Zutrittskontrolle

Ziel: dein Zutrittskontrollsystem (Drehkreuze, Kartenleser, Kioske) erfasst Stempelungen in Kinmu — in Echtzeit.

Benötigte Scopes: org:fichajes:write (erfassen) und org:fichajes:read (abfragen).

Eine Stempelung erfassen

POST /v1/check-ins erfasst ein Ereignis im Namen einer Person. Es wird mit source=api gespeichert, ist auditiert und respektiert die Arbeitszeit-Validierungen (kein Bypass der Regeln).

curl -s -X POST "$KINMU_BASE_URL/check-ins" \ -H "Authorization: Bearer $KINMU_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "employee_id": "a1b2c3d4-…", "type": "in", "timestamp": "2026-07-08T08:00:00Z", "location_id": "loc-uuid", "note": "Acceso puerta principal" }'

Felder im Body:

FeldPflichtHinweise
employee_idJaÖffentliche UUID der Person.
typeJain, out, break_start oder break_end.
timestampJaISO 8601 in UTC. Muss im Fenster [jetzt − 24 h, jetzt + 5 Min.] liegen; außerhalb → 422 validation_failed.
location_idNeinStandort, an dem die Stempelung stattfindet.
noteNeinFreitext (z. B. Kennung des Lesegeräts).

Antwort 201:

{ "id": "ci-uuid", "employee_id": "a1b2c3d4-…", "type": "in", "timestamp": "2026-07-08T08:00:00Z", "location": { "id": "loc-uuid", "name": "Sede Madrid" }, "source": "api", "validated": true, "created_at": "2026-07-08T08:00:01Z", "updated_at": "2026-07-08T08:00:01Z" }

Das Fenster für timestamp ist eng: 24 Stunden zurück und 5 Minuten nach vorn. Ein Leser, der ohne Netz länger als 24 Stunden Ereignisse puffert, bekommt beim Wiederverbinden den ganzen Stapel abgelehnt — Ereignis für Ereignis mit 422. Lege den Puffer so aus, dass er sofort bei Netz leert, und behandle dieses 422 als Fall für die manuelle Nachpflege (oder über das Dashboard), nicht als wiederholbar: Der Retry kommt ebenso wenig durch.

Verwende bei jeder Stempelung einen Idempotency-Key. Drehkreuze wiederholen Requests bei Netzausfällen; mit einem Idempotenzschlüssel vermeidest du, denselben Zutritt doppelt zu erfassen. Denselben Key erneut zu senden liefert die ursprüngliche Stempelung; ihn mit einem anderen Body wiederzuverwenden ergibt 409.

Deine Mitarbeitenden mappen

Dein Zutrittssystem identifiziert Personen über Karte oder PIN; Kinmu über die employee_id (UUID). Baue das Mapping einmal auf und aktualisiere es regelmäßig:

Lade die Mitarbeitenden und ihre Struktur herunter

curl -s "$KINMU_BASE_URL/employees?status=active&limit=100" \ -H "Authorization: Bearer $KINMU_API_KEY" curl -s "$KINMU_BASE_URL/locations" -H "Authorization: Bearer $KINMU_API_KEY"

Speichere das Mapping tarjeta → employee_id und zona → location_id

Nutze email oder ein Feld aus deinem Stammdatensystem, um Personen zuzuordnen; speichere die Kinmu-UUIDs. Die E-Mail-Adresse einer Person ist pro Unternehmen eindeutig, nicht global: Dieselbe Person kann in einem anderen Kinmu-Unternehmen existieren, ohne mit deinem zu kollidieren.

Legt deine Integration Mitarbeitende an (POST /v1/employees), rechne mit 402 billing_required: Das Abonnement lebt, aber der Tarif hat keinen freien Platz mehr. Das ist nicht wiederholbar — der Tarif muss im Dashboard erweitert werden.

Aktualisiere mit updated_since

Lies nur, was sich geändert hat: GET /v1/employees?updated_since=<última sync>.

Stempelungen abfragen

Zum Abgleich liest du die Ereignisse mit einem Pflichtbereich von ≤ 92 Tagen:

curl -s "$KINMU_BASE_URL/check-ins?employee_id=a1b2…&from=2026-07-01&to=2026-07-08" \ -H "Authorization: Bearer $KINMU_API_KEY"

Du willst in Echtzeit auf jede Stempelung reagieren (etwa für ein Anwesenheits-Panel)? Abonniere das Event checkin.created per Webhooks, statt zu pollen.

Häufige Fehler

SituationAntwort
org:fichajes:write fehlt403 invalid_scope
timestamp außerhalb des Fensters (> 24 h in der Vergangenheit oder > 5 Min. in der Zukunft) oder type ungültig422 validation_failed (mit errors)
Retry mit gleichem Idempotency-Key und anderem Body409 idempotency_conflict
Person eines anderen Unternehmens404 not_found
Person anlegen, ohne freien Platz im Tarif402 billing_required
Last updated on