小啡一键成片 · API 接入手册

面向客户端开发者、合作伙伴和内部技术。文档依据 RC15.8.6.2 实际 NestJS Controller、DTO 与 Customer Console 调用整理。左侧是目录,右侧同时给出接口、代码范例、操作步骤和当前客户端 UI 操作示意。

Project / Runtime 权威API Key + JWT异步 Run / TaskProvider / BYOK图片 / 故事板 / 视频未来 OSS Storage Adapter

1. 产品 API 思路

小啡不是把“一键成片”做成一条不可修改的黑盒流水线,而是把 剧本、资产、导演片段、图片、视频、任务状态 都变成可读、可改、可批量、可并发的业务对象。

Source→Proposal / Canonical→Assets→Segments→Images / Storyboard→Videos→Final Film
外部 API 的稳定核心

优先使用 /v1/projects、Runtime、Run/Task、Auto Production、Final Film。这些路由支持用户 JWT 或 sk-* API Key。

客户端调试能力

/user/provider-adapter/* 当前主要供 XiaoFei Customer Console 调试真实 Provider,使用用户 JWT。它不是长期公共 SDK 的最终形态。

2. 5 分钟快速开始

在控制台创建 API Key
Scopes 至少勾选 production:read 与 production:write。完整 sk-* 只在创建成功时展示一次。
健康检查
GET {BASE_URL}/v1/health,确认 release 与 API 可达。
创建项目
用 POST /v1/projects 得到 projectId。
导入故事 / 小说 / 剧本
长文本推荐分块 Source API;上传剧本支持 txt/md/fountain/fdx,本地解析。
确认 Gate 1 后启动生产
可人工确认文本与图片,也可以调用 Auto Production 进入自动批量生产。
轮询 Task / Final Film
最终通过 Media playbackPath 或后续 OSS Signed URL 获取成品。
GET/v1/health

检查 API 与当前 Release

鉴权:无
响应示例
{{
  "status": "ok",
  "version": "0.11.0-alpha.4",
  "release": "v0.11.0-alpha.4-RC15.8.6.2-ToAPIsEnvMigrationHotfix",
  "timestamp": "2026-08-28T00:00:00.000Z"
}}
POST/v1/projects

创建一个短剧项目

鉴权:API Key / JWT
请求示例
curl -X POST "{{BASE_URL}}/v1/projects" \
  -H "Authorization: Bearer sk-REPLACE_ME" \
  -H "Content-Type: application/json" \
  -d '{
    "title":"金毛卧底",
    "contentType":"short_drama",
    "sourceType":"screenplay",
    "settings":{{"episodeCount":80,"aspectRatio":"9:16"}}
  }'
响应示例
{{
  "id":"project_xxx",
  "title":"金毛卧底",
  "status":"draft",
  "contentType":"short_drama"
}}

3. 鉴权与 API Key

UI 操作示意:API Key / 权限。依据当前 RC 客户端与 API Key DTO 绘制,非像素级产品截图。

正式 v1 生产接口使用统一 Header:

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

当前 UserOrApiKeyAuthGuard 的规则是:Bearer 值以 sk- 开头时按 API Key 校验,否则按用户 JWT 校验。

建议最小权限
只读客户端:production:read。创建/启动生产:再加 production:write。还可设置 IP Allowlist、rateLimit、allowedProviders、allowedModels。
POST/user/api-keys

创建 API Key

鉴权:用户 JWT

该路由本身使用登录 JWT,不使用刚创建的 API Key。

请求示例
{{
  "name":"我的生产客户端",
  "scopes":["production:read","production:write"],
  "rateLimit":60,
  "ipAllowlist":[],
  "allowedProviders":[],
  "allowedModels":[],
  "quotaLimit":"0"
}}
响应示例
{{
  "code":200,
  "msg":"success",
  "data":{{
    "id":"key_xxx",
    "key":"sk-完整密钥仅此一次",
    "scopes":["production:read","production:write"]
  }}
}}

4. 响应格式、Trace 与错误

/v1/* 路由通常直接返回业务对象;传统 /user/* 路由经过全局 TransformInterceptor,通常包在 {code,msg,data,traceId} 中。

User API 成功
{{
  "code":200,
  "msg":"success",
  "data":{{...}},
  "traceId":"trace_xxx"
}}
统一错误
{{
  "code":10000,
  "msg":"参数错误",
  "data":null,
  "traceId":"trace_xxx"
}}

常用错误码

Code含义处理
10000参数错误检查 DTO 字段与枚举
20000认证失败重新登录或检查 API Key
20001Token 过期刷新登录
30002Key 过期新建 / 延长 Key
30003配额耗尽调整配额
30004 / HTTP 429限流指数退避
30006渠道不可用切 Provider / 检查健康
504 怎么处理?
504 表示某个同步 HTTP 等待层超时,不等于任务一定失败。图片、视频等长耗时任务应逐步统一为“提交任务 → 返回 taskId → 查询状态”,而不是把浏览器连接一直挂到 Provider 完成。

5. Project 项目

Project 是生产链的顶层业务容器。正式 API 支持 API Key 与 JWT。

POST/v1/projects

创建项目

鉴权:API Key / JWT
请求示例
{{
  "title":"80集营销短剧",
  "contentType":"short_drama",
  "sourceType":"idea",
  "settings":{{}}
}}
PUT/v1/projects/:id

更新项目

鉴权:API Key / JWT
请求示例
{{
  "title":"新标题",
  "settings":{{
    "productionProfile":{{"episodeCount":80,"aspectRatio":"9:16"}}
  }}
}}
POST/v1/projects/:id/copy

复制项目

鉴权:API Key / JWT
DELETE/v1/projects/:id

归档项目

鉴权:API Key / JWT

6. Source / Runtime / Gate

UI 操作示意:批量文字与 Gate 1。

Runtime 保存最新 Source、Proposal、Canonical Script 与确定性生产结构。大文本推荐使用分块传输,当前 Customer Console 也采用 4096 字符分块。

当前 RC Alpha 特殊 Header
所有 POST /v1/projects/:projectId/runtime/source... 当前服务器门禁要求 X-XiaoFei-Client-Release: a4-rc15-8-6-2-toapis-env-migration-hotfix。这属于 RC 客户端兼容保护,正式公共 API 应升级成更稳定的 API-Version 机制。
POST/v1/projects/:projectId/runtime/source/chunked/init

初始化长文本上传

鉴权:API Key / JWT
请求示例
curl -X POST "{{BASE_URL}}/v1/projects/PROJECT_ID/runtime/source/chunked/init" \
 -H "Authorization: Bearer sk-..." \
 -H "X-XiaoFei-Client-Release: a4-rc15-8-6-2-toapis-env-migration-hotfix" \
 -H "Content-Type: application/json" \
 -d '{{"sourceType":"screenplay","totalChars":18420,"totalChunks":5,"filename":"script.txt"}}'
响应示例
{{"uploadId":"upload_xxx", "accepted":true}}
POST/v1/projects/:projectId/runtime/source/chunked/:uploadId/chunk

写入一个幂等文本分块

鉴权:API Key / JWT
请求示例
{{"index":0,"chunk":"第1集……"}}
POST/v1/projects/:projectId/runtime/source/chunked/:uploadId/commit

组装并编译 Source

鉴权:API Key / JWT

上传 screenplay 的 Runtime 导入路径应保持确定性;RC15.8.6 已明确上传剧本的制作方案 Gate 不应依赖 LLM。

请求示例
{{}}
响应示例
{{
  "stage":"proposal_ready",
  "llmCalls":0,
  "receipt":{{
    "sourceId":"src_xxx",
    "scriptId":"script_xxx",
    "proposalId":"proposal_xxx"
  }}
}}
GET/v1/projects/:projectId/runtime

读取最新 Runtime

鉴权:API Key / JWT
POST/v1/projects/:projectId/runtime/proposal/confirm

确认 Proposal / Gate 1

鉴权:API Key / JWT

7. Production Settings

UI 操作示意:生产设置。客户可以用自己的客户端暴露更多高级参数。

Production Profile 是客户默认生产参数;项目可通过 project.settings.productionProfile 覆盖;Runtime 可再接受单次运行覆盖。优先级建议保持:平台默认 < 客户默认 < 项目覆盖 < 本次运行。

PUT/user/production-profile

保存默认生产设置

鉴权:用户 JWT
请求示例
{{
  "contentType":"short_drama",
  "language":"zh-CN",
  "aspectRatio":"9:16",
  "episodeCount":80,
  "episodeDuration":60,
  "storyboardCharacterReferenceEnabled":true,
  "wardrobePolicy":"script_first",
  "assetMaterializationThreshold":2,
  "defaultTextProviderProfileId":"pp_text",
  "defaultImageProviderProfileId":"pp_image",
  "defaultVideoProviderProfileId":"pp_video",
  "extra":{{"visualReferenceMode":"direct_reference","visualStyle":"真人电影感"}}
}}
产品权限思路
普通客户端只展示必要参数;高级客户、自研客户端和 API 用户可在 Production Settings 中获得更多自由度,但不能越过 Canonical、Tenant、Provider Capability 和安全边界。

8. 一键自动生产

Auto Production 使用 Bull 队列创建 Run + Task,不应要求 HTTP 一直等待整个 80 集完成。

POST/v1/projects/:projectId/auto-production

启动自动生产

鉴权:API Key / JWT

Direct Reference 可传 storyboardEnabled=false;若已有 queued/running 的同类任务,服务端会复用活动任务。

请求示例
{{"storyboardEnabled":false}}
响应示例
{{
  "taskId":"task_xxx",
  "runId":"run_xxx",
  "status":"queued",
  "progress":0
}}
GET/v1/projects/:projectId/auto-production

查看自动生产状态

鉴权:API Key / JWT
响应示例
{{
  "latest":{{"taskId":"task_xxx","status":"running","progress":42}},
  "history":[...]
}}

9. Run / Task

建议所有媒体长任务最终收敛到统一状态:queued → running → succeeded / failed,并带 progress、errorCode、errorMessage、stage 与日志指针。

GET/v1/tasks/:id

读取任务详情

鉴权:API Key / JWT
GET/v1/runs/:id

读取 Run 详情

鉴权:API Key / JWT
async function waitTask(taskId) {{
  while (true) {{
    const r = await fetch(`${{BASE_URL}}/v1/tasks/${{taskId}}`, {{
      headers: {{ Authorization: `Bearer ${{API_KEY}}` }}
    }}).then(r => r.json());
    if (r.status === 'succeeded') return r;
    if (r.status === 'failed') throw new Error(r.errorMessage || r.errorCode);
    await new Promise(x => setTimeout(x, 2000));
  }}
}}

10. 最终成片与剪辑

当前 Final Film 会选择每个 Segment 最新成功视频,并进入 media-postprocess 队列。未来字幕、转场、片头尾、BGM、色调统一都应继续接在这一层,而不是塞回视频 Provider。

POST/v1/projects/:projectId/final-film

创建最终成片

鉴权:API Key / JWT
请求示例
{{"title":"金毛卧底 · 完整版"}}
响应示例
{{"taskId":"task_final","status":"queued","progress":0}}
GET/v1/projects/:projectId/final-film

查询成片

鉴权:API Key / JWT
响应示例
{{
  "latest":{{"status":"succeeded","progress":100}},
  "artifacts":[{{
    "id":"media_final",
    "mediaType":"final_film",
    "playbackPath":"/v1/media/media_final/play?token=..."
  }}]
}}

11. 剧本库 / 资产库 / 白膜库 / Skills

这些不是附属配置,而是小啡总后台的长期核心资产。客户端目前有只读/检索接口,写入与审核主要由 Admin 控制面完成。

GET /user/foundation/scripts

剧本库。用于 Writer Context 与可复用优秀结构。

GET /user/foundation/assets

角色、场景、道具等已批准资产。

GET /user/foundation/white-models

白膜 / 标准化视觉结构。

GET /user/skills?stage=…

按生产阶段获取可用 Skills。

未来爆款库
建议与上述 Foundation 同级新增 Trend/Hit Library,而不是直接把“爆款规则”写死到 Prompt。它应该能版本化、评分、淘汰、回滚和按内容类型检索。

12. 图片与故事板(客户端调试 API)

UI 操作示意:资产图 / 故事板确认。
当前鉴权
/user/provider-adapter/* 使用用户 JWT,不是公共 API Key。它适合 Customer Console 与调试工具。正式外部媒体 API 后续建议迁到版本化 /v1 Task API。
POST/user/provider-adapter/asset-image-plan

获取资产出图计划

鉴权:用户 JWT
请求示例
{{"projectId":"project_xxx"}}
POST/user/provider-adapter/asset-image-generate

生成一张资产图

鉴权:用户 JWT
请求示例
{{
  "projectId":"project_xxx",
  "providerProfileId":"image_profile",
  "assetKey":"ap-character-xxx",
  "promptOverride":"可选:人工调整后的提示词"
}}
POST/user/provider-adapter/storyboard-plan

故事板计划

鉴权:用户 JWT
请求示例
{{"projectId":"project_xxx"}}
POST/user/provider-adapter/storyboard-generate

生成故事板

鉴权:用户 JWT
请求示例
{{
  "projectId":"project_xxx",
  "providerProfileId":"i2i_profile",
  "segmentNo":1,
  "useReferences":true
}}

13. 视频生成

UI 操作示意:Runtime 统一组装多参考图后提交 MiniMax-H3。

RC15.8.6 的关键边界是:浏览器不再决定单张参考图,Server Runtime 才是 reference bundle 权威。 Storyboard Route 包含故事板 + 匹配资产;Direct Reference 只包含匹配资产;最多 9 张。

POST/user/provider-adapter/video-segments

读取当前视频片段与引用 Bundle

鉴权:用户 JWT
请求示例
{{"projectId":"project_xxx"}}
POST/user/provider-adapter/video-generate

提交一个 Segment 视频

鉴权:用户 JWT

referenceMediaId 仍保留兼容字段,但 RC15.8.6 的正式语义是服务端重新解析 reference bundle。

请求示例
{{
  "projectId":"project_xxx",
  "providerProfileId":"video_profile",
  "segmentNo":1,
  "videoMode":"direct_reference"
}}
POST/user/provider-adapter/video-status

查询 MiniMax 视频任务

鉴权:用户 JWT
请求示例
{{"taskId":"provider_task_xxx"}}

14. Media Playback 与阿里云 OSS

当前 RC 的 /v1/media/:id/play?token=… 支持 HTTP Range 播放。正式媒体建议走对象存储;对外保持媒体授权契约,存储实现可抽象为 MediaStorage Adapter。

GET/v1/media/:id/play?token=…

播放图片 / 视频

鉴权:Opaque token URL

当前支持 Range,适合 MP4 拖动播放。也可返回短期 Signed URL,或由 API 代理 Range;业务层不应感知具体存储 SDK。

数据库建议存

bucket、objectKey、mimeType、byteSize、mediaType、status、provider、metadata。不要只存永不过期的完整 URL。

上传成功边界

Provider 结果只有在 OSS 写入成功后,Media 才进入 ready。失败任务可保留日志和 Provider Job ID,不伪装成成功。

15. 中转站 / Provider / BYOK

UI 操作示意:Credential 与 Provider Profile 分层。

Credential 与 Profile 必须分开:Credential 管密钥/Base URL;Profile 管用途、模型、Endpoint、超时和 Provider options。

POST/user/provider-credentials

新增客户自己的中转站/BYOK

鉴权:用户 JWT
请求示例
{{
  "name":"我的 ToAPIs",
  "providerType":"openai_compatible",
  "baseUrl":"https://example-provider.invalid",
  "apiKey":"SECRET",
  "enabled":true
}}
POST/user/provider-profiles

建立用途 Profile

鉴权:用户 JWT
请求示例
{{
  "credentialId":"credential_xxx",
  "purpose":"video",
  "model":"MiniMax-H3",
  "endpointPath":"/v1/video_generation",
  "timeoutMs":180000,
  "maxPromptChars":7000,
  "enabled":true
}}
安全
对外文档、日志、Task payload、错误信息都不应回显 API Key。Credential API 只让用户本人管理;总后台默认展示掩码和健康状态。

16. 80 集并发与 Provider Router

未来“80 集,每 10 集走一个视频通道”不应该由前端 for-loop 硬编码,而应由 Server Scheduler 根据 Provider Capability、并发槽、健康度、价格和客户策略分配。

EP01–10 → Channel AEP11–20 → BEP21–30 → C…EP71–80 → H
平台集合模式

客户选择“自动”,Router 从平台合作的优秀中转站池里调度。

客户自带模式

客户可固定自己的 Provider Profiles,或允许“自带优先 + 平台兜底”。

建议未来公共 API 暴露 routingPolicy / providerPoolId / maxConcurrency 等高阶设置,但不直接暴露内部秘密 Credential。

17. 调试、日志与 504 定位

客户调试版每一步都应有日志。当前 Product Parity 提供 GET /user/product/debug-logs(JWT),媒体生成也记录 Provider/Task 信息。

阶段建议字段用途
图片localPreparationMs / referenceUploadMs / providerRoundTripMs / mediaPersistMs / totalMs定位 Provider、上传、存储谁慢
视频providerJobId / referenceMediaIds / route / submitAt / pollAt防止重复提交与重复扣费
Taskstage / status / progress / errorCode / errorMessage / traceId让 UI 和 API 客户端都能恢复状态
504 实战判断
若 Provider Job 已创建但 HTTP 504,前端不要自动再次 submit;优先用 taskId/providerJobId 查询。未来统一异步化后,生成接口应快速返回 202 + taskId。

18. 完整调用范例

cURL:创建项目 → 导入短剧 → 确认 → 自动生产

API="{{BASE_URL}}"
KEY="sk-REPLACE_ME"
REL="a4-rc15-8-6-2-toapis-env-migration-hotfix"

# 1. 创建项目
PROJECT_ID=$(curl -s -X POST "$API/v1/projects" \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"title":"Demo","contentType":"short_drama","sourceType":"screenplay"}' | jq -r '.id')

# 2. 小文本可直接 Source;长文本建议使用 chunked API
curl -X POST "$API/v1/projects/$PROJECT_ID/runtime/source" \
  -H "Authorization: Bearer $KEY" \
  -H "X-XiaoFei-Client-Release: $REL" \
  -H "Content-Type: application/json" \
  -d '{"sourceType":"screenplay","text":"# 第1集\n……"}'

# 3. 确认 Gate 1
curl -X POST "$API/v1/projects/$PROJECT_ID/runtime/proposal/confirm" \
  -H "Authorization: Bearer $KEY"

# 4. 启动自动生产
curl -X POST "$API/v1/projects/$PROJECT_ID/auto-production" \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"storyboardEnabled":false}'

# 5. 查看状态
curl "$API/v1/projects/$PROJECT_ID/auto-production" \
  -H "Authorization: Bearer $KEY"

JavaScript:安全轮询

const headers = {{ Authorization: `Bearer ${{API_KEY}}` }};

async function getAutoProduction(projectId) {{
  const r = await fetch(`${{BASE_URL}}/v1/projects/${{projectId}}/auto-production`, {{ headers }});
  if (!r.ok) throw new Error(`HTTP ${{r.status}}`);
  return r.json();
}}

async function waitAuto(projectId) {{
  for (;;) {{
    const state = await getAutoProduction(projectId);
    const t = state.latest;
    renderProgress(t?.progress ?? 0, t?.status ?? 'queued');
    if (t?.status === 'succeeded') return t;
    if (t?.status === 'failed') throw new Error(t.errorMessage || t.errorCode || 'failed');
    await new Promise(r => setTimeout(r, 2000));
  }}
}}

19. RC15.8.6.2 当前客户侧路由索引

下面按当前源码 Controller + Customer Console 调用整理。Admin 总后台写接口没有全部列入本页,避免客户误用。

MethodPath鉴权用途
GET/v1/health公开健康检查
POST/auth/send-code公开发送邮箱验证码
POST/auth/login公开邮箱验证码登录
GET/auth/profileJWT当前用户
GET/user/api-keysJWTAPI Key 列表
POST/user/api-keysJWT创建 API Key
PUT/user/api-keys/:idJWT编辑 Key
PUT/user/api-keys/:id/statusJWT启停 Key
DELETE/user/api-keys/:idJWT吊销 Key
GET/user/production-profileJWT读取生产设置
PUT/user/production-profileJWT保存生产设置
GET/user/provider-credentialsJWTCredential 列表
POST/user/provider-credentialsJWT新增 BYOK
PUT/user/provider-credentials/:idJWT更新 BYOK
DELETE/user/provider-credentials/:idJWT删除 BYOK
GET/user/provider-profilesJWTProvider Profile 列表
POST/user/provider-profilesJWT新增 Profile
PUT/user/provider-profiles/:idJWT更新 Profile
DELETE/user/provider-profiles/:idJWT删除 Profile
GET/user/foundation/assetsJWT可用资产库
GET/user/foundation/scriptsJWT剧本库
GET/user/foundation/white-modelsJWT白膜库
GET/user/foundation/character-templatesJWT人物模板
GET/user/skillsJWTSkills
GET/v1/projectsAPI Key / JWT项目列表
POST/v1/projectsAPI Key / JWT创建项目
GET/v1/projects/:idAPI Key / JWT项目详情
PUT/v1/projects/:idAPI Key / JWT更新项目
POST/v1/projects/:id/copyAPI Key / JWT复制项目
DELETE/v1/projects/:idAPI Key / JWT归档项目
GET/v1/projects/:projectId/runtimeAPI Key / JWT读取 Runtime
POST/v1/projects/:projectId/runtime/sourceAPI Key / JWT直接导入 Source
POST/v1/projects/:projectId/runtime/source/chunked/initAPI Key / JWT分块初始化
POST/v1/projects/:projectId/runtime/source/chunked/:uploadId/chunkAPI Key / JWT上传分块
POST/v1/projects/:projectId/runtime/source/chunked/:uploadId/commitAPI Key / JWT提交分块
POST/v1/projects/:projectId/runtime/source/uploadAPI Key / JWTmultipart 文件导入
POST/v1/projects/:projectId/runtime/proposal/confirmAPI Key / JWT确认 Gate 1
GET/v1/runsAPI Key / JWTRun 列表
POST/v1/runsAPI Key / JWT创建 Run
GET/v1/runs/:idAPI Key / JWTRun 详情
GET/v1/tasksAPI Key / JWTTask 列表
POST/v1/tasksAPI Key / JWT创建 Task
GET/v1/tasks/:idAPI Key / JWTTask 详情
POST/v1/projects/:projectId/auto-productionAPI Key / JWT一键自动生产
GET/v1/projects/:projectId/auto-productionAPI Key / JWT自动生产状态
POST/v1/projects/:projectId/final-filmAPI Key / JWT创建最终成片
GET/v1/projects/:projectId/final-filmAPI Key / JWT最终成片状态
POST/user/provider-adapter/video-production-planJWT视频制作方案预览
POST/user/provider-adapter/asset-image-planJWT资产出图计划
POST/user/provider-adapter/asset-image-generateJWT生成资产图
POST/user/provider-adapter/storyboard-planJWT故事板计划
POST/user/provider-adapter/storyboard-generateJWT生成故事板
POST/user/provider-adapter/video-segmentsJWT解析视频片段
POST/user/provider-adapter/video-generateJWT提交视频
POST/user/provider-adapter/video-statusJWT查询视频状态
GET/v1/media/:id/play?token=…Token URL媒体播放

20. UI → API 对照

客户端页面/操作主要 API权威对象
新建短剧项目POST /v1/projectsProject
上传/粘贴剧本runtime/source/chunked/* 或 source/uploadSource / Proposal / Canonical
确认文本runtime/proposal/confirmGate 1
资产列表asset-image-plan + FoundationCanonical + Semantic Asset Discovery
生成角色/场景/道具图asset-image-generateMedia
故事板storyboard-plan / generateSegment + Media
批量视频video-segments / generate / statusRuntime Reference Bundle + Task
一键自动成片auto-productionRun + Task
剪辑/最终成片final-filmMedia(final_film)
中转站设置provider-credentials / provider-profilesCredential + Profile
高级生产设置user/production-profileProduction Profile

21. 版本、兼容与下一阶段

当前文档基线

v0.11.0-alpha.4-RC15.8.6.2-ToAPIsEnvMigrationHotfix

文档内容从本版本代码提取,不把未来设想伪装成已上线接口。

下一步建议

公共 API 固定 /v1 契约;把 /user/provider-adapter 的成熟能力迁入版本化 Task API;引入 API Version Header / OpenAPI 导出。

对象存储

MediaStorage 抽象;Signed URL 与 Range;Worker 直接落对象存储。

Provider Hub

Capability / Health / Router / Scheduler / Adapter 分层,支持平台中转站集合与客户 BYOK 并存。

维护规则
每次公开 API 的字段、枚举、状态机或鉴权发生变化,都要同步:OpenAPI → 本 HTML → cURL/JS Demo → UI 操作示意。不要只改代码。
← 返回官网