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.0 | Seedance 2.0 通用标准版 | 最高 1080p |
doubao/seedance-2.0-fast | Seedance 2.0 通用 Fast 版 | 最高 720p |
doubao/seedance-2.0-fast-480p | Seedance 2.0 Fast 固定分辨率版 | 480p |
doubao/seedance-2.0-fast-720p | Seedance 2.0 Fast 固定分辨率版 | 720p |
doubao/seedance-2.0-fast-1080p | Seedance 2.0 Fast 固定分辨率版 | 1080p |
doubao/seedance-2.0-pro-480p | Seedance 2.0 Pro 固定分辨率版 | 480p |
doubao/seedance-2.0-pro-720p | Seedance 2.0 Pro 固定分辨率版 | 720p |
doubao/seedance-2.0-pro-1080p | Seedance 2.0 Pro 固定分辨率版 | 1080p |
doubao/seedance-2.0-pro-4k | Seedance 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
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model | string | 是 | - | 模型 ID |
content | array | 推荐 | - | 提示词及带角色的图片、视频、音频素材 |
prompt | string | 条件必填 | - | 顶层提示词;与 content 中的文本二选一 |
duration | integer | 否 | 5 | 视频时长(秒),通常支持 4~15 秒 |
resolution | string | 否 | 模型默认 | 通用模型可按能力传入 480p、720p 或 1080p;固定分辨率模型会覆盖该字段,Pro 4K 请使用 doubao/seedance-2.0-pro-4k |
ratio | string | 否 | 模型默认 | 画面比例;也兼容 aspect_ratio 和旧字段 size |
metadata | object | 否 | - | 平台扩展参数;可用字段以控制台说明为准 |
prompt 和 content 中至少要有一段非空文本。如果两者同时存在,顶层 prompt 优先。
content 格式
文本项:
{
"type": "text",
"text": "日落时分的海边,镜头缓慢推进"
}
素材项:
{
"type": "image_url",
"role": "first_frame",
"image_url": {
"url": "https://example.com/start.jpg"
}
}
支持的类型和角色:
type | role | 含义 |
|---|---|---|
image_url | first_frame | 视频首帧 |
image_url | last_frame | 视频尾帧 |
image_url | reference_image | 参考图片 |
video_url | reference_video | 参考视频 |
audio_url | reference_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",
"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。具体素材数量、文件大小、格式和时长限制以当前模型能力为准;不支持的组合会返回请求错误。
旧字段兼容
仍兼容顶层 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",
"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",
"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 只在任务成功且结果可用时出现。resolution、ratio 和 duration 只有平台能够获得对应信息时才出现,调用方不能依赖它们必定存在。当前 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/videos | POST /v1/video/generations |
GET /v1/videos/{id} | GET /v1/video/generations/{id} |
in_progress | running |
completed | succeeded |
content_url 或 metadata.url | content.url |
images 的隐式顺序 | content[].role 的明确角色 |