文档目录
首页 / 开发文档 / Seedance 视频生成 API
视频生成 · API 文档

Seedance 视频生成 API

Seedance 视频生成接入指南:文生视频、首帧与首尾帧、图片/视频/音频参考,包含素材上传、异步任务、幂等重试与计费规则。

接入准备

更新于 2026-09-28。请先登录并创建归属于 Seedance 分组的 dacall.AI API Key(厂商选择 OpenAI);账户余额与 Key 可用额度必须足够。其他模型分组的 Key 不代表拥有视频权限。

项目值
服务地址https://api.dacall.ai
鉴权Authorization: Bearer <DACALL_API_KEY>
请求格式任务创建使用 application/json;素材上传使用 multipart/form-data。
创建任务POST /api/v3/contents/generations/tasks
查询任务GET /api/v3/contents/generations/tasks/{task_id}
能力查询GET /api/v3/contents/generations/capabilities?model=...
素材上传POST /api/v3/contents/generations/assets?model=...&kind=image|video|audio
  • B 方集成时,API Key 仅存放于服务端环境变量或密钥管理系统,勿硬编码进网页、App 包或公开仓库。个人可在本站 Seedance 工作台临时填入自己的 Key;工作台只在当前页面内存中保留 Key,刷新后需重新填写。
  • 以下均为示例数据与占位符;调用会产生实际费用。

在线工作台

无需编写代码,在工作台连接 Seedance 分组 Key 后,选择模型、生成模式、清晰度、时长、画幅与生成声音;使用素材时选择角色和文件并点击「上传素材」,确认预览后生成。点击生成会产生实际费用。

  • 支持文生、首帧、首尾帧和参考素材;可选组合由连接后的能力查询决定。切换 Key、型号或模式会清空未提交素材,需重新上传。
  • API Key 只保留在页面内存中,刷新后重新连接原 Key。「我的任务」是本机浏览器记录,不是账户云端历史;更换浏览器、域名或清除存储后,使用原 Key 和任务 ID 查询。
  • 任务记录含提示词、请求体、素材地址及短期凭证、任务 ID 和重试标识;导出文件请勿公开分享。
  • 停止查询或关闭页面不会取消生成;提交结果不明时使用「沿用原请求重试」。结果链接可能过期,请及时保存。

支持的模型与时长

以下是模型的总体参数范围,时长为整数秒;并非所有模式、清晰度、画幅和声音选项都可任意组合。提交前查询 capabilities,并匹配同一条完整能力记录。

model(区分大小写)durationresolution
SEEDANCE_2_04–15480p / 720p / 1080p / 4k
SEEDANCE_2_0_FAST4–15480p / 720p
SEEDANCE_2_0_MINI4–15480p / 720p
SEEDANCE_2_54–30480p / 720p / 1080p
  • 2.0 / Fast / Mini 支持的画幅范围为 16:9、9:16、1:1;2.5 另有 adaptive、4:3、3:4、21:9。生成声音使用布尔值 true/false,具体组合以能力接口为准。
  • 2.5 不支持单首帧;其首尾帧模式要求 ratio=adaptive。参考音频须搭配参考图片或视频,不能单独输入音频;首帧/首尾帧不能混用参考素材。
  • 暂未开放自动时长、回调、任务取消及账户云端任务列表接口。
  • 分辨率为档位名称;实际文件像素尺寸、帧数及播放时长以生成结果为准,不保证精确像素或毫秒对齐。

请求参数

任务 JSON 不超过 1 MiB;字段名区分大小写,不接受重复字段、未知字段或未定价组合。不要发送 seed、watermark、callback_url、input_type、duration_seconds、cost_credits 或 billable_seconds;输入模式和计费时长由服务端解析。

字段类型 / 必填说明
modelstring / 是使用上表模型 ID。
contentarray / 是恰好一个非空 text 对象,可追加媒体对象;字段结构与角色见下方。
content 中的 textstring / 是非空提示词,不得包含双连字符 --;使用独立字段设置时长、画幅与声音。
resolutionstring / 是对应模型支持的分辨率,4k 使用小写。
durationinteger / 是按模型填写 4–15 或 4–30。
ratiostring / 是按完整能力记录选择;2.5 首尾帧必须使用 adaptive。
generate_audioboolean / 是显式传 true 或 false,不能省略或传字符串;必须匹配当前能力。
Idempotency-Key请求头 / 是每个业务订单唯一,建议 UUID;最多 200 字节,重试保持相同。

