跳到主要内容

火山方舟原生协议

Mozia API 提供火山方舟原生格式的视频生成接口,采用异步任务模式:创建任务、保存任务 ID、轮询状态、获取视频结果。本文覆盖视频任务的创建、查询、列表和取消/删除。

接入地址与鉴权​

平台统一的 API 基础地址:

https://mzsjai.com/v1

火山方舟原生视频使用同一域名下的 /api/v3 路径。配置原生客户端时,将基础地址末尾的 /v1 替换为 /api/v3:

https://mzsjai.com/api/v3

创建任务的完整地址为 https://mzsjai.com/api/v3/contents/generations/tasks。下表中的路径从域名根目录开始,不再拼接到 /v1 后面。

所有请求使用 Mozia API Key 鉴权,创建任务时提交 JSON:

Authorization: Bearer <YOUR_API_KEY>
Content-Type: application/json

在控制台选择支持 volcengine-video endpoint 的模型,使用该模型对外显示的完整模型 ID。模型可用性、素材限制、参数范围和价格以该模型的配置为准;拥有某个模型的调用权限,不代表它一定支持本协议。

API Key 应保存在服务端。下文的 <YOUR_API_KEY>、<MODEL_ID>、cgt-example 和素材地址均为占位示例,调用前请替换。

接口一览​

方法路径作用
POST/api/v3/contents/generations/tasks创建视频生成任务
GET/api/v3/contents/generations/tasks/{task_id}查询单个任务
GET/api/v3/contents/generations/tasks查询任务列表
DELETE/api/v3/contents/generations/tasks/{task_id}取消排队任务或删除已结束任务

本协议通过 content.video_url 提供生成结果,响应保留原生结构。

快速开始​

1. 创建任务​

设置调用参数:

export MOZIA_BASE_URL='https://mzsjai.com/v1'
export MOZIA_ARK_BASE_URL="${MOZIA_BASE_URL%/v1}/api/v3"
export MOZIA_API_KEY='<YOUR_API_KEY>'
export MOZIA_MODEL='<MODEL_ID>'

提交文生视频请求:

curl --fail-with-body \
"${MOZIA_ARK_BASE_URL}/contents/generations/tasks" \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
-H 'Content-Type: application/json' \
--data-binary @- <<JSON
{
"model": "${MOZIA_MODEL}",
"content": [
{"type": "text", "text": "日落时分的海边,镜头平稳向前推进,电影质感"}
],
"duration": 5,
"ratio": "16:9"
}
JSON

成功时返回 HTTP 200,响应示例:

{"id": "cgt-example"}

返回成功表示任务已提交,视频尚未生成完成。请完整保存 id,将其作为后续路径中的 task_id;不要修改前缀或自行生成替代 ID。

2. 查询状态​

export MOZIA_TASK_ID='cgt-example'

curl --fail-with-body \
"${MOZIA_ARK_BASE_URL}/contents/generations/tasks/${MOZIA_TASK_ID}" \
-H "Authorization: Bearer ${MOZIA_API_KEY}"

建议每 5~10 秒查询一次,直到状态变为 succeeded、failed、cancelled 或 expired。达到客户端等待上限后,可以保存任务 ID,稍后继续查询。

3. 保存结果​

当 status 为 succeeded 时,读取 content.video_url 并下载:

# 将此值替换为查询响应中的 content.video_url
export VIDEO_URL='https://example.com/result.mp4'
curl --fail-with-body -L "${VIDEO_URL}" -o result.mp4

下载结果 URL 时无需附带 Mozia API Key。结果地址可能有有效期,请在任务成功后及时保存文件。

创建任务参数​

POST /api/v3/contents/generations/tasks

请求体​

字段类型必填说明
modelstring是支持本协议且当前 API Key 可调用的模型 ID
contentarray是非空数组,包含文本、图片、视频、音频或样片引用
durationinteger否生成时长,单位为秒;仅在模型及其计费方式支持自动时长时使用 -1
resolutionstring否清晰度,例如 720p;可选值以模型为准
ratiostring否宽高比,例如 16:9、9:16、1:1
seedinteger否随机种子,取值范围以模型为准
generate_audioboolean否是否生成音频,需模型支持
watermarkboolean否是否添加水印,需模型支持
camera_fixedboolean否是否固定镜头,需模型支持
return_last_frameboolean否是否返回尾帧,需模型支持
callback_urlstring否任务状态通知地址;是否回调及通知格式由模型服务决定,仍可使用查询接口确认状态
service_tierstring否服务等级,支持时使用 default 或 flex
execution_expires_afterinteger否任务执行过期时间设置,单位为秒;可用范围以模型为准
draftboolean否是否生成样片,需模型支持
framesinteger否指定帧数,需模型支持;与时长的组合限制以模型为准
toolsarray否模型支持的原生工具配置

