视频生成 API · 租户接入文档

版本 v4 · 2026-08-27 · 影枢 YingShu 视频生成平台(变更记录见 §12)

对外接口以火山方舟官方接口兼容为准。 如果你已经接过火山方舟视频生成,迁移到本平台只需要改两处:域名 和 凭证,请求体与响应体字段一律不变;素材库另提供与火山官方 SDK 兼容的签名入口(§9)。


1. 快速开始

三步跑通:

# 1. 确认令牌可用(列出你有权限的模型)
curl https://api.xmjiaqu.com/v1/models \
  -H "Authorization: Bearer sk-your-key-here"

# 2. 创建视频任务
curl -X POST https://api.xmjiaqu.com/api/v3/contents/generations/tasks \
  -H "Authorization: Bearer sk-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "doubao-seedance-2-0-260128",
        "content": [{"type": "text", "text": "一只猫在草地上奔跑"}],
        "resolution": "720p",
        "duration": 5
      }'
# → {"id":"cgt-20260827103000-a1b2c"}

# 3. 轮询直到终态
curl https://api.xmjiaqu.com/api/v3/contents/generations/tasks/cgt-20260827103000-a1b2c \
  -H "Authorization: Bearer sk-your-key-here"

2. 认证

所有数据面接口使用 Bearer Token:

Authorization: Bearer sk-xxxxxxxxxxxx

认证失败

HTTP code 含义
401 unauthorized 缺少或非法的 Authorization(未以 Bearer sk- 开头)
401 unauthorized 无效令牌 / 令牌已禁用 / 令牌已过期
403 forbidden IP 不在白名单
403 forbidden 租户不可用(已停用)

3. 视频生成

3.1 创建任务

POST /api/v3/contents/generations/tasks

请求头

头 必填 说明
Authorization 是 Bearer sk-xxx
Content-Type 是 application/json
Idempotency-Key 否 幂等键,见 §3.2

请求体(与火山方舟原生字段同构)

字段 类型 必填 说明
model string 是 模型 ID,取值见 GET /v1/models,规格支持见 §3.8
content array 是 内容数组:text / image_url / video_url / audio_url,可配 role(first_frame / last_frame / reference_image / reference_video / reference_audio)
resolution string 否 480p / 720p / 1080p,默认 720p;各模型支持范围见 §3.8
duration int 否 秒,4–15(Seedance 2.5 为 4–30),或 -1 表示由模型决定;默认 5
ratio string 否 16:9 / 4:3 / 1:1 / 3:4 / 9:16 / 21:9 / adaptive
seed int 否 随机种子,固定可复现,默认 -1
generate_audio bool 否 是否生成音频
watermark bool 否 是否带 AI 水印
return_last_frame bool 否 成功后是否返回尾帧图 content.last_frame_url(引用了角色的任务建议开启,便于续期,见 §8.3)
execution_expires_after int 否 任务超时秒数,默认 172800,范围 3600–259200
tools array 否 模型工具,如 [{"type":"web_search"}]
callback_url string 否 本次任务专用回调地址,优先级高于租户级 Webhook

响应 200

{"id": "cgt-20260827103000-a1b2c"}

任务 ID 格式与火山同构:cgt-yyyymmddHHmmss-xxxxx(2026-08-27 前创建的历史任务为 task_ + 24 位十六进制,按原 ID 继续可查)。

注意:创建接口只返回 ID,不返回状态。请用 §3.3 查询,或配置 Webhook(§5)。

错误

HTTP code 触发条件
400 InvalidParameter 请求体不是合法 JSON;duration 越界;模型不支持所选分辨率;素材未就绪;素材未通过校验(附具体原因,如宽高比须在 0.4–2.5、高度 300–6000px)
400 火山原始错误码 上游明确拒绝时透传真实错误码,如 InputImageSensitiveContentDetected.PrivacyInformation(输入含真人人脸)——可直接按官方错误码文档分支处理
403 AccessDenied 无该模型权限(模型不在租户或令牌白名单内)
403 QuotaExceeded 额度不足 / 该模型 token 配额不足(按计费模式,见 §7)
404 NotFound 引用的 asset:// 素材/角色不存在或不属于你
429 Throttling 并发已达上限 / 排队队列已满,见 §4
502 UpstreamError 服务线路异常,附上游原始原因(不含线路标识),可退避重试
503 ServiceUnavailable 服务线路暂不可用,请联系平台