先查询当前可用能力

同一条 capabilities 记录同时限定 input_type、resolution、ratio、generate_audio、min_duration 和 max_duration;不要把不同记录的字段拼成新组合。输入模式仅用于能力匹配,不作为创建任务的顶层字段。

  • 响应包含 model、capabilities、media_enabled、scope=retail_policy_intersection 和 verification=not_asserted。能力列表不是每种组合都已实测成功的承诺。
  • 媒体能力不可用或查询上游失败时,可能仅返回原有文生范围;请勿自行推断更多可用组合。
  • input_type 包括 text、first_frame、first_last_frame、reference_image、reference_image_audio、reference_video、reference_video_audio。
Bash / curl
curl --fail-with-body --silent --show-error \
  'https://api.dacall.ai/api/v3/contents/generations/capabilities?model=SEEDANCE_2_0_MINI' \
  -H "Authorization: Bearer $DACALL_API_KEY"

上传素材与有效期

每次上传一个本地文件,model 使用将要生成的型号,kind 为 image、video 或 audio。仅接受名为 file 的文件字段,不接受额外表单字段或任意 URL 抓取。不要手动设置 multipart boundary,交由 curl 生成。

素材格式与单文件上限数量与时长限制
图片JPEG / PNG / WebP,30 MiB参考图:2.0 系列最多 9 张,2.5 最多 30 张;首帧和尾帧各 1 张。
视频MP4 / MOV,50 MiB;参考素材至少 480p2.0 系列最多 3 段,单段 2–15 秒、合计 ≤15 秒;2.5 最多 10 段,单段 2–30 秒、合计 ≤30 秒。
音频MP3 / WAV,15 MiB2.0 系列最多 3 段,单段 2–15 秒、合计 ≤15 秒;2.5 最多 10 段,单段 2–30 秒、合计 ≤30 秒。视频与音频分别累计。
  • 成功返回 HTTP 200,字段包括 url、asset_token、expires_at(Unix 秒)、kind、mime_type、size_bytes;图片/视频含宽高,视频/音频含可信 duration_seconds。
  • 创建任务时原样使用返回的 URL 与 asset_token,必须与上传时同一 Key、分组和型号,不能更换 URL 或跨 Key 复用。素材约 50 分钟内有效,以 expires_at 为准;创建新任务时至少剩余 60 秒,过期请重新上传。
  • 图片/视频单边不超过 4096,像素总数不超过 4096×2160。真实格式与时长会被校验;上传成功不代表生成一定受理。
  • 参考素材数量是协议上限,仍需匹配当前能力。上传本身不产生视频生成费;同一 Key 请串行上传,遇到 429 按 Retry-After 重试。
Bash / curl
curl --fail-with-body --silent --show-error \
  'https://api.dacall.ai/api/v3/contents/generations/assets?model=SEEDANCE_2_0_MINI&kind=image' \
  -H "Authorization: Bearer $DACALL_API_KEY" \
  -F 'file=@./first-frame.png'

媒体对象与素材角色

content 保留一个文本对象,再按模式追加以下对象。URL 与凭证必须使用实际上传响应;下列为占位结构,不能直接用于生成。

typerole媒体字段
image_urlfirst_frame / last_frame / reference_imageimage_url: {url, asset_token}
video_urlreference_videovideo_url: {url, asset_token}
audio_urlreference_audioaudio_url: {url, asset_token}
  • 单首帧:1 个 first_frame;首尾帧:1 个 first_frame 加 1 个 last_frame,不能只传尾帧。
  • 参考素材使用 reference_image、reference_video、reference_audio;如需参考音频,必须同时提供参考图或视频。
  • 视频与音频的 duration_seconds 由上传探测确定,不要作为媒体对象字段传回,也不要自行声明计费时长。

首帧生成请求示例

先确认能力接口开放该组合,再用同一型号上传图片,将返回值填入下方 JSON 并保存为 task.json。向创建接口 POST,携带 Authorization、Content-Type: application/json 和本订单唯一的 Idempotency-Key。此操作会实际计费。

