Payroll e consulenza del lavoro
Obiettivo: alimentare il tuo software payroll con ore effettive, assenze e saldi ferie di un periodo, senza export manuali.
Scopes necessari: org:fichajes:read, org:ausencias:read, org:saldos:read.
Le tre risorse chiave:
GET /v1/work-summaries— la risorsa per il payroll: aggregati chiusi di giornata per dipendente e periodo.GET /v1/absences— malattie, ferie e trattenute del periodo.GET /v1/vacation-balances— saldi ferie per la chiusura.
Work summaries: le ore del periodo
work-summaries restituisce una riga per dipendente × periodo con gli aggregati già calcolati (non eventi di timbratura). Filtra per period=day|month e un intervallo from/to (≤ 1 anno).
curl -s "$KINMU_BASE_URL/work-summaries?period=month&from=2026-06-01&to=2026-06-30" \
-H "Authorization: Bearer $KINMU_API_KEY"{
"data": [
{
"employee_id": "a1b2…",
"period_start": "2026-06-01",
"period_end": "2026-06-30",
"worked_minutes": 9600,
"break_minutes": 1200,
"night_minutes": 300,
"overtime_minutes": 240,
"expected_minutes": 9600,
"balance_minutes": 0,
"banked_hours_balance_minutes": 120,
"absences_minutes": 480,
"source_days": 21
}
],
"meta": { "next_cursor": null, "has_more": false }
}Campi rilevanti per il payroll:
| Campo | Uso |
|---|---|
worked_minutes | Tempo effettivo lavorato. |
night_minutes | Minuti in orario notturno (maggiorazioni). |
overtime_minutes | Straordinari del periodo. |
expected_minutes | Orario teorico da contratto. |
balance_minutes | Differenza lavorato − previsto. |
banked_hours_balance_minutes | Saldo della banca ore. |
absences_minutes | Minuti di assenza nel periodo. |
Gli aggregati mensili possono essere serviti da snapshot consolidati. Se la tua chiusura dipende dai dati del giorno in corso, considera una possibile latenza di consolidamento e chiudi su periodi già completi.
Assenze del periodo
Incrocia le assenze approvate che si sovrappongono al periodo payroll per applicare malattie e trattenute:
curl -s "$KINMU_BASE_URL/absences?status=approved&from=2026-06-01&to=2026-06-30" \
-H "Authorization: Bearer $KINMU_API_KEY"Ogni assenza porta type come { key, label } (la key è stabile: vacation, sick_leave, o tipi custom della tua azienda) e days_count. Nella tua logica usa sempre la key.
Saldi ferie
Per la chiusura annuale o per gli accantonamenti, consulta i saldi per dipendente e anno:
curl -s "$KINMU_BASE_URL/vacation-balances?year=2026" \
-H "Authorization: Bearer $KINMU_API_KEY"{
"data": [
{
"employee_id": "a1b2…",
"year": 2026,
"entitled_days": 23,
"used_days": 10,
"pending_days": 2,
"remaining_days": 11,
"carry_over_days": 0,
"carry_over_expires_at": null
}
]
}Flusso di chiusura mensile
Elenca i dipendenti attivi del periodo
GET /v1/employees?status=active (pagina con cursor se ne hai più di 100).
Scarica i work-summaries del mese
GET /v1/work-summaries?period=month&from=…&to=….
Incrocia le assenze approvate
GET /v1/absences?status=approved&from=…&to=….
(Opzionale) Genera il registro orario legale
Per l’ispezione del lavoro, richiedi il report time_registry_monthly (RD-ley 8/2019, normativa spagnola):
curl -s -X POST "$KINMU_BASE_URL/reports" \
-H "Authorization: Bearer $KINMU_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "type": "time_registry_monthly", "format": "csv", "params": { "month": "2026-06" } }'Formati: csv o xlsx (xlsx solo per check_ins_export). Riceverai 202 { "id": "…", "status": "processing" }. Fai polling su GET /v1/reports/{id} fino a status=completed; a quel punto la risposta include download_url, una URL firmata temporanea (TTL 5 min, monouso). La firma è la credenziale: scarica il file da quella URL senza header Authorization:
# 1) obtener la download_url (solo aparece cuando status=completed)
DL=$(curl -s "$KINMU_BASE_URL/reports/<id>" \
-H "Authorization: Bearer $KINMU_API_KEY" | jq -r '.download_url')
# 2) descargar el fichero desde la URL firmada (sin Bearer; un solo uso, 5 min)
curl -s -L "$DL" -o registro-horario-2026-06.csvLo scope org:informes:read è obbligatorio per richiedere il report. La download_url è monouso e scade in 5 minuti: richiedila e scarica il file subito.