平台

API 与 webhook

仪表板所做的一切都经过您同样可以调用的 REST API。事件以签名 webhook 的形式发出,并重试直到送达。

认证

  • 一次性验证码流程签发的会话 Cookie,或作为 bearer 头的同一签名令牌。
  • 作为 bearer 头的个人 API 令牌。它以其持有者的身份行事,因此每项角色和范围检查都原样适用;只读范围的令牌会被拒绝修改操作。
  • 每个路由声明其最低角色:任何已认证用户、管理者及以上、管理员或超级管理员。数据路由再按调用者的管理树限定范围。
curl -H "Authorization: Bearer <token>" https://inroots.example.com/api/export/hours.csv?from=2026-08-01&to=2026-08-31

发现 API

OpenAPI 模式由路由生成并提供,仅限管理员,产品内附交互式浏览器。摘要和描述来自路由定义,因此不会与代码脱节。

GET /api/openapi.json
GET /api/docs
效率、目标、工作健康、时间线评分、目标值、基准、个人目标、人员信号、过劳风险、单日证据
休假、值班、团队、节假日请假规则和申请、轮值和覆盖、团队设置、日历
私信、联系方式、同意发送和计划、联系方式、协议和签名
AI 提供商、报告、警报提供商切换和故障转移顺序、PDF 导出、邮件传输
集成、导出令牌、webhook、CSV
MLpredict, feedback, decisions, metrics, models, promote, train

出站 webhook

  • 创建时指定目标 URL 和一个之后绝不再返回的密钥;列表只显示密钥是否存在。
  • 每次投递都携带一个签名头(对精确请求体的 SHA-256 HMAC)、一个事件头和一个用于去重的投递 ID。
  • 事件的发出依附于调用者的事务,因此绝不会为已回滚的决策投递事件,而接收端点宕机也绝不会阻塞审批。
  • 一个刷出任务每分钟投递一次,并在 1、5、15、60 和 360 分钟后重试,之后放弃并记录原因。连续二十次失败会打开该端点的断路器,直到管理员重新启用。
  • “测试”按钮通过真实路径排队一条签名的探测消息。当前发出的事件:pto.approved 和 pto.declined。
expected = hmac.new(secret, body, sha256).hexdigest()
compare(header, "sha256=" + expected)

入站

  • Slack 事件和交互操作;Teams 活动;WhatsApp webhook。
  • 来自外部系统的客服工单,按外部引用去重,因此后续更新会落在同一张工单上。
  • 任何 webhook 都可以触发一个 n8n 工作流,该工作流再用令牌回调 API。

实时流

一个服务器推送事件流将考勤事件和个人通知传送到仪表板以及您自己编写的任何客户端。个人事件只到达它所涉及的人。

GET /api/events