JSON · task.json
{
  "model": "SEEDANCE_2_0_MINI",
  "content": [
    {
      "type": "text",
      "text": "让画面中的橘色积木缓慢向右移动,保持主体形状,固定镜头。"
    },
    {
      "type": "image_url",
      "role": "first_frame",
      "image_url": {
        "url": "https://example.com/replace-with-upload-url.png",
        "asset_token": "REPLACE_WITH_UPLOAD_ASSET_TOKEN"
      }
    }
  ],
  "resolution": "480p",
  "duration": 4,
  "ratio": "16:9",
  "generate_audio": false
}

首尾帧与多媒体请求变体

以下为 content 中追加的对象示例。使用 2.5 首尾帧时上传两张图,角色分别是 first_frame / last_frame,并设置 ratio=adaptive;不要混入参考素材。参考视频和音频模式可按下面结构追加,全部素材必须按同一型号上传。

  • 参考音频输入不等于开启声音输出;若需要输出音轨,请选择能力允许的 generate_audio=true。
  • 多段参考视频先合计可信时长,再向上取整计费;不要对每段分别取整。
JSON · 参考视频与音频对象
[
  {
    "type": "video_url",
    "role": "reference_video",
    "video_url": {
      "url": "https://example.com/replace-with-video-url.mp4",
      "asset_token": "REPLACE_WITH_VIDEO_TOKEN"
    }
  },
  {
    "type": "audio_url",
    "role": "reference_audio",
    "audio_url": {
      "url": "https://example.com/replace-with-audio-url.mp3",
      "asset_token": "REPLACE_WITH_AUDIO_TOKEN"
    }
  }
]

创建文生任务与提交方式

先在服务端安全设置 DACALL_API_KEY 环境变量。为每个新订单生成并持久化一个 UUID,替换下面的 Idempotency-Key;本订单重试时沿用该值与原请求体。成功受理返回 HTTP 202,请立即持久化返回的 id。202 表示异步受理,不代表视频已经生成。 下例是纯文生请求;提交上述媒体 JSON 时使用相同接口和请求头,将 --data-binary 的值改为 @task.json。

Bash / curl
curl --fail-with-body --silent --show-error \
  'https://api.dacall.ai/api/v3/contents/generations/tasks' \
  -H "Authorization: Bearer $DACALL_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: 3c824da0-b527-4aa5-8b28-934890c6ff98' \
  --data-binary '{
  "model": "SEEDANCE_2_0",
  "content": [
    {
      "type": "text",
      "text": "清晨的海边,海浪轻拍沙滩,镜头缓慢向前推进,自然光,电影质感。"
    }
  ],
  "resolution": "480p",
  "duration": 5,
  "ratio": "16:9",
  "generate_audio": false
}'

创建响应示例

以下展示任务标识与状态字段,省略 pricing 等报价字段。实际响应中的金额采用 USD 十进制字符串;请读取 pricing.retail_usd 获取本任务锁定的应付金额,不要在客户端写死价格。

HTTP 202 · JSON
{
  "id": "dacall_vid_00000000-0000-4000-8000-000000000001",
  "model": "SEEDANCE_2_0",
  "status": "queued",
  "billing_status": "held"
}

查询任务

使用创建任务时的同一个 API Key 和返回的完整 id 查询,成功返回 HTTP 200。建议每 10 秒轮询一次,遇到限流遵循 Retry-After。客户端停止等待不会取消生成,稍后可继续查询。

  • 不要更换 Key 或把 Key 移出原分组来查询已有任务;任务访问校验用户、Key 和分组归属。
  • 已有任务不会因可用余额或 Key 额度耗尽而无法查询,但 Key 仍须有效且拥有原任务权限。
Bash / curl
TASK_ID='替换为创建响应的 id'
curl --fail-with-body --silent --show-error \
  "https://api.dacall.ai/api/v3/contents/generations/tasks/$TASK_ID" \
  -H "Authorization: Bearer $DACALL_API_KEY"

获取视频结果

status=succeeded 时读取 content.video_url。以下 URL 仅为示意,请使用实际返回值,并及时下载到自有存储;不要把结果 URL 当作永久存储地址,也不要向结果域名发送 dacall API Key。 示例省略 pricing 等报价字段,实际金额以任务响应为准。

HTTP 200 · JSON
{
  "id": "dacall_vid_00000000-0000-4000-8000-000000000001",
  "model": "SEEDANCE_2_0",
  "status": "succeeded",
  "billing_status": "settled",
  "content": {
    "video_url": "https://example.com/generated-video.mp4"
  }
}

任务与账单状态