可选字段省略后由模型服务决定默认行为。接口保留显式的 false、0 和其他 JSON 字段;省略 duration 不会由本协议自动补成 5 秒。平台为所选模型配置的参数规则仍会生效,例如固定分辨率模型可以限定 resolution。

提示词写在 content 的文本项中。使用原生接口时,应直接提交模型支持的原生字段;接口不会将顶层 prompt、images、size 或 metadata 自动转换为对应的原生参数。

content 格式​

每一项都必须有非空的 type。素材地址必须能被模型服务访问,推荐使用公网 HTTPS URL。

type内容字段role用途
texttext不需要文本提示词
image_urlimage_url.urlfirst_frame首帧图片
image_urlimage_url.urllast_frame尾帧图片
image_urlimage_url.urlreference_image参考图片
video_urlvideo_url.urlreference_video参考视频
audio_urlaudio_url.urlreference_audio参考音频
draft_taskdraft_task.id不需要引用已有样片任务

素材类型、数量、大小、时长以及角色组合限制由所选模型决定。支持文本生成的模型不一定支持参考视频、参考音频或样片。

图生视频示例​

以下为创建任务的 JSON 请求体:

{
"model": "<MODEL_ID>",
"content": [
{"type": "text", "text": "人物自然转身,向镜头微笑,保持外观一致"},
{
"type": "image_url",
"role": "first_frame",
"image_url": {"url": "https://example.com/start.jpg"}
}
],
"duration": 5,
"ratio": "16:9",
"generate_audio": false
}

需要首尾帧时,可在模型支持的情况下增加 role: "last_frame" 的图片项。首尾帧和参考素材能否混用,以模型限制为准。

参考视频示例​

{
"model": "<MODEL_ID>",
"content": [
{"type": "text", "text": "参考视频中的镜头运动,生成一段海边广告片"},
{
"type": "video_url",
"role": "reference_video",
"video_url": {"url": "https://example.com/reference.mp4"}
}
],
"duration": 5,
"ratio": "16:9"
}

参考图片和参考音频采用相同的嵌套 URL 结构,分别使用 image_url / reference_image 和 audio_url / reference_audio。

样片引用​

仅对支持样片的模型使用。引用的任务必须由当前账号通过本原生接口创建;每次请求只允许引用一个非空的 draft_task.id:

{
"model": "<MODEL_ID>",
"content": [
{"type": "draft_task", "draft_task": {"id": "cgt-draft-example"}}
]
}

使用原样片对应的模型,并遵循该模型的样片转正式视频参数要求。

查询任务​

GET /api/v3/contents/generations/tasks/{task_id}

task_id 为创建响应中的 id。查询成功返回 HTTP 200 和原生任务对象。

任务状态​

status含义是否结束
queued排队中否
running生成中否
succeeded生成成功是
failed生成失败,查看任务对象中的 error是
cancelled已取消是
expired已过期是

HTTP 200 表示查询成功,不代表视频生成成功,应继续判断 status。

成功响应示例​

{
"id": "cgt-example",
"model": "example-model",
"status": "succeeded",
"content": {
"video_url": "https://example.com/result.mp4",
"last_frame_url": "https://example.com/last-frame.jpg"
},
"created_at": 1788840000,
"updated_at": 1788840060,
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"usage": {
"completion_tokens": 12345,
"total_tokens": 12345
}
}

以上为结构示例,字段是否出现取决于模型和任务状态:

字段说明
id原生任务 ID
model模型服务返回的模型标识,可能与提交时的对外模型名不同
content.video_url生成成功后的结果地址
content.last_frame_url模型支持且实际返回时的尾帧地址
created_at、updated_at原生时间戳,单位为秒
usage模型服务返回的用量;未返回时不补零,也不据此推断任务免费
error任务失败时的错误信息,通常包含 code 和 message

客户端应容忍可选字段缺失和新增字段。不要依赖 progress、object 或 task_id 一定出现在原生响应中。

失败任务示例​

{
"id": "cgt-example",
"status": "failed",
"error": {
"code": "example_task_error",
"message": "视频生成失败"
}
}

这里的 error 属于已创建任务的执行结果;请求本身失败时的 HTTP 错误格式见下文。

查询任务列表​

