跳到主要内容

Seedance 2.0 视频生成 API

本文档说明如何通过 Mozia API 的统一视频接口调用 Seedance 2.0。接口采用异步任务模式:提交任务、轮询状态、下载结果。

接口总览​

方法路径作用
POST/v1/video/generations提交视频生成任务
GET/v1/video/generations/{task_id}查询任务状态、进度与结果
GET/v1/video/generations/{task_id}/content下载生成的视频

基础地址:https://mzsjai.com

所有请求都需要 API Key:

Authorization: Bearer <YOUR_API_KEY>

模型​

实际可用模型以账号调用 GET /v1/models 后返回的列表为准。

模型说明分辨率
doubao/seedance-2.0-proSeedance 2.0 通用 Pro 版最高 4K
doubao/seedance-2.0-fastSeedance 2.0 通用 Fast 版最高 720p
doubao/seedance-2.0-fast-480pSeedance 2.0 Fast 固定分辨率版480p
doubao/seedance-2.0-fast-720pSeedance 2.0 Fast 固定分辨率版720p
doubao/seedance-2.0-pro-480pSeedance 2.0 Pro 固定分辨率版480p
doubao/seedance-2.0-pro-720pSeedance 2.0 Pro 固定分辨率版720p
doubao/seedance-2.0-pro-1080pSeedance 2.0 Pro 固定分辨率版1080p
doubao/seedance-2.0-pro-4kSeedance 2.0 Pro 固定分辨率版4K

固定分辨率模型会在平台侧强制写入表中对应的分辨率。调用这些模型时可以省略 resolution;如果传入该字段,也不应依赖它切换到其他分辨率,需要其他清晰度时请更换模型 ID。

固定分辨率的 Fast 和 Pro 模型按 Token 用量计费,并区分无参考视频与含参考视频两种单价。请求的 content 中包含 video_url 且角色为 reference_video 时,使用含参考视频单价;参考图片和参考音频不会触发该档价格。最新价格以控制台模型目录为准。

简单的文生视频请求示例​

curl --fail-with-body \
-X POST 'https://mzsjai.com/v1/video/generations' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao/seedance-2.0-pro-1080p",
"content": [
{
"type": "text",
"text": "日落时分的海边,海浪轻拍沙滩,电影质感,镜头缓慢推进"
}
],
"duration": 5,
"resolution": "1080p",
"ratio": "16:9"
}'

提交任务​

POST https://mzsjai.com/v1/video/generations
Content-Type: application/json

请求参数​

参数类型必填默认值说明
modelstring是-模型 ID
contentarray推荐-提示词及带角色的图片、视频、音频素材
promptstring条件必填-顶层提示词;与 content 中的文本二选一
durationinteger否5视频时长(秒),通常支持 4~15 秒
resolutionstring否模型默认通用 Pro 支持 480p、720p、1080p 和 4k;通用 Fast 支持 480p 和 720p;固定分辨率模型会覆盖该字段
ratiostring否模型默认画面比例;也兼容 aspect_ratio 和旧字段 size
metadataobject否-平台扩展参数;可用字段以控制台说明为准

prompt 和 content 中至少要有一段非空文本。如果两者同时存在,顶层 prompt 优先。

content 格式​

文本项:

{
"type": "text",
"text": "日落时分的海边,镜头缓慢推进"
}

素材项:

{
"type": "image_url",
"role": "first_frame",
"image_url": {
"url": "https://example.com/start.jpg"
}
}

支持的类型和角色:

typerole含义
image_urlfirst_frame视频首帧
image_urllast_frame视频尾帧
image_urlreference_image参考图片
video_urlreference_video参考视频
audio_urlreference_audio参考音频

角色校验规则:

  • last_frame 不能单独使用,必须同时提供 first_frame。
  • 首帧/尾帧不能与 reference_image、reference_video 或 reference_audio 混用。
  • first_frame 和 last_frame 各最多一个。
  • content 中只能有一段有效文本;如果使用顶层 prompt,它会覆盖 content 文本。
  • 素材 URL 必须能被平台访问。推荐使用公网 HTTPS URL。

示例:指定首帧​

curl --fail-with-body \
-X POST 'https://mzsjai.com/v1/video/generations' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao/seedance-2.0-pro",
"content": [
{
"type": "text",
"text": "人物自然转身并向镜头微笑,动作连贯"
},
{
"type": "image_url",
"role": "first_frame",
"image_url": {
"url": "https://example.com/start.jpg"
}
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9"
}'

示例:指定首帧和尾帧​

curl --fail-with-body \
-X POST 'https://mzsjai.com/v1/video/generations' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao/seedance-2.0-pro",
"content": [
{
"type": "text",
"text": "镜头从室外平滑推进室内,保持主体与场景连续"
},
{
"type": "image_url",
"role": "first_frame",
"image_url": {
"url": "https://example.com/start.jpg"
}
},
{
"type": "image_url",
"role": "last_frame",
"image_url": {
"url": "https://example.com/end.jpg"
}
}
],
"duration": 8,
"resolution": "720p",
"ratio": "16:9"
}'

调用方只需要通过 role 指定首帧和尾帧,无需在提示词中增加额外占位符。

示例:参考图生成​

curl --fail-with-body \
-X POST 'https://mzsjai.com/v1/video/generations' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao/seedance-2.0-fast-720p",
"content": [
{
"type": "text",
"text": "保持人物外观一致,在城市街道自然行走"
},
{
"type": "image_url",
"role": "reference_image",
"image_url": {
"url": "https://example.com/person.jpg"
}
}
],
"duration": 5,
"ratio": "9:16"
}'