3.2 幂等

带 Idempotency-Key 头时,同一租户下相同键的重复请求不会创建新任务,直接返回首次创建的任务 ID:

curl -X POST .../tasks -H 'Idempotency-Key: order-8837' ...
# → {"id":"cgt-20260827103000-a1b2c"}    第一次:创建
# → {"id":"cgt-20260827103000-a1b2c"}    重试:返回同一个,不重复扣费

幂等键建议用你自己的业务单号。键永久有效,不设过期。

幂等只匹配键,不校验请求体。同键不同参数仍返回首次的任务。

3.3 查询任务

GET /api/v3/contents/generations/tasks/{id}

进行中

{
  "id": "cgt-20260827103000-a1b2c",
  "model": "doubao-seedance-2-0-260128",
  "status": "running",
  "resolution": "720p",
  "duration": 5,
  "error": null,
  "created_at": 1786886334,
  "updated_at": 1786886391
}

成功

{
  "id": "cgt-20260827103000-a1b2c",
  "model": "doubao-seedance-2-0-260128",
  "status": "succeeded",
  "resolution": "720p",
  "duration": 5,
  "error": null,
  "content": {
    "video_url": "https://….mp4?…(约 24 小时有效,立即转存,见 §6)",
    "last_frame_url": "https://….png?…"
  },
  "usage": {"completion_tokens": 103819, "total_tokens": 103819},
  "created_at": 1786886334,
  "updated_at": 1786886512
}

失败

{
  "id": "cgt-20260827103000-a1b2c",
  "status": "failed",
  "error": {"code": "InvalidParameter", "message": "..."},
  "created_at": 1786886334,
  "updated_at": 1786886334
}

3.4 状态机

status 终态 含义
queued 已受理:本地排队中或已提交待调度
running 生成中
succeeded ✓ 成功,content.video_url 可下载(24h 时效,见 §6)
failed ✓ 失败,见 error
cancelled ✓ 已取消
expired ✓ 排队/执行超时(排队超时 error.code = QueueTimeout)

轮询建议:创建后 5 秒开始首次查询,之后每 3–5 秒一次。更推荐用 Webhook(§5)替代轮询。

3.5 取消任务

POST /api/v3/contents/generations/tasks/{id}/cancel
{"id": "cgt-20260827103000-a1b2c", "status": "cancelled"}

限制:仅 queued 且尚未提交执行的任务可取消,否则返回:

{"error": {"code": "InvalidState", "message": "仅本地排队中的任务可取消"}}

取消后预扣额度全额释放。

3.6 任务列表

GET /api/v3/contents/generations/tasks?status=succeeded
{"items": [ { /* 同 §3.3 单任务结构 */ } ]}

3.7 模型列表

GET /v1/models
{
  "object": "list",
  "data": [
    {"id": "doubao-seedance-2-5-260628", "object": "model"},
    {"id": "doubao-seedance-2-0-260128", "object": "model"},
    {"id": "doubao-seedance-2-0-fast-260128", "object": "model"},
    {"id": "doubao-seedance-2-0-mini-260615", "object": "model"},
    {"id": "kling-v2-5-turbo", "object": "model", "output": "video", "vendor": "KwaiVGI"}
  ]
}

只返回你有权限且平台已开通的模型。

3.8 模型与规格支持

模型 分辨率 时长 特点
doubao-seedance-2-5-260628 480p / 720p / 1080p 4–30s 或 -1 新一代旗舰;支持最长 30 秒与多模态参考素材
doubao-seedance-2-0-260128 480p / 720p / 1080p / 4k 4–15s 或 -1 标准版;全系唯一支持 4K 的档
doubao-seedance-2-0-fast-260128 480p / 720p 4–15s 或 -1 快速版,出片更快
doubao-seedance-2-0-mini-260615 480p / 720p 4–15s 或 -1 轻量版,成本最低

传入模型不支持的分辨率会返回 400。

Seedance 2.5 的参考素材上限:视频 ≤30 个、图片 ≤10、音频 ≤10,单任务合计 ≤50 个。