字段值含义 / 处理
statusqueued排队,继续查询。
statussubmitting正在提交或确认受理,继续查询,勿创建重复订单。
statusrunning生成中,继续查询。
statussucceeded生成成功,读取 content.video_url。
statusfailed生成失败,检查 billing_status。
billing_statusheld费用已预扣 / 冻结,尚未最终结算。
billing_statussettled成功任务已结算,不会再重复扣同一笔费用。
billing_statusreleased失败任务的预扣费用已退回,Key 额度已释放。
  • 生成状态与账单状态分别读取;不要只凭 HTTP 200 判断生成成功。
  • 超时或暂时查不到结果不等于失败或退款。长时间停留在处理中,请携带任务 id 联系支持,保留原订单避免重复付费。

幂等与重试

  • 同一 Key、同一分组下,相同 Idempotency-Key 与相同请求重放返回原任务,正常返回 HTTP 202,不重复创建或收费。
  • 相同 Idempotency-Key 修改模型、提示词、时长等会返回 HTTP 409 idempotency_conflict。新业务订单才使用新的幂等键。
  • 创建请求断网、超时或返回 5xx 时,保留原幂等键和请求体重试;不要立即换键重新提交。已获得任务 id 后优先查询。
  • 已经受理的媒体任务重放必须保持原请求体(包括素材 URL/token)和幂等键;不要重新上传后替换原请求。已受理任务的重放不会因素材后来过期而变成新订单。
  • 查询的网络错误、429 和 5xx 可退避重试;建议 10、20、40、60 秒递增,遵循 Retry-After。身份、参数与权限错误先修正原因,勿无限重试。
  • DELETE 取消当前未开放,调用已有视频任务的取消接口返回 405。

计费说明

费用根据所用模型、清晰度、计费时长及当前账户适用的价格配置确定。任务创建时锁定报价,后续价格变更不追溯该任务。请以创建响应中的 pricing.retail_usd 和 billing_status 为准。

  • 创建时占用账户资金及 Key 额度;成功结算一次,确认失败后退回预扣款及额度。
  • 不按 Token 计费;查询和相同请求的幂等重放不会额外产生视频生成费。
  • 计费秒数 = 输出秒数 + ceil(全部参考视频可信时长之和);无参考视频时只计算输出秒数。
  • 例如,输出 4 秒,两个参考视频各 2.125 秒;先合计为 4.25 秒,再向上取整为 5 秒,最终按 9 秒计费。
  • 图片、参考音频、生成声音、画幅与上传本身不另收附加费。
  • pricing.retail_usd 为该任务锁定的应付金额;billing_status=released 时该任务最终收费为零。金额使用十进制处理,避免二进制浮点累计误差。

常见错误

鉴权和网关层可能返回其他错误。保留 HTTP 状态、响应体和 Request ID(如有);联系支持时提供发生时间、模型、任务 id 与错误信息,勿发送 API Key。

HTTP / code含义处理
400 / invalid_request_error缺失幂等键或请求无效检查请求头、JSON 与必填字段。
400 / unsupported_price_combination组合未开放、未知字段或提示词含 --查询并匹配完整能力记录,检查媒体结构、素材角色与模型限制。
401鉴权失败检查 Key 是否有效。
403 / insufficient_balance余额或 Key 额度不足补充余额或调整 Key 额度。
403 / permission_error分组权限不满足使用已开通 Seedance 的分组 Key。
403 / unsupported_quota_mode账户额度模式不兼容联系支持调整账户配置。
404 / not_found_error任务不存在或不属于当前调用方使用原 Key、原分组和完整任务 id。
409 / idempotency_conflict幂等键已被其他请求使用恢复原请求;新订单使用新键。
429触发限流按 Retry-After 退避,降低并发。
503 / feature_disabled新任务创建暂时暂停稍后重试,已有任务继续查询。
503 / api_error暂时不可用创建沿用原幂等键重试;查询退避重试。
400素材无效、过期或归属不符使用同一 Key、分组和型号上传;新任务使用有效素材,已受理任务沿用原请求重放。
400 / 413上传字段或文件体积不合要求只提交一个 file 字段,检查非空文件及类型大小上限。
415上传 Content-Type 不正确使用 multipart/form-data;不要上传 JSON 或手写 boundary。
4xx / 5xx · media_upload_error素材上传未被接受检查真实格式、大小、时长与型号限制,保留错误信息并按需联系支持。