Plataforma

API y webhooks

Todo lo que hace el panel pasa por la misma API REST que cualquiera puede llamar. Los eventos salen como webhooks firmados que se reintentan hasta que llegan.

Autenticación

  • La cookie de sesión emitida por el flujo de código de un solo uso, o el mismo token firmado como cabecera bearer.
  • Un token de API personal como cabecera bearer. Actúa como su titular, de modo que todas las comprobaciones de rol y alcance se aplican sin cambios; a los tokens de ámbito de lectura se les rechazan las mutaciones.
  • Cada ruta declara su rol mínimo: cualquier usuario autenticado, gerente o superior, administrador o superadministrador. Las rutas de datos acotan después por el árbol de quien llama.
curl -H "Authorization: Bearer <token>" https://inroots.example.com/api/export/hours.csv?from=2026-08-01&to=2026-08-31

Descubrirla

El esquema OpenAPI se genera a partir de las rutas y se sirve, restringido a administradores, con un explorador interactivo dentro del producto. Los resúmenes y descripciones proceden de las definiciones de las rutas, así que no pueden desviarse del código.

GET /api/openapi.json
GET /api/docs
Eficiencia, Objetivos, Salud laboral, Línea de tiempopuntuaciones, metas, referencias, objetivos, señales sobre personas, riesgo de sobrecarga, evidencia de un día
Permisos, Guardias, Equipos, Festivosreglas y solicitudes de permiso, rotaciones y cobertura, ajustes de equipo, calendarios
Mensajes directos, Contacto, Consentimientoenvíos y programaciones, datos de contacto, acuerdos y firmas
Proveedores de IA, Informes, Alertascambio de proveedor y orden de conmutación, exportaciones PDF, transporte de correo
Integraciones, Exportacióntokens, webhooks, CSV
MLpredict, feedback, decisions, metrics, models, promote, train

Webhooks salientes

  • Se crean con una URL de destino y un secreto que nunca vuelve a devolverse; la lista muestra solo si existe un secreto.
  • Cada entrega lleva una cabecera de firma con un HMAC SHA-256 sobre el cuerpo exacto, una cabecera de evento y un ID de entrega para deduplicar.
  • La emisión viaja en la transacción de quien llama, de modo que un evento nunca se entrega por una decisión que se revirtió, y un endpoint receptor caído nunca bloquea una aprobación.
  • Una tarea de vaciado publica cada minuto y reintenta a 1, 5, 15, 60 y 360 minutos antes de abandonar con el motivo registrado. Veinte fallos consecutivos abren el circuito del endpoint hasta que un administrador lo vuelve a habilitar.
  • El botón de prueba encola un ping firmado por la ruta real. Eventos emitidos actualmente: pto.approved y pto.declined.
expected = hmac.new(secret, body, sha256).hexdigest()
compare(header, "sha256=" + expected)

Entrantes

  • Eventos y acciones interactivas de Slack; actividades de Teams; el webhook de WhatsApp.
  • Tickets de soporte desde sistemas externos, deduplicados por una referencia externa para que los seguimientos actualicen un único ticket.
  • Cualquier webhook puede disparar un flujo de trabajo de n8n que llame de vuelta a la API con un token.

Flujo en vivo

Un flujo de eventos enviados por el servidor lleva los eventos de asistencia y las notificaciones personales al panel y a cualquier cliente que se escriba. Los eventos personales llegan solo a la persona a la que conciernen.

GET /api/events