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, Timelinepunteggi, 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, Consensoinvii e pianificazioni, recapiti, accordi e firme
Provider di IA, Report, Avvisicambio di provider e ordine di failover, esportazioni PDF, trasporto email
Integrazioni, Esportazionetoken, webhook, CSV
MLpredict, 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