4K 档说明:计费量约为 1080p 的 4 倍(4 秒 ≈ 77.76 万 tokens),但 4K 档 token 单价较低,实际费用约为 1080p 的 2 倍;单价见控制台「费用中心」。

3.9 独有模型(扩展模型库)

除 Seedance 系列外,平台还提供其他厂商的视频模型(如可灵 Kling 等),开通后会出现在你的 GET /v1/models 列表中,调用方式与 Seedance 完全一致(同一个创建/查询接口、同样的 content 结构与 --resolution/--duration 参数)。

与 Seedance 的差异:

需要开通某个独有模型请联系商务。


4. 并发与限流

429 响应

{"error": {"code": "Throttling", "message": "并发已达上限,请稍后重试"}}

拒绝模式下带 Retry-After: 5 响应头。

客户端建议:收到 429 按指数退避重试(5s / 10s / 20s / 40s),配合 Idempotency-Key 保证重试不重复扣费。


5. Webhook 回调

配置方式二选一:

任务进入终态时推送。

请求

POST <你的 URL>
Content-Type: application/json
X-Relay-Timestamp: 1786886512
X-Relay-Signature: 3f2a9c...

请求体与 §3.3 查询响应完全一致。

验签

X-Relay-Signature = hex(HMAC-SHA256(secret, timestamp + "." + rawBody))

Python 示例:

import hmac, hashlib, time

def verify(secret: str, ts: str, raw_body: bytes, sig: str) -> bool:
    if abs(time.time() - int(ts)) > 300:      # 拒绝 5 分钟外的重放
        return False
    mac = hmac.new(secret.encode(),
                   (ts + ".").encode() + raw_body,
                   hashlib.sha256).hexdigest()
    return hmac.compare_digest(mac, sig)

必须用原始字节计算,不要先反序列化再重新序列化 JSON。

重试:非 2xx 响应会重投,总投递次数上限 5 次(首投 + 4 次重试),退避 20s / 40s / 80s / 160s。5 次全失败标记为 failed,可在控制台「Webhook」手动重推。

你的接口要求:快速返回 2xx(15 秒超时),业务处理异步化;按 id 做幂等(同一任务可能收到多次)。

强烈建议:在成功回调里立刻触发你的视频转存流程——§6 的 24 小时时效从任务成功即开始计算。


6. 视频文件(⚠️ 24 小时时效,务必及时转存)

成功任务的 content.video_url / last_frame_url 是模型服务方的临时签名地址,约 24 小时后失效。

收到 succeeded 后请立即下载转存到你自己的存储(对象存储/CDN)。平台不保存生成产物, 24 小时后该任务的视频将无法再获取(任务记录与计费信息仍可查)。

如你的业务需要平台代管生成产物(平台侧转存、30 天持久地址),可联系平台按租户开通「转存模式」。


7. 计费

7.1 计费模式

按商务约定二选一,可在控制台「费用中心」查看你的模式与余量:

按额度(默认):平台分配余额(元),任务按 单价 × 计费量 扣费。 - 单价维度:模型 × 场景 × 分辨率;content 中含 video_url 的请求按视频参考场景计价(单价低于纯生成,但 token 总量更大)。 - 你的专属价格表见控制台「费用中心」(单价单位:元/百万 tokens,与火山官方报价同口径)。 - 单价在创建任务时快照进任务,之后平台调价不影响已创建的任务。

按模型 Token 池:按模型分配 token 配额(如 "2.0 的 100 万 tokens"),任务直接从对应模型的池子扣计费量 tokens,各模型独立计量、互不挪用,不涉及金额换算。控制台「费用中心」可查各池余量、Token 流水,并按模型提交配额申请。

两种模式共同规则: - 创建任务时按预估冻结,终态后按实际计费量结算并释放差额。 - failed / cancelled / expired 全额释放,不计费。 - 额度/配额不足时创建任务返回 403 QuotaExceeded,可在控制台提交调额申请。

7.2 计费量口径

usage.total_tokens 即计费量,与账单严格一致:

计费量以模型实际返回用量为准(usage.total_tokens 即账单量)。下表为各档的参考估算(实际生产会有小幅偏差),用于预估成本与核对量级:

计费 tokens = 编码宽 × 编码高 × (24 × 输出秒数 + 1) ÷ 1024
分辨率 编码尺寸(2.0 系) 编码尺寸(2.5) 5 秒任务约(2.0 / 2.5)
480p 864×496 854×480 5.07 万 / 4.85 万
720p 1280×720 1280×720 10.89 万
1080p 1920×1080 1920×1080 24.50 万
4k(仅 2.0 标准版) 3840×2160 — 97.2 万

估算公式:宽 × 高 × (24 × 秒 + 1) ÷ 1024(4K 档无 +1 常数);Seedance 2.5 的编码尺寸为标准像素。

视频参考任务(content 含 video_url)按模型实际处理量计费:输入视频时长同样消耗 tokens,且存在最低用量,以任务成功后返回的 usage.total_tokens 为准。

素材与角色接口均不消耗视频额度。

独有模型任务(见 3.8/3.9)不按 token 计费:按「分辨率 × 时长」整单计价,创建时冻结、成功后按实际出片规格结算,失败全额释放;任务返回中无 usage 字段。


8. 素材库、真人认证与角色工坊(可选)

三种"把内容带进生成"的方式,按需选用:

你有什么 用哪个 引用方式
商品图 / 场景图 / 音视频等普通参考素材 §8.1 素材库 asset://{asset_id}
特定真人本人形象(已获本人授权) §8.2 真人认证 → 人像素材 asset://{asset_id}
需要"真人感角色"但不指定具体人物 §8.3 角色工坊(AI 角色) asset://{char_id}

所有资源按租户隔离(跨租户访问一律 404)。

8.1 素材库(平台托管)

素材由平台统一托管:上传即返回素材 ID(即时可用),平台在生成时自动把素材分发到执行线路——你无需关心素材存在哪条线路,服务线路故障或调整也不影响你的素材与引用。

POST   /api/seedance/proxy/assets/groups        创建素材组(即时)
GET    /api/seedance/proxy/assets/groups        素材组列表
GET    /api/seedance/proxy/assets/groups/{id}   素材组详情
PUT    /api/seedance/proxy/assets/groups/{id}   更新
DELETE /api/seedance/proxy/assets/groups/{id}   删除(组内须无素材)

POST   /api/seedance/proxy/assets               创建素材(需先有素材组)
GET    /api/seedance/proxy/assets               素材列表(?GroupId=)
GET    /api/seedance/proxy/assets/{id}          素材详情(含可下载的 URL)
PUT    /api/seedance/proxy/assets/{id}          更新
DELETE /api/seedance/proxy/assets/{id}          删除

鉴权同 §2(Bearer)。请求体与响应体与火山官方素材接口同构(PascalCase 字段,Result 包裹):资源 ID 形如 asset-yyyymmddHHmmss-xxxxx / group-yyyymmddHHmmss-xxxxx,CreateTime 为东八区 RFC3339 时间字符串(如 2026-08-26T18:00:00+08:00)。

关键字段

接口 字段 说明
创建素材组 Name / Description 直接创建的组均为普通素材组(AIGC);真人人像组由认证流程产生(§8.2)
创建素材 GroupId / URL / AssetType / Name URL 须为公网可直接下载的 HTTPS 地址,平台会立即取回托管;AssetType:Image / Video / Audio
素材详情 Status / URL Active 即可引用;URL 为平台签发的下载地址(与火山标准字段同名),过期随时重新查询获取。旧字段 AssetUrl 同值保留兼容,建议尽快切换到 URL,后续版本将移除

素材引用:在视频任务 content 对应媒体对象的 url 字段填 asset://{asset_id}。

8.2 真人认证(使用特定真人形象)

官方合规要求:含真人人脸的图/视频不能直接作为输入(会被 InputImageSensitiveContentDetected.PrivacyInformation 拦截),必须先经本人活体认证授权:

POST   /api/seedance/face-verifications         发起真人认证
GET    /api/seedance/face-verifications/{id}    认证结果

