Skip to Content
Gidsen per use caseToegangscontrole

Toegangscontrole

Doel: je toegangscontrolesysteem (poortjes, kaartlezers, kiosken) laat medewerkers realtime in- en uitklokken in Kinmu.

Vereiste scopes: org:fichajes:write (registreren) en org:fichajes:read (opvragen).

Een check-in registreren

POST /v1/check-ins registreert een klok-event namens een medewerker. Het wordt opgeslagen met source=api, geauditeerd en respecteert de werktijdvalidaties (geen bypass van regels).

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" }'

Velden in de body:

VeldVerplichtOpmerkingen
employee_idJaPublieke UUID van de medewerker.
typeJain, out, break_start of break_end.
timestampJaISO 8601 in UTC. Moet binnen het venster [nu − 24 u, nu + 5 min] vallen; daarbuiten → 422 validation_failed.
location_idNeeLocatie waar het klok-event plaatsvindt.
noteNeeVrije tekst (bijv. identifier van de lezer).

Response 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" }

Het venster voor timestamp is smal: 24 uur terug en 5 minuten vooruit. Een lezer die langer dan 24 uur zonder netwerk events opspaart, krijgt bij het herstellen van de verbinding de hele batch geweigerd, event voor event, met 422. Ontwerp de buffer zo dat hij leegloopt zodra er netwerk is, en behandel die 422 als iets om handmatig (of via het dashboard) recht te zetten, niet als iets om opnieuw te proberen: de retry komt er evenmin door.

Gebruik bij elke check-in een Idempotency-Key. Poortjes doen retries bij netwerkstoringen; met een idempotency-key voorkom je dat dezelfde toegang twee keer wordt geregistreerd. Dezelfde key opnieuw sturen geeft de oorspronkelijke check-in terug; hergebruik met een andere body geeft 409.

Je medewerkers mappen

Je toegangssysteem identificeert mensen met een pas of pincode; Kinmu met een employee_id (UUID). Bouw de mapping één keer op en ververs die periodiek:

Download de medewerkers en hun structuur

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"

Bewaar de mapping kaart → employee_id en zone → location_id

Gebruik email of een veld uit je stamgegevens om personen te matchen; sla de Kinmu-UUID’s op. Het e-mailadres van een medewerker is uniek per bedrijf, niet wereldwijd: dezelfde persoon kan in een ander Kinmu-bedrijf bestaan zonder met dat van jou te botsen.

Maakt je integratie medewerkers aan (POST /v1/employees), houd dan rekening met 402 billing_required: het abonnement leeft, maar het pakket heeft geen vrije seats. Dat is niet opnieuw te proberen; het pakket moet in het dashboard worden uitgebreid.

Ververs met updated_since

Lees alleen wat er is gewijzigd: GET /v1/employees?updated_since=<laatste sync>.

Check-ins opvragen

Lees voor reconciliatie de events uit met een verplicht bereik van ≤ 92 dagen:

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

Wil je realtime reageren op elk klok-event (bijvoorbeeld voor een aanwezigheidsbord)? Abonneer je op het event checkin.created met webhooks in plaats van te pollen.

Veelvoorkomende fouten

SituatieResponse
org:fichajes:write ontbreekt403 invalid_scope
timestamp buiten het venster (> 24 u in het verleden of > 5 min in de toekomst) of ongeldig type422 validation_failed (met errors)
Retry met dezelfde Idempotency-Key en andere body409 idempotency_conflict
Medewerker van een ander bedrijf404 not_found
Medewerker aanmaken zonder vrije seat in het pakket402 billing_required
Last updated on