示例:参考视频生成​

curl --fail-with-body \
-X POST 'https://mzsjai.com/v1/video/generations' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao/seedance-2.0-pro",
"content": [
{
"type": "text",
"text": "参考视频中的镜头运动与节奏,生成一段海边广告片"
},
{
"type": "video_url",
"role": "reference_video",
"video_url": {
"url": "https://example.com/reference.mp4"
}
}
],
"duration": 5,
"ratio": "16:9"
}'

接口也支持 reference_audio。具体素材数量、文件大小、格式和时长限制以当前模型能力为准;不支持的组合会返回请求错误。

旧字段兼容​

仍兼容顶层 prompt、image、images、size、aspect_ratio 和 seconds,但新接入应使用 content、ratio 和 duration。

旧 images 数组没有角色信息,不能可靠表达哪张图是首帧、尾帧或参考图。需要明确角色时必须使用 content[].role。

提交成功响应​

HTTP 状态码:200

{
"id": "task_a1b2c3d4",
"task_id": "task_a1b2c3d4",
"object": "video",
"model": "doubao/seedance-2.0-pro",
"status": "queued",
"progress": 0,
"created_at": 1780000000
}

id 与 task_id 相同,都是 Mozia API 的任务 ID。请保存该 ID,用于后续查询和下载。

查询任务​

GET https://mzsjai.com/v1/video/generations/{task_id}
curl --fail-with-body \
'https://mzsjai.com/v1/video/generations/task_a1b2c3d4' \
-H "Authorization: Bearer ${MOZIA_API_KEY}"

建议每 5~10 秒查询一次。任务状态异步更新,因此连续请求不一定每次都会看到变化。

状态​

status说明
queued已创建或正在排队
running正在生成
succeeded生成成功
failed生成失败
cancelled已取消
expired已过期
unknown未识别的状态

progress 是 0~100 的整数。成功、失败、取消或过期任务均返回 100;生成中的进度为平台估算值。

生成中响应​

{
"id": "task_a1b2c3d4",
"task_id": "task_a1b2c3d4",
"object": "video",
"model": "doubao/seedance-2.0-pro",
"status": "running",
"progress": 30,
"created_at": 1780000000,
"updated_at": 1780000060
}

成功响应​

{
"id": "task_a1b2c3d4",
"task_id": "task_a1b2c3d4",
"object": "video",
"model": "doubao/seedance-2.0-pro",
"status": "succeeded",
"progress": 100,
"created_at": 1780000000,
"updated_at": 1780000180,
"content": {
"url": "https://mzsjai.com/v1/videos/task_a1b2c3d4/content"
},
"resolution": "1080p",
"duration": 5,
"usage": {
"completion_tokens": 68361,
"total_tokens": 68361
}
}

content 只在任务成功且结果可用时出现。resolution、ratio、duration 和 usage 只有平台能够获得对应信息时才出现,调用方不能依赖它们必定存在。任务未完成或没有用量数据时,响应会省略 usage。

字段说明
usage.completion_tokens视频生成消耗的 Token 数量
usage.total_tokens本次任务消耗的 Token 总量

兼容查询路径 GET /v1/videos/{task_id} 返回相同的 usage 结构。新接入仍建议使用统一路径 GET /v1/video/generations/{task_id}。

返回的 content.url 可能使用兼容路径 /v1/videos/{task_id}/content;它与统一路径 /v1/video/generations/{task_id}/content 指向同一个视频。

失败响应​

{
"id": "task_a1b2c3d4",
"task_id": "task_a1b2c3d4",
"object": "video",
"model": "doubao/seedance-2.0-pro",
"status": "failed",
"progress": 100,
"created_at": 1780000000,
"updated_at": 1780000045,
"error": {
"code": "task_failed",
"message": "视频生成失败"
}
}

下载视频​

任务状态变为 succeeded 后,可以直接使用查询响应中的 content.url,也可以调用统一下载路径:

curl --fail-with-body -L \
'https://mzsjai.com/v1/video/generations/task_a1b2c3d4/content' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-o result.mp4

下载接口可能返回重定向,因此命令行调用应使用 curl -L。

素材上传​

本地图片、视频或音频需要先转换为模型可访问的公网地址。完整的本地文件上传、URL 导入、成功响应和错误处理说明请参阅视频素材上传。上传成功后,将返回的 file_url 放入 content 对应素材项。

错误格式​

请求校验、任务不存在或任务提交失败时,接口返回非 2xx 状态码,例如:

{
"code": "invalid_request",
"message": "last_frame requires first_frame",
"type": "invalid_request_error",
"data": null
}

常见错误包括:缺少模型或提示词、last_frame 没有对应首帧、首尾帧与参考素材混用、素材 URL 无法访问、请求分辨率超出模型能力、模型暂时不可用,以及任务 ID 不存在。

从旧接口迁移​

旧 /v1/videos 路由仍保留兼容,但会返回旧版 OpenAI Video 响应。新客户端应完整迁移,不要混用两套响应结构:

旧接口/字段统一接口/字段
POST /v1/videosPOST /v1/video/generations
GET /v1/videos/{id}GET /v1/video/generations/{id}
in_progressrunning
completedsucceeded
content_url 或 metadata.urlcontent.url
images 的隐式顺序content[].role 的明确角色