codex API 接口文档 · v0.1.73

codex API 接口文档

面向外部业务后端的异步视频制作接口。提交视频与模板后,轮询任务状态,并从私有腾讯云 COS 获取最终成片。

生产基础地址
https://kp.baziapi.site
当前基线
0.1.73
数据格式
JSON / multipart
当前已注册并启用 54 套模板,结构校验已通过。该结论不等同于 54 套模板均完成逐套真实渲染验收。
普通客户只需要接入公共业务接口:模板列表、提交任务、查询任务、获取成片。智能混剪客户调用 /api/v1/auto-mix/jobs,由 KP 后台使用共享开拍账号处理。管理后台和 /api/admin/* 不属于对外接入契约。

5 分钟接入路径

客户服务端按下面 5 步接入即可;不要从浏览器、小程序或 App 直接调用本服务。

  1. 配置 KAIPAI_BASE_URL=https://kp.baziapi.site 和服务端专用 KAIPAI_API_KEY。
  2. 调用 GET /api/v1/templates 获取模板 name,不要在客户端写死模板数量。
  3. 用稳定业务单号生成全局唯一 Idempotency-Key。
  4. 优先调用 POST /api/v1/jobs/from-url 提交公网视频地址。
  5. 保存 job_id,每 3~5 秒轮询 GET /api/v1/jobs/{job_id};完成后使用 result_url 或结果接口下载成片。
# 1. 健康检查
curl "$KAIPAI_BASE_URL/api/v1/health"

# 2. 获取模板
curl "$KAIPAI_BASE_URL/api/v1/templates" \
  -H "X-API-Key: $KAIPAI_API_KEY"

# 3. 提交任务
curl -X POST "$KAIPAI_BASE_URL/api/v1/jobs/from-url" \
  -H "X-API-Key: $KAIPAI_API_KEY" \
  -H "Idempotency-Key: smart-edit:user123:work456:wsec0008:v1" \
  -H "Content-Type: application/json" \
  -d '{"video_url":"https://media.example.com/work456.mp4","file_name":"work456.mp4","template":"wsec0008","title":"产品介绍","script":"这里是完整口播文案"}'

# 4. 查询任务
curl "$KAIPAI_BASE_URL/api/v1/jobs/$JOB_ID" \
  -H "X-API-Key: $KAIPAI_API_KEY"

# 5. 下载成片,允许 307 跳转
curl -L "$KAIPAI_BASE_URL/api/v1/jobs/$JOB_ID/result" \
  -H "X-API-Key: $KAIPAI_API_KEY" \
  -o result.mp4
当前没有 Webhook 回调。调用方需要保存 job_id 并轮询;达到业务超时时不要换幂等键重复提交。

鉴权与通用请求头

除健康检查外,所有业务接口都必须由服务端携带 API Key。不要把密钥放入浏览器、小程序、App 或公开仓库。

X-API-Key: <YOUR_API_KEY>
Idempotency-Key: order:20260730:10001

Idempotency-Key 是三个任务提交入口的必填请求头,最大 200 字符,并且在整个服务内全局唯一。相同键会返回首次创建的任务,不会比对第二次提交的文件、模板或文案。

推荐接入流程

  1. 调用模板列表,保存需要使用的模板 name。
  2. 用稳定业务单号作为幂等键,优先通过 URL 提交异步任务。
  3. 保存返回的 job_id,每 3~5 秒查询一次状态。
  4. 状态为 completed 后使用 result_url,或调用结果接口获取成片。

支持的视频扩展名:.mp4、.mov、.m4v、.webm。默认最大 500 MiB。

GET/api/v1/health

无需鉴权,用于存活检查和版本确认。

{"status":"ok","version":"0.1.73"}
GET/api/v1/templates

返回当前启用模板。现有目录共 54 套,包括 advanced_red、wsec0002、wsec0003 等;以接口实时返回值为准。预览图统一为 3:4 封面 PNG(720×960),只用于模板卡片展示;成片视频仍保持 9:16。预览图更换后 preview_version 和 preview_url 会变化,列表响应不缓存;接入方应重新拉取列表并使用完整 URL。预览图资源可按版本化 URL 长期缓存,不要删除 v 参数。

curl "$BASE_URL/api/v1/templates" \
  -H "X-API-Key: $KAIPAI_API_KEY"

{
  "items": [{
    "name": "advanced_red",
    "display_name": "高级红·双语",
    "preview_url": "https://kp.baziapi.site/assets/template-previews/advanced_red.png?v=1785542400123456",
    "preview_version": "1785542400123456",
    "duration_ms": 0,
    "ratio_type": 1,
    "health_status": "ready"
  }]
}
POST/api/v1/jobs/from-url

推荐入口。服务端下载远程视频后创建异步任务,成功返回 202。

字段必填限制
video_url是1~4096 字符;地址必须符合服务端域名白名单和 SSRF 防护策略
template是1~64 字符,必须为已启用模板
file_name否默认 video.mp4,扩展名必须受支持
title否最多 200 字符;空值由服务智能生成,显式传入时覆盖
script否最多 50000 字符。可直接传完整口播原稿,无需手工整理段落;服务按原稿标点重组自然短句,并使用 ASR 逐字时间定位。对齐失败时自动回退到 ASR 识别结果。无论是否传入原稿,普通字幕都会按每套模板中最终轮到的具体样式容量重新切句,优先保留完整语义词组并避免单字片段;字号缩放仅作为第二层越界兜底

video_url 必须在提交时可由 codex 服务器公网访问;如果是临时签名地址,有效期需要覆盖下载、排队和制作时间,建议至少 30~60 分钟。未在白名单内的素材域名需要提前配置。

每个任务由服务端根据所选模板构建当前素材专属时间线,再提交给开拍上游导出;不复用历史成片。当前生产环境不启用浏览器自动编辑链。导出前会检查背景音乐轨及资源映射;缺失时任务失败,不返回静音降级成片。

curl -X POST "$BASE_URL/api/v1/jobs/from-url" \
  -H "X-API-Key: $KAIPAI_API_KEY" \
  -H "Idempotency-Key: work:10001:advanced_red:v1" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://media.example.com/input.mp4",
    "file_name": "input.mp4",
    "template": "advanced_red",
    "title": "产品介绍",
    "script": "这里是视频实际朗读的完整文案"
  }'
POST/api/v1/jobs

以 multipart/form-data 上传本地视频并创建异步任务,返回 202。

script 可直接传完整口播原稿,无需预先拆段。字幕分段、回退和最终样式宽度自适应规则与 URL 提交接口一致。

curl -X POST "$BASE_URL/api/v1/jobs" \
  -H "X-API-Key: $KAIPAI_API_KEY" \
  -H "Idempotency-Key: upload:10001:advanced_red:v1" \
  -F "video=@./input.mp4;type=video/mp4" \
  -F "template=advanced_red" \
  -F "title=产品介绍" \
  -F "script=这里是完整文案"
POST/api/v1/auto-mix/jobs

智能混剪入口。客户只需要使用 KP 的 X-API-Key,上传 1~5 个 MP4 素材;没有填写文案时走开拍自动写稿,返回数量以开拍实际生成结果为准。

字段必填说明
files是重复文件字段,1~5 个 MP4。video/mp4、空 MIME 或 application/octet-stream 的 .mp4 文件均可提交
script_mode否auto 或 manual,默认 auto
scripts手动模式必填手动文案最多 5 条;自动模式不要传该字段
writing_scenario否自动写稿场景,可选 store_traffic 或 product_sales
writing_brief否自动写稿补充信息,JSON 对象字符串
export_resolution否720p 或 1080p,默认 1080p
curl -X POST "$BASE_URL/api/v1/auto-mix/jobs" \
  -H "X-API-Key: $KAIPAI_API_KEY" \
  -H "Idempotency-Key: auto-mix:customer-a:work-10001:v1" \
  -F "files=@./clip-1.mp4;type=video/mp4" \
  -F "files=@./clip-2.mp4;type=video/mp4" \
  -F "script_mode=auto" \
  -F "export_resolution=720p"
GET/api/v1/auto-mix/jobs/{job_id}
GET/api/v1/auto-mix/jobs/{job_id}/results
POST/api/v1/auto-mix/jobs/{job_id}/cancel
POST/api/v1/auto-mix/jobs/{job_id}/resume

同一个 job_id 只能由创建它的 API Key 查询、取消或恢复;跨客户访问会返回 404。该接口没有客户任务列表,避免共享开拍账号下的任务互相可见。

POST/api/v1/jobs/sync?timeout=600

上传文件并等待。表单仅支持 video 和 template。任务完成返回 200,等待超时但任务仍运行返回 202,失败或取消返回 409。不推荐新客户使用;小程序、App、网关或长视频场景应使用异步提交 + 轮询。

GET/api/v1/jobs/{job_id}

查询任务状态。COS 成片完成后,每次查询会生成新的短期签名 result_url。

{
  "job_id": "job_0123456789abcdef",
  "status": "publishing",
  "progress": 0,
  "template": "advanced_red",
  "title": "产品介绍",
  "account_alias": "account_01",
  "error": "",
  "created_at": 1785160000.125,
  "updated_at": 1785160060.5,
  "completed_at": null,
  "result_storage": "cos",
  "result_expires_at": null,
  "status_url": "/api/v1/jobs/job_0123456789abcdef",
  "result_url": null
}
GET/api/v1/jobs/{job_id}/result

COS 模式返回 307 并跳转到短期签名 HTTPS 地址;本地兼容模式返回 200 video/mp4。多数 HTTP 客户端默认会跟随跳转。

curl -L "$BASE_URL/api/v1/jobs/$JOB_ID/result" \
  -H "X-API-Key: $KAIPAI_API_KEY" \
  -o result.mp4
签名 URL 有时效且属于敏感数据。需要下载时重新查询即可刷新,不要写入公开日志、前端埋点或长期缓存。

取消与重试

POST/api/v1/jobs/{job_id}/cancel

仅 queued 状态可取消,成功返回 200;状态不允许时返回 409。

POST/api/v1/jobs/{job_id}/retry

仅 failed 状态可重试,成功返回 202。如果任务已取得开拍上游结果而只在 COS 回传阶段失败,现有检查点会优先只重试回传,不重新导出。

任务响应字段

字段类型说明
job_idstring任务唯一标识
statusstring当前任务状态
progressnumber当前主要为 0 或 100,不适合作精细进度条
templatestring模板 API 名
result_storagestringcos 或 local
result_expires_atnumber/nullCOS 对象预计到期时间,Unix 秒
result_urlstring/null完成后为短期 COS 签名地址,或本地结果相对路径
created_at 等number/nullUnix 时间戳,单位秒,可能带小数

任务状态

queued排队中

acquiring_account选择可用账号

refreshing_token校验或刷新 Token

uploading上传源视频

transcribing转码与语音识别

rendering套用模板并导出

downloading下载上游成片

publishing回传到私有腾讯云 COS

retrying服务恢复处理中

completed成功终态

failed失败终态,可重试

cancelled取消终态

错误处理

状态码含义建议
400幂等键、模板或远程 URL 不合法修正请求后再提交
401API Key 缺失或无效检查服务端密钥配置
404任务或结果不存在核对 ID;结果可能已过保留期
409任务状态不允许操作先查询最新状态
413 / 415文件过大 / 格式不支持压缩或转换视频
422字段类型、长度或范围错误按响应中的字段位置修正
502服务端远程取件失败检查源地址时效、可访问性和白名单
503 / 504开拍上游服务临时繁忙或网关超时保留 job_id,稍后限次重试;不要无限自动重试,避免重复消耗额度
任务错误含 10103上游认为模板、素材或参数不兼容不要盲目重试;保留任务 ID 和素材信息,联系接口方排查
{"detail":"错误说明"}

当前没有稳定的业务错误码。调用方应先按 HTTP 状态码处理,不要长期依赖中文 detail 文案。

Node.js 接入示例

const baseUrl = process.env.KAIPAI_BASE_URL;
const apiKey = process.env.KAIPAI_API_KEY;

const response = await fetch(`${baseUrl}/api/v1/jobs/from-url`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": apiKey,
    "Idempotency-Key": `work:${workId}:advanced_red:v1`,
  },
  body: JSON.stringify({
    video_url: sourceUrl,
    file_name: "input.mp4",
    template: "advanced_red",
    title: "产品介绍",
    script,
  }),
});
if (!response.ok) throw new Error(await response.text());
const job = await response.json();

安全与保留策略

  • 业务 API Key 只存放在可信服务端,通过环境变量注入。
  • 管理后台可随时查看新生成或已重置的 API Key;服务端使用部署主密钥加密保存可解密副本,查看响应禁止缓存。
  • 远程取件地址必须使用有效期足够的 HTTPS 地址,并符合服务端允许域名。
  • 成片存储在私有腾讯云 COS;生产对象当前按 7 天保留策略清理,签名 URL 默认约 1 小时有效。
  • 不要记录 API Key、上游账号 Token、COS 密钥或完整签名 URL。
  • 管理接口不属于公共接入契约,公网由独立认证和 Nginx 路径规则保护。