/api/auth/send-code发送登录验证码
向邮箱发送 6 位验证码,用于无密码登录。
Request
{"email":"user@example.com"}Response
{"success":true,"message":"Verification code sent"}API Documentation
按调用者角色组织:先看通用认证,再接入独立用户的文件 API,最后处理企业团队管理员能力。超级管理员和 provider internal 接口不会出现在这里。
Common
这些接口是所有角色共用的基础能力。优先用同源 Cookie 会话;需要脚本接入时,登录后拿到的 JWT 可放在 Authorization header 中。
/api/auth/send-code向邮箱发送 6 位验证码,用于无密码登录。
Request
{"email":"user@example.com"}Response
{"success":true,"message":"Verification code sent"}/api/auth/verify-login验证邮箱验证码,创建会话并返回 JWT token。
Request
{"email":"user@example.com","code":"123456"}Response
{"success":true,"user":{"id":"...","email":"user@example.com"},"token":"..."}/api/auth/me恢复当前登录态、用户角色、租户和成员关系。
Response
{"authenticated":true,"user":{"id":"..."},"memberships":[...]}/api/auth/sync-cookie从 Authorization token 重新签发服务端 Cookie,适合浏览器恢复登录态。
Response
{"success":true}/api/auth/current-tenant在用户拥有多个租户时,选择后续请求默认使用的租户。
Request
{"tenantId":"<TENANT_ID>"}Response
{"success":true,"tenantId":"<TENANT_ID>"}/api/auth/logout清除当前会话 Cookie。
Response
{"success":true}/api/pay/create为当前登录用户创建 hosted checkout URL。
Request
{"productId":"<PRODUCT_ID>","successUrl":"https://example.com/success","cancelUrl":"https://example.com/cancel"}Response
{"success":true,"checkoutUrl":"https://...","checkoutRequestId":"..."}/api/ai/chat向内置助手发送最多 12 条消息,返回模型回复与用量。
Request
{"messages":[{"role":"user","content":"How do I upload a file?"}]}Response
{"success":true,"reply":"...","model":"...","usage":{...}}Independent users
独立用户可以使用租户级 API key 管理自己的文件空间。所有 key 都以当前租户为边界,无法访问管理员专用路由。
/api/keys查看当前账号创建过的 API key 摘要。
Response
{"success":true,"data":{"keys":[...]}}当前实现不允许用 API key 管理 API key,请先通过登录会话调用。
/api/keys创建一个租户级 API key;明文 key 只在创建响应中出现一次。
Request
{"name":"cli-uploader","expiresAt":"2026-12-31T00:00:00.000Z"}Response
{"success":true,"data":{"keyId":"...","key":"d1vsk_..."}}/api/keys/:keyId/revoke撤销当前用户拥有的 key。
Response
{"success":true,"data":{"revoked":true}}/api/folders读取当前租户下可见的文件夹树。
Response
{"success":true,"data":{"folders":[...]}}/api/folders在根目录或父文件夹下创建新文件夹。
Request
{"name":"images","parentId":null}Response
{"success":true,"data":{"folder":{...}}}/api/folders/:folderId更新文件夹名称或 parentId。
Request
{"name":"images-2026","parentId":null}Response
{"success":true,"data":{"folder":{...}}}/api/folders/:folderId删除空文件夹;有内容时会返回错误。
Response
{"success":true,"data":{"deleted":true}}/api/files分页查询文件,支持按文件夹、可见性、上传者、MIME、分类和时间排序过滤。
Response
{"success":true,"data":{"files":[...],"pagination":{"page":1,"limit":20}}}folderId 是精确匹配,不会递归返回子文件夹内容。
/api/files/upload/init为普通文件创建上传 session,并返回可直接 PUT 的 uploadUrl。
Request
{"filename":"photo.jpg","size":1048576,"mimeType":"image/jpeg","visibility":"private","folderId":"<FOLDER_ID>"}Response
{"success":true,"data":{"fileId":"...","sessionId":"...","uploadUrl":"..."}}/api/files/upload/multipart/init为大文件创建 multipart session。
Request
{"filename":"archive.zip","size":52428800,"mimeType":"application/zip","visibility":"private","folderId":null}Response
{"success":true,"data":{"fileId":"...","sessionId":"...","uploadId":"..."}}/api/files/upload/multipart/part-url为指定 partNumber 生成预签名上传地址。
Request
{"sessionId":"<SESSION_ID>","partNumber":1}Response
{"success":true,"data":{"uploadUrl":"...","partNumber":1}}/api/files/upload/complete提交上传 session。分片上传需要提交 partNumber 与 etag。
Request
{"sessionId":"<SESSION_ID>","parts":[{"partNumber":1,"etag":"<ETAG>"}]}Response
{"success":true,"data":{"file":{...}}}/api/files/upload/abort终止未完成的上传 session。
Request
{"sessionId":"<SESSION_ID>"}Response
{"success":true,"data":{"aborted":true}}/api/files/:fileId获取文件元数据、可见性、大小和归属信息。
Response
{"success":true,"data":{"file":{...}}}/api/files/:fileId在 private 和 public 之间切换。
Request
{"visibility":"public"}Response
{"success":true,"data":{"file":{...}}}/api/files/:fileId/download返回短时可用的下载地址。
Response
{"success":true,"data":{"downloadUrl":"..."}}/api/files/:fileId/preview以内联响应返回可预览文件内容。
Response
binary response/api/files/:fileId/move把文件移动到目标文件夹,null 表示根目录。
Request
{"targetFolderId":"<TARGET_FOLDER_ID>"}Response
{"success":true,"data":{"file":{...}}}/api/files/:fileId软删除文件,之后可恢复或永久删除。
Response
{"success":true,"data":{"deleted":true}}/api/trash分页查看已删除文件。
Response
{"success":true,"data":{"files":[...],"pagination":{...}}}/api/files/:fileId/restore把文件从回收站恢复到可见列表。
Response
{"success":true,"data":{"file":{...}}}/api/files/:fileId/purge从数据库和对象存储中永久删除文件。
Response
{"success":true,"data":{"deleted":true}}/api/trash不带 body 时清空全部;传 fileIds 时只清理指定文件。
Request
{"fileIds":["<FILE_ID>"]}Response
{"success":true,"data":{"purgedCount":1}}/api/storage/summary获取当前空间的容量、分类、相册和分享摘要。
Response
{"success":true,"data":{...}}/public/files/:fileId对 public 文件返回 302 跳转到下载地址。
Response
302 redirectTeam administrators
这些接口面向企业或团队管理员,用来管理团队成员和成员 API key。仅列出团队管理员应使用的能力,不展示超级管理员和 provider internal 路由。
/api/dashboard/admin获取管理员视角的团队、存储和成员摘要。
Response
{"success":true,"data":{...}}/api/admin/users查看当前管理员可管理的成员列表。
Response
{"success":true,"data":{"users":[...]}}/api/admin/users为团队创建普通成员,并返回初始 API key。
Request
{"email":"member@example.com","displayName":"Member Name","role":"user"}Response
{"success":true,"data":{"user":{...},"apiKey":"d1vsk_..."}}创建管理员角色属于超级管理员能力,此文档不展示。
/api/admin/users/:userId/keys列出指定成员的 API key 摘要。
Response
{"success":true,"data":{"keys":[...]}}/api/admin/users/:userId/disable禁用成员账号,并撤销该成员所有 API key。
Response
{"success":true,"data":{"user":{...}}}/api/admin/users/:userId/enable恢复被禁用成员的账号状态。
Response
{"success":true,"data":{"user":{...}}}/api/admin/keys/:keyId/revoke管理员撤销团队成员的某个 API key。
Response
{"success":true,"data":{"revoked":true}}Guardrails
平台运营、超级管理员和 provider 内部接口不适合作为外部客户文档暴露。企业客户只需要团队管理员接口即可完成成员与 key 管理。