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

版本 v3 · 2026-08-23 · 影枢 YingShu 视频生成平台

对外接口以火山方舟官方接口兼容为准。 如果你已经接过火山方舟视频生成,迁移到本平台只需要改两处:域名凭证,请求体与响应体字段一律不变;素材库另提供与火山官方 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":"task_db649a073372bb26cb1c700f"}

# 3. 轮询直到终态
curl https://api.xmjiaqu.com/api/v3/contents/generations/tasks/task_db649a073372bb26cb1c700f \
  -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,或 -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": "task_db649a073372bb26cb1c700f"}

任务 ID 格式为 task_ + 24 位十六进制。

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

错误

HTTP code 触发条件
400 InvalidParameter 请求体不是合法 JSON;duration 越界;模型不支持所选分辨率;素材未就绪
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":"task_abc"}    第一次:创建
# → {"id":"task_abc"}    重试:返回同一个,不重复扣费

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

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

3.3 查询任务

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

进行中

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

成功

{
  "id": "task_db649a073372bb26cb1c700f",
  "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": "task_db649a073372bb26cb1c700f",
  "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": "task_xxx", "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-0-260128", "object": "model"},
    {"id": "doubao-seedance-2-0-fast-260128", "object": "model"},
    {"id": "doubao-seedance-2-0-mini-260615", "object": "model"}
  ]
}

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

3.8 模型与规格支持

模型 分辨率 时长 特点
doubao-seedance-2-0-260128 480p / 720p / 1080p 4–15s 或 -1 标准版,质量最高
doubao-seedance-2-0-fast-260128 480p / 720p 4–15s 或 -1 快速版,出片更快
doubao-seedance-2-0-mini-260615 480p / 720p 4–15s 或 -1 轻量版,成本最低

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


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 即计费量,与账单严格一致:

纯生成任务(content 不含 video_url)按平台统一公式计算,与执行线路无关:

计费 tokens = 编码宽 × 编码高 × (24 × 输出秒数 + 1) ÷ 1024
分辨率 编码尺寸 参考:每秒约 5 秒任务约
480p 864×496 1.0 万 tokens 5.07 万
720p 1248×704 2.1 万 tokens 10.38 万
1080p 1920×1088 4.9 万 tokens 24.66 万

宽高比不影响计费(按分辨率档位统一计量)。

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

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


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}          素材详情(含可下载的 AssetUrl)
PUT    /api/seedance/proxy/assets/{id}          更新
DELETE /api/seedance/proxy/assets/{id}          删除

鉴权同 §2(Bearer)。请求体与响应体与火山官方素材接口同构(PascalCase 字段,Result 包裹)。

关键字段

接口 字段 说明
创建素材组 Name / Description 直接创建的组均为普通素材组(AIGC);真人人像组由认证流程产生(§8.2)
创建素材 GroupId / URL / AssetType / Name URL 须为公网可直接下载的 HTTPS 地址,平台会立即取回托管;AssetType:Image / Video / Audio
素材详情 Status / AssetUrl Active 即可引用;AssetUrl 为平台签发的下载地址,过期随时重新查询获取

素材引用:在视频任务 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_idh5_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 媒体对象的 urlasset://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. 变更记录

版本 日期 变更
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 初版