Skip to content

开放 API 总览

Notion Files Management 的后端是 FastAPI 服务。浏览器界面和第三方自动化程序调用的是同一套 API。

默认 API 地址:

text
http://127.0.0.1:18765

Docker、systemd、Windows exe、本地开发默认都使用统一后端端口 18765。如果你在前面加了反向代理,把示例里的 host 换成自己的域名即可。

鉴权模型

NFM 有两条鉴权通道:

通道使用者凭据权限模型
Session Cookie浏览器管理界面/api/auth/login 登录密码管理员,全权限
API Key第三方程序Authorization: Bearer nfm_...按 scope 限权

第三方集成应使用 API Key。长期 API Key 不允许放在 URL 里,NFM 也不会接受 ?api_key=

长任务流程

扫描、下载、上传、迁移等操作都是长任务。多数接口会先返回 task_id,再通过任务接口读取状态或订阅 SSE 进度。

text
POST /api/scan
  -> {"task_id":"..."}

GET /api/tasks/{task_id}
  -> 任务元数据和最新进度

GET /api/tasks/{task_id}/events
  -> text/event-stream 进度流

SSE 有一个特殊点:浏览器原生 EventSource 不能自定义 Authorization 请求头。第三方客户端应先用 Bearer key 换取短期 events_token,再用 ?events_token= 连接事件流。

Scope 总览

API Key 使用粗粒度 scope 控制权限。创建或更新 key 时传入未知 scope 会直接返回 400

Scope路由用途
scan/api/scan/*扫描 Notion 页面并列出可下载文件
download/api/download/*创建下载任务,获取单文件或 ZIP
upload/api/upload/*暂存本地文件并上传到 Notion
tools/api/tools/*页面大小更新、数据源迁移、去后缀、属性查询
tasks/api/tasks/*查看任务、取消、重试、换取 SSE token
settings/api/settings读取或修改实例设置
logs/api/logs*读取或下载后端日志
cache/api/cache/*查看、下载、删除或清理缓存
system/api/system/restart重启后端进程
apikeys/api/apikeys/*管理 API Key

前五个是常规业务 scope。settingslogscachesystemapikeys 属于高危 scope,只应授予可信自动化程序。

端点速览

公开与浏览器会话

方法路径鉴权说明
POST/api/auth/login浏览器用共享密码登录
POST/api/auth/logoutsession清除浏览器 session
GET/api/auth/check返回 {"auth": true/false}
GET/api/version当前版本与远程更新信息
GET/api/version/channel当前渠道
GET/api/noticessession 或 Bearer读取公告列表
GET/api/notices/{nid}session 或 Bearer读取单条公告

API Key 管理

需要浏览器管理员 session,或带 apikeys scope 的 API Key。

方法路径请求体响应
GET/api/apikeyskey 列表,不含明文和 hash,并返回可用 scope
POST/api/apikeysnamescopes、可选 expires_atrate_limit_rpmenabledkey 元数据和一次性 plaintext
PATCH/api/apikeys/{key_id}部分字段更新后的 key 元数据
DELETE/api/apikeys/{key_id}{"ok": true}

API Key 明文只在创建时返回一次。后端只保存 SHA-256 hash。

扫描

需要 scan scope。

方法路径请求体响应
POST/api/scan{"page_id":"...","probe_workers":8}{"task_id":"..."}
GET/api/scan/{task_id}/list{"items":[...],"count":0}

probe_workers 取值范围是 116

下载

需要 download scope。

方法路径请求体响应
POST/api/download/start{"items":[...],"page_id":"optional"}{"task_id":"..."}
GET/api/download/{task_id}/file/{idx}文件响应
GET/api/download/{task_id}/zipZIP 文件响应

每个下载 item 需要安全的远程 url。推荐字段:urlreal_namesize_mbblock_id。单个下载任务最多 1000 个 item。

上传

需要 upload scope。

方法路径请求体响应
POST/api/upload/filesmultipart/form-data,包含 files 和可选 rels上传暂存 session_id
POST/api/upload/start{"page_id":"...","session_id":"...","folder_mode":false}{"task_id":"..."}

上传文件夹时,暂存阶段用 rels 传相对路径,启动阶段设置 folder_mode: true

任务与 SSE

大多数任务接口需要 tasks scope。GET /api/tasks/{task_id}/events 例外,它接受三种凭据之一:session、Bearer + tasks scope、短期 events_token

方法路径请求体响应
GET/api/tasks任务列表
GET/api/tasks/{task_id}任务详情
POST/api/tasks/{task_id}/events-token{"token":"nfmsse_...","expires_in":600}
GET/api/tasks/{task_id}/eventsSSE stream
POST/api/tasks/{task_id}/cancel{"ok": true}
POST/api/tasks/{task_id}/retry{"task_id":"..."}

SSE 事件:

EventData
progress最新进度对象
done终态,例如 {"status":"done"}{"status":"error","error":"..."}

NFM 不使用自定义 error SSE 事件名,因为浏览器 EventSource 已经把 error 保留给连接错误。

工具

需要 tools scope。

方法路径用途
POST/api/tools/properties读取数据源属性
POST/api/tools/page-size/scan查找需要更新大小的页面
POST/api/tools/page-size/start启动页面大小更新任务
POST/api/tools/migrate/props读取源/目标数据源属性
POST/api/tools/migrate/start启动数据源迁移任务
POST/api/tools/suffix/start启动批量去后缀任务

设置、日志、缓存、系统

这些都是高危 scope。

Scope方法路径用途
settingsGET/api/settings读取公开设置
settingsPUT/api/settings更新设置
logsGET/api/logs列出日志
logsGET/api/logs/{name}读取日志尾部
logsGET/api/logs/{name}/download下载单个日志
logsPOST/api/logs/download打包下载选中的日志
cacheGET/api/cache/items列出缓存项
cacheGET/api/cache/items/{cache_id}/download下载缓存项
cacheDELETE/api/cache/items/{cache_id}删除缓存项
cachePOST/api/cache/cleanup按策略清理过期缓存
cachePOST/api/cache/clear清空非运行中缓存
systemPOST/api/system/restart重启进程

状态码

状态码含义
200成功
400请求体错误、scope 非法、不支持重试、上传 session 非法
401未认证、API Key 无效/禁用/过期、SSE token 无效/过期
403API Key 有效但缺少所需 scope
404task、key、文件、日志或缓存项不存在
409缓存项仍被运行中的任务使用
422FastAPI / Pydantic 参数校验失败
429API Key 触发限流

Released under the MIT License.