GET /api/v3/contents/generations/tasks
查询参数类型默认值说明
page_numinteger1页码,范围 1~500
page_sizeinteger20每页数量,范围 1~500
filter.modelstring不筛选使用查询响应中的 model 值筛选
filter.statusstring不筛选queued、running、succeeded、failed、cancelled、expired
filter.service_tierstring不筛选default 或 flex
filter.task_idsstring,可重复不筛选多个任务 ID 使用重复的同名参数

查询成功任务:

curl --fail-with-body --get \
"${MOZIA_ARK_BASE_URL}/contents/generations/tasks" \
-H "Authorization: Bearer ${MOZIA_API_KEY}" \
--data-urlencode 'page_num=1' \
--data-urlencode 'page_size=20' \
--data-urlencode 'filter.status=succeeded'

按多个 ID 筛选时,使用 filter.task_ids=cgt-first&filter.task_ids=cgt-second,不要将多个 ID 合并成逗号分隔的字符串。

响应示例:

{
"items": [
{"id": "cgt-example", "status": "queued", "created_at": 1788840000}
],
"total": 1
}

items 中每项为原生任务对象,按创建时间倒序排列。total 是当前账号可见、满足筛选条件的任务总数,不是当前页数量;没有结果或页码超出结果范围时,items 为 []。

列表仅包含当前账号在最近七天内通过本原生接口创建且仍可查询的任务,并遵守当前 API Key 的模型权限。其他账号的任务、通过其他视频协议创建的任务以及已删除或不可用的任务不会被导入列表。任务归属按账号判断,不要求查询时使用与创建时完全相同的 API Key。

取消或删除任务​

DELETE /api/v3/contents/generations/tasks/{task_id}
curl --fail-with-body --request DELETE \
"${MOZIA_ARK_BASE_URL}/contents/generations/tasks/${MOZIA_TASK_ID}" \
-H "Authorization: Bearer ${MOZIA_API_KEY}"
  • 排队中的任务可申请取消;任务可能在请求期间进入生成状态,是否接受取消以接口结果为准。
  • 正在生成的任务能否取消由模型服务决定,不应假设可以强制中断。
  • 已结束的任务可申请删除。需要视频文件时,应先下载并保存结果。

成功时返回 HTTP 200,响应体保留模型服务的返回结果,可能为 {} 或空内容。不要依赖删除响应包含任务 ID 或完整任务对象。

删除后再次查询可能返回 404。删除任务不会删除平台的账单和用量记录,也不表示已消费费用会退款。

错误处理与计费​

HTTP 请求失败时使用 error 对象,例如任务不存在:

{
"error": {
"code": "NotFound",
"message": "task not found"
}
}

模型服务的标准 error 对象和 HTTP 错误状态会保留;平台鉴权、参数校验、路由和网络错误也使用 error 对象,错误码可能不同。type、param 等附加字段不保证始终存在。

HTTP 状态常见原因处理方式
400缺少必填字段、参数类型或组合不受支持修改请求后再提交
401API Key 缺失或无效检查鉴权头和密钥状态
403没有模型或任务访问权限检查账号与 API Key 权限
404任务不存在、不属于当前账号或已不可用核对创建时保存的任务 ID;不要将其视为退款凭据
429请求频率或并发受限降低频率并延迟重试
5xx服务暂时不可用或任务服务异常查询请求可有限退避重试;创建请求先确认是否已生成任务

创建任务可能先预扣费用,再按模型的计费规则和实际结果结算。失败、取消或过期需要得到明确的任务终态后处理费用;一次 DELETE 成功、客户端等待超时或一次 404 都不等于退款完成。费用以控制台账单为准,遇到任务已不可查询而费用未明确结算的情况,请携带任务 ID 联系支持。

创建请求发生网络超时后,任务仍可能已提交成功。请先核对任务列表或控制台记录,避免立即重复创建导致重复生成和计费。

与统一视频接口的区别​

项目本文原生协议统一视频接口
创建路径/api/v3/contents/generations/tasks/v1/video/generations
提示词content[].text支持顶层 prompt 等统一参数
创建响应原生对象,例如 {"id":"cgt-example"}平台统一任务对象
结果地址content.video_url按统一接口文档解析
列表与取消/删除使用本文对应路径不适用本文路径约定

同一个任务的创建、查询和删除应使用本协议的配套路径。本文的兼容范围是原生视频任务协议;模型能力、账号权限、列表可见范围及平台错误码仍遵循上述说明,不代表所有火山方舟产品接口均已开放。

统一接口的接入方式见视频生成。