Piattaforma
API e webhook
Tutto ciò che fa la dashboard passa dalla stessa API REST che potete chiamare. Gli eventi escono come webhook firmati, ritentati finché non arrivano.
Autenticazione
- Il cookie di sessione emesso dal flusso con codice monouso, oppure lo stesso token firmato come header bearer.
- Un token API personale come header bearer. Agisce come il suo titolare, così ogni controllo di ruolo e ambito si applica senza modifiche; ai token con ambito di lettura vengono rifiutate le modifiche.
- Ogni route dichiara il proprio ruolo minimo: qualsiasi utente autenticato, manager e superiori, admin o superadmin. Le route dati limitano poi all'albero del chiamante.
curl -H "Authorization: Bearer <token>" https://inroots.example.com/api/export/hours.csv?from=2026-08-01&to=2026-08-31
Scoprirla
Lo schema OpenAPI viene generato dalle route e servito, riservato agli admin, con un esploratore interattivo dentro il prodotto. Sintesi e descrizioni provengono dalle definizioni delle route, così non possono divergere dal codice.
GET /api/openapi.json GET /api/docs
| Efficienza, Obiettivi, Salute lavorativa, Timeline | punteggi, target, benchmark, obiettivi personali, segnali sulle persone, rischio di sovraccarico, evidenze di una giornata |
|---|---|
| Ferie, Reperibilità, Team, Festività | regole e richieste di ferie, rotazioni e copertura, impostazioni di team, calendari |
| DM, Contatti, Consenso | invii e pianificazioni, recapiti, accordi e firme |
| Provider di IA, Report, Avvisi | cambio di provider e ordine di failover, esportazioni PDF, trasporto email |
| Integrazioni, Esportazione | token, webhook, CSV |
| ML | predict, feedback, decisions, metrics, models, promote, train |
Webhook in uscita
- Creati con un URL di destinazione e un segreto che non viene mai più restituito; l'elenco mostra solo se un segreto esiste.
- Ogni consegna porta un header di firma con un HMAC SHA-256 sul corpo esatto, un header di evento e un ID di consegna per la deduplicazione.
- L'emissione viaggia nella transazione del chiamante, così un evento non viene mai consegnato per una decisione annullata, e un endpoint ricevente non raggiungibile non blocca mai un'approvazione.
- Un job di svuotamento invia ogni minuto e ritenta a 1, 5, 15, 60 e 360 minuti prima di abbandonare con il motivo registrato. Venti errori consecutivi aprono il circuito di quell'endpoint finché un admin non lo riabilita.
- Il pulsante Test mette in coda un ping firmato attraverso il percorso reale. Eventi attualmente emessi: pto.approved e pto.declined.
expected = hmac.new(secret, body, sha256).hexdigest() compare(header, "sha256=" + expected)
In ingresso
- Eventi e azioni interattive di Slack; attività di Teams; il webhook di WhatsApp.
- Ticket di supporto da sistemi esterni, deduplicati su un riferimento esterno, così i follow-up aggiornano un solo ticket.
- Qualsiasi webhook può attivare un workflow n8n che richiama l'API con un token.
Flusso live
Un flusso di server-sent event porta gli eventi di presenza e le notifiche personali alla dashboard e a qualsiasi client scriviate. Gli eventi personali raggiungono solo la persona a cui si riferiscono.
GET /api/events