流程:

  1. POST /api/seedance/face-verifications(body 可为空,部分线路支持 return_url)→ 返回 verification_id、h5_url,以及 expires_in/expires_at(H5 会话时效,通常很短,拿到后立即引导用户打开)
  2. 将 h5_url 交给被授权的真人本人在手机浏览器打开,按页面提示完成活体认证(火山官方认证页;受光线/角度影响有概率不通过,可重试)
  3. 轮询 GET /api/seedance/face-verifications/{id}:waiting_user = 未完成(若响应带 note 提示会话过期,重新从第 1 步创建);verified = 成功,取得 group_id(真人人像组);failed/expired = 需重新发起
  4. 向该 group_id 上传该本人的图片/视频/音频(同 §8.1 素材接口;上游会做人脸一致性校验,建议清晰正面照,视频逐秒抽帧全部通过才入库),素材 Active 后以 asset://{asset_id} 引用
  5. 同一人像组支持同一人的多套妆造素材,认证一次即可;不同人物请分别认证、分组

注意:真人素材与认证线路绑定(授权按线路账号成立),引用真人素材的任务固定在该线路执行——这是 §8.1「素材不锁线路」的唯一例外。

若返回 501 console_flow_required:该线路的真人认证走线下/控制台流程,请联系平台切换线路或代办授权。

8.3 角色工坊(AI 角色与定妆照)

如果你只需要「神似参考图的真人感角色」而非特定真人本人,用角色工坊——一次创建,反复引用,不触发真人审核拦截:

POST   /api/seedance/characters              创建角色 {name, image_url | prompt} → 返回候选(draft)
GET    /api/seedance/characters              角色列表
GET    /api/seedance/characters/{id}         角色详情(draft 含候选列表)
POST   /api/seedance/characters/{id}/select  选定候选 {index} ← 定妆照由你亲自选,平台不代选
POST   /api/seedance/characters/{id}/reroll  重绘一批候选 {prompt?}
POST   /api/seedance/characters/{id}/renew   续期 {task_id}
DELETE /api/seedance/characters/{id}

工作原理:你传一张参考图(或直接写文字描述)→ 平台用视觉模型生成外貌描述 → 以可信文生图并行产出多张候选定妆照(有参考图时附相似度评分供参考)→ 由你选定一张作为角色的唯一定妆照。定妆照是平台侧的可信模型产物,作为生成输入不会触发真人拦截——角色的脸由定妆照锚定,反复引用保持一致。选定前角色为 draft 状态,不可引用(引用返回 400 提示)。

创建(约 90 秒返回候选):

curl -X POST https://api.xmjiaqu.com/api/seedance/characters \
  -H "Authorization: Bearer sk-xxx" -H "Content-Type: application/json" \
  -d '{"name": "清雅", "image_url": "https://your.cdn/face.jpg"}'
{
  "character": {"id": "char-94dc63ba617b79100c2c", "name": "清雅", "status": "draft"},
  "candidates": [
    {"index": 0, "score": 72, "preview_url": "https://…(候选预览,24h 签名)"},
    {"index": 2, "score": 76, "preview_url": "https://…"}
  ],
  "deduplicated": false
}

选定(选中的成为唯一定妆照,其余候选删除;角色转 active 后即可引用):

curl -X POST https://api.xmjiaqu.com/api/seedance/characters/char-94dc63ba617b79100c2c/select \
  -H "Authorization: Bearer sk-xxx" -H "Content-Type: application/json" \
  -d '{"index": 2}'

评分是结构相似度参考值(骨相/眉眼加权),最终以你的眼睛为准;控制台「我的角色」提供可视化选片。

引用生成:content 媒体对象的 url 填 asset://char-…,平台自动注入定妆照并调度到正确线路。提示词中仍用「图片N」指代(与官方素材规则一致,不能写角色 ID):

{
  "model": "doubao-seedance-2-0-260128",
  "return_last_frame": true,
  "content": [
    {"type": "text", "text": "图片1中的女子在书店翻开一本书,抬头对镜头微笑,写实风格,人脸始终清晰稳定"},
    {"type": "image_url", "image_url": {"url": "asset://char-526fc902e57b4075c780"}, "role": "first_frame"}
  ]
}

信任窗口与续期:

边界说明(请按此口径设定终端用户预期):角色是"神似参考图的虚构角色",不是照片中人物本人——文字描述能锁住发型、脸型、气质、妆容,但不承载生物特征,这正是它合规的原因。需要特定真人本人形象,走 §8.2 真人认证。

控制台「我的角色」页提供同等功能的可视化操作(创建 / 预览 / 重绘 / 删除)。


