Skip to content

API 与 RPC2

Komari Lite 同时保留兼容 HTTP API,并提供 JSON-RPC 2.0 入口。新主题和新集成优先使用 RPC2;旧 HTTP 路由主要用于兼容现有主题、脚本和 Agent。

版本口径

本页只记录 nuomiiiii/komari 当前实际提供的接口。标为兼容的旧 HTTP 接口与上游对应接口保持相同调用方式;Lite 新增字段、RPC2 方法或明确差异会直接注明。未收录的上游接口不代表 Lite 支持,不要根据数据库表、后台页面请求或上游插件接口推断兼容范围。

基础约定

  • URL 示例中的 https://monitor.example.com 替换为实际面板地址。
  • 容量和流量单位均为字节;网络速率为字节/秒。
  • 时间使用带时区的 RFC3339,服务端通常返回 UTC。
  • 未登录访问会过滤 hidden=true 的节点。
  • 私有站点启用后,除登录页所需接口外,匿名请求会被拒绝。
  • 主题应只调用公共接口,不应读取 SQLite、指标数据库或服务端数据目录。

认证

调用者认证方式适用范围
匿名访客公开 HTTP API、public:*common:*
管理员会话session_token Cookie/api/admin/*admin:*
API KeyAuthorization: Bearer <api-key>管理接口和 admin:*
AgentAuthorization: Bearer <client-token>/api/clients/*client:*、Agent RFC

Agent Token 也兼容 ?token=?Authorization= 和部分 JSON body 中的 token,但 URL 中的 Token 可能进入代理日志、浏览器历史和监控记录。新接入应使用 Authorization 请求头。

身份识别优先级为 API Key、管理员会话、Agent Token、匿名访客。API Key 与 Agent Token 都使用 Bearer 形式,服务端会先判断它是否为面板 API Key。

敏感操作与 2FA

远程执行、Token 轮换、终端等敏感操作可能要求二次验证。支持:

  • X-2FA-Code: 123456
  • X-Two-Factor-Code: 123456
  • RPC params 中的 2fa_codetwo_factor_codeotp

API Key 调用不再重复要求 2FA。不要把管理员 Cookie、API Key 或 2FA 验证码放进公开主题配置。

HTTP 响应

大部分兼容 HTTP API 使用统一外层:

json
{
  "status": "success",
  "message": "",
  "data": {}
}

失败通常为:

json
{
  "status": "error",
  "message": "错误说明"
}

少数兼容接口直接返回数据,例如 /api/me、部分 Agent 路由和后台原始接口。调用方应同时检查 HTTP 状态码和响应体,不要只判断 status

公开 HTTP API

当前用户

GET /api/me

未登录:

json
{
  "username": "Guest",
  "logged_in": false
}

已登录时还会返回:

字段类型说明
usernamestring管理员名称
logged_inboolean是否已登录
uuidstring用户 UUID
sso_typestringSSO 类型
sso_idstringSSO 用户标识
2fa_enabledboolean是否启用 2FA

公开站点设置

GET /api/public

常用 data 字段:

字段类型说明
sitenamestring站点名称
descriptionstring站点描述
custom_headstring管理员自定义 head 片段
custom_bodystring管理员自定义 body 末尾片段
oauth_enableboolean是否启用 OAuth
oauth_providerstringOAuth 提供商
disable_password_loginboolean是否禁用密码登录
cors_origin_check_enabledboolean是否启用来源校验
private_siteboolean是否为私有站点
visitor_audit_enabledboolean是否启用访客审计
record_enabledboolean是否存在启用保留期的指标
record_preserve_timenumber当前最大指标保留时长,小时
ping_record_preserve_timenumber兼容字段,小时
themestring当前主题 short
theme_settingsobject当前主题公开配置及默认值

theme_settings 对所有访客公开。主题作者不得把 Token、密钥、私密 URL 或内部账号放进动态主题配置。

持有有效临时分享 Cookie 时,private_site 会临时返回 false,便于主题按可访问状态渲染。

服务端版本

GET /api/version

json
{
  "status": "success",
  "message": "",
  "data": {
    "version": "2.2.1",
    "hash": "build-commit-hash",
    "deployment": "docker"
  }
}

deployment 是 Lite 扩展字段,表示当前部署类型;调用方应允许未知值。

节点基本信息

GET /api/nodes

返回可见节点数组。匿名访问会过滤隐藏节点,并固定清空 token、Agent version、私有 remarkipv4ipv6

稳定展示字段:

字段类型说明
uuidstring节点 UUID
namestring节点名称
cpu_namestringCPU 型号
cpu_coresnumber逻辑核心数
cpu_physical_coresnumber物理核心数,0 表示未知
archstring架构
osstring操作系统
kernel_versionstring内核版本
virtualizationstring虚拟化类型
gpu_namestringGPU 摘要
mem_totalnumber总内存
swap_totalnumber总 Swap
disk_totalnumber总磁盘
regionstring地区展示值
region_overridestring手动地区代码,未设置时为空
public_remarkstring公开备注
groupstring分组
tagsstring以分号分隔的标签
weightnumber排序权重
hiddenboolean是否对访客隐藏
pricenumber价格;-1 常表示免费
currencystring货币符号
billing_cyclenumber计费周期,天
auto_renewalboolean是否自动续费
expired_atstring | null到期时间
traffic_limitnumber配置流量额度
traffic_limit_typestringmaxminsumupdown
effective_traffic_limitnumber当前周期生效额度
effective_traffic_typestring当前周期生效统计方式
traffic_reset_daynumber服务端流量重置日,缺失表示跟随 Agent
remote_control_protectedbooleanAgent 是否因安全策略阻止远程控制
created_atstring创建时间
updated_atstring更新时间

主题应优先使用 effective_traffic_limiteffective_traffic_type 展示当前周期额度,不要自行重复叠加校准值。

最近一分钟状态

GET /api/recent/{uuid}

返回最近一分钟内的实时上报数组。结构与 Agent report 相同:

json
{
  "cpu": { "usage": 12.5 },
  "ram": { "total": 1073741824, "used": 536870912 },
  "swap": { "total": 0, "used": 0 },
  "load": { "load1": 0.1, "load5": 0.08, "load15": 0.05 },
  "disk": { "total": 21474836480, "used": 8589934592 },
  "network": {
    "up": 1024,
    "down": 2048,
    "totalUp": 1073741824,
    "totalDown": 2147483648
  },
  "connections": { "tcp": 20, "udp": 3 },
  "uptime": 86400,
  "process": 96,
  "message": "",
  "updated_at": "2026-08-04T08:00:00Z"
}

gpu 为可选对象,详细结构见 Agent RFC。流量累计值已经过当前周期校准,主题不要再次修正。

旧版负载历史

GET /api/records/load?uuid={uuid}&hours=4&load_type=all

uuid 必填。load_type 支持:cpugpuramswaploadtempdisknetworkprocessconnectionsall

返回扁平化兼容记录,例如 cpuramram_totalnet_innet_outnet_total_upnet_total_down。这与实时接口的嵌套结构不同。

新开发建议

48 小时、多节点或多指标查询优先使用 public:queryMetrics。它默认服务端降采样到约 500 点,避免旧接口重复解码并返回大量兼容记录。

旧版 Ping 历史

GET /api/records/ping?uuid={uuid}&task_id={id}&hours=4

uuidtask_id 至少提供一个。返回:

  • records[]task_idtimevalueclientvalue=-1 表示丢包。
  • basic_info[]:按节点聚合的 lossminmax
  • tasks[]:相关任务及 avgtotal 等统计。

该接口不会主动限制返回点数。较长时间范围应使用 public:getPingMetricStatspublic:queryMetrics

公开 Ping 任务

GET /api/task/ping

字段包括 idnameclientsdefault_ontypeintervalweight

实时状态 WebSocket

GET /api/clients 升级为 WebSocket。连接后发送:

  • get:获取全部可见节点。
  • get <uuid>:只获取一个节点。
js
const socket = new WebSocket("wss://monitor.example.com/api/clients");
socket.addEventListener("open", () => socket.send("get"));
socket.addEventListener("message", (event) => {
  const payload = JSON.parse(event.data);
  console.log(payload.data.online, payload.data.data);
});

data.online 为在线 UUID 数组,data.data 为以 UUID 为键的最新 report。断线后应指数退避重连,并在重连后重新发送订阅命令。

JSON-RPC 2.0

入口:

  • POST /api/rpc2:单条或批量请求。
  • GET /api/rpc2:升级为 WebSocket 后逐条收发。

推荐始终提供非空 id

json
{
  "jsonrpc": "2.0",
  "method": "public:getVersion",
  "params": {},
  "id": "version-1"
}

成功:

json
{
  "jsonrpc": "2.0",
  "id": "version-1",
  "result": {
    "version": "2.2.1",
    "hash": "build-commit-hash",
    "deployment": "docker"
  }
}

失败:

json
{
  "jsonrpc": "2.0",
  "id": "version-1",
  "error": {
    "code": -32602,
    "message": "Invalid params"
  }
}

错误码

错误码说明
-32700JSON 解析错误
-32600请求结构或版本错误
-32601方法不存在
-32602参数错误
-32603内部错误
-32040未认证
-32041权限不足
-32044资源不存在
-32050未实现
-32051暂不可用

命名空间

命名空间权限用途
public:*访客站点、历史、指标和访客事件
common:*访客主题常用节点与记录接口
client:*AgentPing 任务、Ping 结果、命令结果
admin:*管理员/API Key后台管理与敏感操作

稳定公共方法:

  • public:getMe
  • public:getNodesInformation
  • public:getPublicSettings
  • public:getVersion
  • public:getClientRecentRecords
  • public:getRecordsByUUID
  • public:getPingRecords
  • public:getPublicPingTasks
  • public:listMetricDefinitions
  • public:queryMetrics
  • public:getPingMetricStats
  • common:getNodes
  • common:getNodesLatestStatus
  • common:getRecords

admin:* 方法会随后台能力演进。外部自动化应只调用经过验证的具体方法,并固定兼容版本,不要把后台路由列表当作永久稳定 SDK。

指标查询

指标定义

调用 public:listMetricDefinitions 获取当前实例实际可用的指标、类型、单位和保留期。不要把内置列表当作唯一来源。

常见内置键:

text
cpu.usage
gpu.usage
gpu.device.usage
gpu.memory.used
gpu.memory.total
gpu.temperature
memory.used
swap.used
load.average
disk.used
net.in.rate
net.out.rate
net.total.up
net.total.down
traffic.up
traffic.down
process.count
connections.tcp
connections.udp
ping.latency_ms
ping.loss

查询时间序列

public:queryMetrics 请求示例:

json
{
  "jsonrpc": "2.0",
  "method": "public:queryMetrics",
  "params": {
    "metric_keys": ["cpu.usage", "memory.used"],
    "entity_ids": ["node-uuid-1", "node-uuid-2"],
    "hours": 48,
    "server_downsample": true,
    "max_points": 500,
    "aggregation": "avg",
    "fill_empty": true
  },
  "id": "metrics-1"
}

主要参数:

参数类型默认说明
metric_keysstring[]必填指标键;也兼容 metric_keymetrics
entity_idsstring[]全部可见节点节点 UUID;也兼容 entity_id
start / start_timeRFC3339end - hours起始时间
end / end_timeRFC3339当前时间结束时间
hoursnumber4未指定 start 时的时间范围
tagsobject精确匹配标签,例如 Ping 的 task_id
server_downsamplebooleantrue是否在服务端降采样
max_pointsnumber500每个指标/节点目标点数
aggregationstringavgavgminmaxsumcountfirstlastratestddev 或百分位
fill_emptybooleanfalse在边界和真实缺口插入 value: null

还支持按指标覆盖:max_points_by_metricserver_downsample_by_metricaggregation_by_metric。响应 series[] 按指标、节点和标签拆分,包含 metric_keyentity_idunitdownsampledinterval_secondspoints[]

不要在一次请求中省略 entity_ids 后同时查询大量指标和长时间范围;即使启用降采样,服务端仍需读取所有匹配序列。页面应按可见范围请求并缓存相同查询结果。

CORS 与来源

浏览器主题通常与面板同源,不需要 CORS。跨域集成在启用来源检查时必须来自允许来源;管理员 API Key 请求可绕过这项来源限制,但不能绕过方法权限。

生产环境应使用 HTTPS/WSS。只有测试环境才应忽略证书错误。

兼容建议

  1. 使用 public:listMetricDefinitions 做能力探测。
  2. 对未知字段保持宽容,对缺失可选字段提供空状态。
  3. 不依赖数组顺序,节点排序使用服务端返回权重或 UI 规则。
  4. 长时间序列使用 public:queryMetrics 并保持降采样。
  5. 将 HTTP/RPC 适配集中在一层,不要让每个组件各自维护回退逻辑。
  6. Agent 协议与主题接口分开处理,Agent 细节见 Agent RFC

基于 MIT 许可证发布