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

版本 v5 · 2026-10-09 · Somobai 视频生成平台(变更记录见 §12)

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


1. 快速开始

三步跑通:

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

# 2. 创建视频任务
curl -X POST https://api.somobai.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.somobai.com/api/v3/contents/generations/tasks/cgt-20260827103000-a1b2c \
  -H "Authorization: Bearer sk-your-key-here"

2. 认证

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

Authorization: Bearer sk-xxxxxxxxxxxx

IP 白名单(必填)

认证失败

HTTP code 含义
401 unauthorized 缺少或非法的 Authorization(未以 Bearer sk- 开头)
401 unauthorized 无效令牌 / 令牌已禁用 / 令牌已过期
403 forbidden 来源 IP 不在账户 API 调用白名单内 / 账户未配置白名单
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 / 4k,默认 720p;各模型支持范围见 §3.8
duration int 否 秒,默认 5。Seedance 2.0 系列须为 4–15 的正整数;Seedance 2.5 为 4–30,或 -1 表示由模型决定
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(便于以尾帧作首帧续拍)
execution_expires_after int 否 任务超时秒数,默认 172800,范围 3600–259200
tools array 否 模型工具,如 [{"type":"web_search"}]
callback_url string 否 本次任务专用回调地址,优先级高于租户级 Webhook

Seedance 2.5 扩展字段(原样透传,以模型实际支持为准)

字段 类型 说明
omni_reference_task_type string 全能参考任务类型:auto / reference / edit / extend
output_format string 输出封装格式:mp4 / mov
bitrate_mode string 码率模式(注意为 snake_case 写法),取值以模型支持为准

响应 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 越界;模型不支持所选分辨率;素材未就绪
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"}
  ]
}

只返回你有权限且平台已开通的模型。可用模型以此接口返回为准,下文 §3.8 为参考。

3.8 模型与规格支持

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

传入模型不支持的分辨率会返回 400;duration: -1 仅 Seedance 2.5 支持。权威模型列表以 GET /v1/models(§3.7)为准。

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

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


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,与火山官方报价同口径)。 - 单价在创建任务时快照进任务,之后平台调价不影响已创建的任务。 - 计费币种为人民币(CNY)。

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

两种模式共同规则: - 创建任务时按预估冻结,终态后按实际计费量结算并释放差额(duration: -1 的任务按该模型最长时长预估冻结)。 - 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.06 万 / 4.84 万
720p 1248×704 1280×720 10.38 万 / 10.89 万
1080p(仅 2.0 标准版) 1920×1088 — 24.68 万
4k(仅 2.0 标准版) 3840×2160 — 97.2 万

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

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

素材与真人认证接口均不消耗视频额度。


8. 素材库与真人认证(可选)

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

你有什么 用哪个 引用方式
商品图 / 场景图 / 音视频等普通参考素材 §8.1 素材库 asset://{asset_id}
特定真人本人形象(已获本人授权) §8.2 真人认证 → 人像素材 asset://{asset_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「素材不锁线路」的唯一例外。


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

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

POST https://api.somobai.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.2),火山签名入口目前覆盖素材库。


10. 错误格式总表

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

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

11. 接入 Checklist


12. 变更记录

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