9. 火山方舟原生兼容入口(可选)

如果你已有基于火山官方 SDK 的素材库代码,可直接换 Endpoint 接入,不改签名逻辑:

POST https://api.xmjiaqu.com/?Action={Action}&Version=2024-01-01
参数 值
Service ark
Region cn-beijing
Version 2024-01-01
签名算法 火山签名 V4(HMAC-SHA256)

AK/SK 在控制台「设置」创建。支持的 Action:

CreateAssetGroup ListAssetGroups GetAssetGroup UpdateAssetGroup DeleteAssetGroup CreateAsset ListAssets GetAsset UpdateAsset DeleteAsset

响应用 ResponseMetadata / Result 包裹,与火山官方格式一致;与 §8.1 REST 接口操作同一套平台素材库,可混用。ProjectName 等项目/凭证类字段由平台自动处理,不需要也不应传入。

视频生成任务与角色工坊请走 Bearer 接口(§3 / §8.3),火山签名入口目前覆盖素材库。


10. 错误格式总表

所有数据面错误统一格式:

{"error": {"code": "错误码", "message": "错误描述"}}
code HTTP 处理建议
unauthorized 401 检查令牌,勿重试
forbidden 403 检查 IP 白名单 / 租户状态,勿重试
AccessDenied 403 无模型权限,联系平台
QuotaExceeded 403 额度/token 配额不足,调额后重试
InvalidParameter 400 修正参数,勿原样重试
InputImageSensitiveContentDetected.PrivacyInformation 400 输入含真人人脸被审核拦截:换素材,或走 §8.2 真人认证 / §8.3 角色工坊
其他火山原始错误码 400 上游明确拒绝时透传,按官方错误码文档处理
InvalidState 400 任务状态不允许该操作
NotFound 404 检查 ID 归属
Throttling 429 指数退避重试
UpstreamError 502 服务线路异常,可退避重试
ServiceUnavailable 503 服务线路暂不可用,联系平台
InternalError 500 平台异常,可退避重试;持续出现请联系平台
QueueTimeout — 出现在 expired 任务的 error 字段中
console_flow_required 501 当前线路的真人认证需线下办理,联系平台
not_supported_on_channel 501 当前服务线路不支持该能力,联系平台
invalid_parameter / not_found / group_not_empty 等小写码 4xx 素材接口(§8.1)错误码风格,语义同字面

11. 接入 Checklist


12. 变更记录

版本 日期 变更
v4 2026-08-27 新增 Seedance 2.5:480p/720p/1080p 全档开放、时长 4–30 秒、参考素材上限(视频≤30/图≤10/音频≤10/合计≤50,§3.8),计量编码尺寸独立(§7.2);新增独有模型章节(Kling 等按次计价,§3.9);任务 ID 与火山同构 cgt-yyyymmddHHmmss-xxxxx(历史 task_ ID 继续可查,§3.1);素材接口对齐火山:地址字段 AssetUrl → URL(旧字段同值保留、将退役)、CreateTime 改东八区 RFC3339、资源 ID 改 asset-/group-yyyymmddHHmmss-xxxxx 格式(§8.1);火山文本命令兼容(--resolution 等,与顶层字段并存时以文本命令为准,§3.1);Authorization 头宽容解析(scheme 大小写/多余空格);模型列表示例含独有模型扩展字段(§3.7)
v3 2026-08-22 生成产物改为透传:video_url 为 24 小时临时地址,平台不转存,须及时搬迁(§6);素材库升级为平台托管:上传即时可用、自动分发线路、素材不再锁定线路(§8.1);新增角色工坊:参考图→定妆照→asset://char-… 引用,30 天信任窗+零成本续期+尾帧平台留存(§8.3);真人认证细化(H5 时效/状态语义/501 含义,§8.2);上游明确拒绝时透传火山原始错误码(如真人拦截);§8 重组为三方式选型表;错误码总表与 Checklist 更新
v2 2026-08-21 计费量口径说明(平台统一公式,跨线路一致);新增按模型 Token 池计费模式;模型规格支持表;视频参考场景单价方向修正;素材接口字段表与真人认证流程;补充 503/501 错误码;明确 safety_identifier 由平台注入
v1 2026-08-16 初版