{"data":{"openapi":"3.1.0","info":{"title":"ctrlC 账号与功能控制 API","version":"1.0.0","description":"基础剪贴板不要求登录；平台额度、会员权限和插件安装状态在此管理。月额度按 Asia/Shanghai 的自然月；所有 expires_at/created_at 使用 Unix 毫秒。Token/调用次数由服务器计量，客户端 telemetry 不是收费凭证。"},"servers":[{"url":"https://accounts.o200.com/api/v1"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"},"cookieAuth":{"type":"apiKey","in":"cookie","name":"ctrlc_session"}}},"paths":{"/auth/reset-password":{"post":{"summary":"使用管理员交付的一次性恢复码设置新密码并注销全部会话","description":"权限：public. 响应包裹在 data；错误包裹在 error。","tags":["公共"],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reset_token":{"type":"string","description":"一次性恢复码"},"new_password":{"type":"string","description":"新密码","minLength":12,"maxLength":128}},"required":["reset_token","new_password"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/users/{id}/password-reset":{"post":{"summary":"为普通用户生成一小时有效的一次性恢复码，须先人工核验身份","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","description":"操作原因，将记录到日志","maxLength":200}},"required":["reason"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/health":{"get":{"summary":"健康检查","description":"权限：public. 响应包裹在 data；错误包裹在 error。","tags":["公共"],"security":[],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/openapi.json":{"get":{"summary":"OpenAPI 文档","description":"权限：public. 响应包裹在 data；错误包裹在 error。","tags":["公共"],"security":[],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/auth/register":{"post":{"summary":"注册免费用户","description":"权限：public. 响应包裹在 data；错误包裹在 error。","tags":["公共"],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"账号邮箱","format":"email"},"password":{"type":"string","description":"密码","minLength":12,"maxLength":128},"name":{"type":"string","description":"用户名","maxLength":100}},"required":["email","password","name"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/auth/login":{"post":{"summary":"登录并获取七天 Bearer Token","description":"权限：public. 响应包裹在 data；错误包裹在 error。","tags":["公共"],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"账号邮箱","format":"email"},"password":{"type":"string","description":"密码","minLength":12,"maxLength":128}},"required":["email","password"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/auth/logout":{"post":{"summary":"注销当前会话","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/auth/password":{"post":{"summary":"修改密码并注销所有会话","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"current_password":{"type":"string","description":"当前密码"},"new_password":{"type":"string","description":"新密码","minLength":12,"maxLength":128}},"required":["current_password","new_password"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/me":{"get":{"summary":"当前账号、双额度、功能权限和安装状态","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/features":{"get":{"summary":"功能清单；携带 Token 时返回当前账号权限","description":"权限：public. 响应包裹在 data；错误包裹在 error。","tags":["公共"],"security":[],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/features/{key}/authorize":{"post":{"summary":"服务端校验功能权限；记录授权事件，不能作为完成扣费凭证","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"event_id":{"type":"string","description":"客户端生成的稳定事件 ID；重试复用","maxLength":100},"device_id":{"type":"string","description":"客户端生成的非敏感设备 ID","maxLength":100}},"required":["event_id","device_id"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/features/{key}/installation":{"put":{"summary":"上报可选插件安装与启用状态","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"device_id":{"type":"string","description":"客户端生成的非敏感设备 ID","maxLength":100},"installed":{"type":"boolean"},"enabled":{"type":"boolean"},"version":{"type":"string","description":"已安装版本"}},"required":["device_id","installed","enabled","version"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/features/{key}/events":{"post":{"summary":"上报使用遥测（不用于收费）","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"event_id":{"type":"string","description":"客户端生成的稳定事件 ID；重试复用","maxLength":100},"device_id":{"type":"string","description":"客户端生成的非敏感设备 ID","maxLength":100},"event_type":{"type":"string","description":"仅客户端遥测使用","enum":["used","opened","failed"]}},"required":["event_id","device_id","event_type"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/me/usage":{"get":{"summary":"自己的平台翻译计量记录","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/translate":{"post":{"summary":"调用平台翻译，预留与结算双额度；重试必须复用幂等键","description":"权限：user. 响应包裹在 data；错误包裹在 error。","tags":["客户端"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"待翻译文字"},"image":{"type":"object","properties":{"mime_type":{"type":"string","description":"图片类型","enum":["image/png","image/jpeg"]},"data_base64":{"type":"string","description":"不含 data: 前缀的 Base64；原始文件不超过 1 MB"}},"required":["mime_type","data_base64"]},"source_language":{"type":"string","description":"语言代码","default":"auto"},"target_language":{"type":"string","description":"语言代码","default":"zh"}},"required":[]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/dashboard":{"get":{"summary":"总览与各功能的授权/客户端使用汇总","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/users":{"get":{"summary":"分页查找用户；q、page 查询参数","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}},"post":{"summary":"创建普通用户","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"账号邮箱","format":"email"},"password":{"type":"string","description":"密码","minLength":12,"maxLength":128},"name":{"type":"string","description":"用户名","maxLength":100}},"required":["email","password","name"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/users/{id}":{"get":{"summary":"用户、额度、权限、安装、事件和赠送记录","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}},"patch":{"summary":"启用或停用账号；停用立即注销全部会话","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"状态","enum":["active","suspended"]}},"required":["status"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/users/{id}/quota/grant":{"post":{"summary":"为当前月额外赠送额度","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"type":"integer","minimum":0,"description":"增加 Token 上限"},"requests":{"type":"integer","minimum":0,"description":"增加次数上限"},"reason":{"type":"string","description":"操作原因，将记录到日志","maxLength":200}},"required":["tokens","requests","reason"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/users/{id}/plan":{"put":{"summary":"设置免费/会员权限和有效期；不处理付款","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"string","description":"会员类型","enum":["free","pro"]},"expires_at":{"type":["integer","null"],"description":"Unix 毫秒；pro 必填未来时间，free 填 null"},"reason":{"type":"string","description":"操作原因，将记录到日志","maxLength":200}},"required":["plan","reason"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/users/{id}/entitlements/{key}":{"put":{"summary":"独立允许/拒绝某功能或恢复默认策略","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","description":"决定","enum":["grant","deny","default"]},"expires_at":{"type":["integer","null"]},"reason":{"type":"string","description":"操作原因，将记录到日志","maxLength":200}},"required":["decision","reason"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/features":{"get":{"summary":"完整功能目录","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/features/{key}":{"put":{"summary":"创建/编辑功能与插件包清单；已规划云存储不能误标为已实现","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"名称"},"description":{"type":"string","description":"说明"},"kind":{"type":"string","description":"类型","enum":["core","service","plugin","cloud"]},"access_policy":{"type":"string","description":"策略","enum":["free","quota","pro","manual"]},"status":{"type":"string","description":"状态","enum":["planned","active","disabled"]},"version":{"type":"string","description":"版本"},"package_url":{"type":"string","description":"HTTPS 插件地址","format":"uri"},"package_sha256":{"type":"string","description":"插件包 SHA-256","pattern":"^[a-fA-F0-9]{64}$"}},"required":["name","description","kind","access_policy","status","version"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/settings":{"get":{"summary":"读取模型和默认月额度；密钥永不回显","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}},"put":{"summary":"更新模型和默认月额度","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"registration_enabled":{"type":"boolean"},"quota_mode":{"type":"string","description":"双限额模式","enum":["tokens","requests","both"]},"default_tokens":{"type":"integer","minimum":0,"description":"新用户或新月份默认 Token 上限"},"default_requests":{"type":"integer","minimum":0,"description":"默认成功调用次数上限"},"max_input_chars":{"type":"integer","minimum":20,"maximum":12000},"max_output_tokens":{"type":"integer","minimum":50,"maximum":4096},"model":{"type":"string","description":"实际可用模型名称"},"endpoint":{"type":"string","description":"完整 HTTPS Chat Completions 地址；主机须在部署白名单"},"api_key":{"type":"string","description":"可选，新密钥；省略或留空保留旧值","writeOnly":true},"clear_api_key":{"type":"boolean"}},"required":["registration_enabled","quota_mode","default_tokens","default_requests","max_input_chars","max_output_tokens","model","endpoint"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/usage":{"get":{"summary":"最近 100 笔计量记录；可按 user_id 筛选，不返回译文","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"user_id","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/usage/{id}/reconcile":{"post":{"summary":"人工核对超过五分钟的未完成预留请求","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"决定","enum":["refund","charge_reserved"]},"reason":{"type":"string","description":"操作原因，将记录到日志","maxLength":200}},"required":["action","reason"]}}}},"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}},"/admin/audit":{"get":{"summary":"最近 100 条管理员变更日志","description":"权限：admin. 响应包裹在 data；错误包裹在 error。","tags":["后台管理"],"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[],"responses":{"200":{"description":"操作成功","content":{"application/json":{"schema":{"type":"object","properties":{"data":{}}}}}},"400":{"description":"参数不合法"},"401":{"description":"未登录或 Token 失效"},"402":{"description":"翻译额度不足"},"403":{"description":"权限不足、功能未开放或浏览器来源错误"},"409":{"description":"重复标识冲突、处理中或历史结果已过期"},"429":{"description":"请求限流"},"502":{"description":"模型服务失败，释放用户额度预留"},"503":{"description":"平台模型尚未配置"}}}}}}}