跳到主要内容

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下载生成的视频
POST/v1/sd/upload上传本地图片或视频素材
POST/v1/sd/upload_url从公网 URL 导入素材

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

所有请求都需要 API Key:

Authorization: Bearer <YOUR_API_KEY>

模型

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

模型说明分辨率
doubao/seedance-2.0Seedance 2.0 通用标准版最高 1080p
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-fast-1080pSeedance 2.0 Fast 固定分辨率版1080p
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 中的文本二选一
durationinteger5视频时长(秒),通常支持 4~15 秒
resolutionstring模型默认通用模型可按能力传入 480p720p1080p;固定分辨率模型会覆盖该字段,Pro 4K 请使用 doubao/seedance-2.0-pro-4k
ratiostring模型默认画面比例;也兼容 aspect_ratio 和旧字段 size
metadataobject-平台扩展参数;可用字段以控制台说明为准

promptcontent 中至少要有一段非空文本。如果两者同时存在,顶层 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_imagereference_videoreference_audio 混用。
  • first_framelast_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",
"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",
"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",
"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。具体素材数量、文件大小、格式和时长限制以当前模型能力为准;不支持的组合会返回请求错误。

旧字段兼容

仍兼容顶层 promptimageimagessizeaspect_ratioseconds,但新接入应使用 contentratioduration

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

提交成功响应

HTTP 状态码:200

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

idtask_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未识别的状态

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

生成中响应

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

成功响应

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

content 只在任务成功且结果可用时出现。resolutionratioduration 只有平台能够获得对应信息时才出现,调用方不能依赖它们必定存在。当前 GET 响应不返回 usage,也不会伪造缺失的用量数据。

返回的 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",
"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

素材上传

本地素材先上传后,可将返回的公网地址放入 content

上传本地文件

curl --fail-with-body \
-X POST 'https://mzsjai.com/v1/sd/upload' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-F 'file=@./reference.jpg'

从公网 URL 导入

curl --fail-with-body \
-X POST 'https://mzsjai.com/v1/sd/upload_url' \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com/reference.jpg",
"filename": "reference.jpg"
}'

源地址必须是可公开访问的 HTTP/HTTPS 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_urlmetadata.urlcontent.url
images 的隐式顺序content[].role 的明确角色