API进阶用户更新于

视频生成 API

视频生成 API 使用异步任务。创建请求会返回 HTTP 202 和任务 ID;使用该 ID 轮询,直到任务进入 succeededfailed,成功后再下载 MP4 视频。

下文以 https://api.icodeeasy.cc 为 Base URL。以下接口调用都必须携带 API Key;成功后返回的带签名结果文件 URL 是唯一例外:

Authorization: Bearer <你的 API Key>

接口一览

用途方法和路由
创建视频任务POST /v1/videos/generations
查询任务GET /v1/videos/tasks/{id}
下载已完成视频GET /v1/videos/tasks/{id}/content
删除已结束的任务DELETE /v1/videos/tasks/{id}

五分钟快速接入

第一步:创建任务

curl -X POST https://api.icodeeasy.cc/v1/videos/generations \
  -H 'Authorization: Bearer <你的 API Key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "doubao-seedance-2.5",
    "prompt": "雨夜的未来城市街道,镜头缓慢向前推进,霓虹灯倒映在湿润路面上",
    "resolution": "480p",
    "ratio": "9:16",
    "duration": 4,
    "generate_audio": true
  }'

创建成功返回 HTTP 202

{
  "id": "vid_1785398400000000000",
  "task_id": "vid_1785398400000000000",
  "object": "video.generation.job",
  "status": "queued",
  "model": "doubao-seedance-2.5",
  "created_at": "2026-07-30T08:00:00Z",
  "updated_at": "2026-07-30T08:00:00Z"
}

优先使用 task_id 作为任务 ID,用于查询、下载和删除;id 在兼容期内保留且值相同。HTTP 202 表示任务已接受,不表示视频已经完成。

第二步:轮询任务

把创建响应中的 task_id 填入 TASK_ID

TASK_ID='vid_1785398400000000000'
curl "https://api.icodeeasy.cc/v1/videos/tasks/${TASK_ID}" \
  -H 'Authorization: Bearer <你的 API Key>'

建议约每 5 秒轮询一次。当前任务处于 queuedrunning 时,不要重复创建新任务。

{
  "id": "vid_1785398400000000000",
  "object": "video.generation.job",
  "status": "running",
  "model": "doubao-seedance-2.0",
  "created_at": "2026-07-30T08:00:00Z",
  "updated_at": "2026-07-30T08:00:20Z",
  "progress": 42
}

progress 是尽力提供的进度,可能缺失。应以 status 而不是进度数值判断任务状态。

第三步:下载视频

status 变为 succeeded,响应会包含 url 和最终 cost_rmb

{
  "id": "vid_1785398400000000000",
  "object": "video.generation.job",
  "status": "succeeded",
  "model": "doubao-seedance-2.0",
  "created_at": "2026-07-30T08:00:00Z",
  "updated_at": "2026-07-30T08:01:18Z",
  "progress": 100,
  "url": "/v1/videos/tasks/vid_1785398400000000000/content",
  "cost_rmb": 0.528
}

通过规范的鉴权内容路由下载,并允许客户端跟随重定向:

TASK_ID='vid_1785398400000000000'
curl -L "https://api.icodeeasy.cc/v1/videos/tasks/${TASK_ID}/content" \
  -H 'Authorization: Bearer <你的 API Key>' \
  -o result.mp4

内容路由支持 HTTP Range 和常见的条件下载请求头。任务成功前请求内容会返回 409 video_not_ready


任务生命周期与安全重试

状态含义客户端动作
queued已接受,等待开始继续轮询同一个任务
running正在生成视频继续轮询同一个任务
succeeded成功终态,视频可下载下载并保存结果
failed失败终态查看 error.code;只有确定要重新生成时才创建新任务

重试规则:

  • 收到 HTTP 202 后,应持续轮询返回的 task_id;重复调用创建接口可能产生另一个任务。
  • 轮询和下载的 GET 请求可以安全重试。
  • 如果创建接口返回 submission_unknown不要重新提交。任务可能已经被接受;请向客服提供请求时间、模型和提示词摘要。
  • 已确认任务进入终态 failed 后,如果确实要重新生成,可重新创建任务。

当前不支持 Webhook 和 callback_url,请轮询任务接口。


创建请求参数

字段类型是否必填说明
modelstring规范模型 ID。没有默认模型;缺失或空字符串会返回 400 invalid_request
promptstring标准模型需提供文本所有文字提示词都放在这里。Motion Control 同时提供两项参考素材时可不填。
contentarray使用参考素材时必填参考素材列表,只放公网 HTTPS 图片/视频 URL 项。
resolutionstring输出规格,可用值和默认值取决于模型。Motion Control 不接受该字段。
ratiostring画面比例;aspect_ratio 是兼容别名。Motion Control 不接受该字段。
durationinteger生成秒数,可用值和默认值取决于模型。Motion Control 不接受该字段。
generate_audioboolean模型支持时生成音频,默认值见模型表。Motion Control 不接受该字段。
motion_modestring仅 Motion Controlstdpro,默认 std
character_orientationstring仅 Motion Controlimagevideo,默认 image;它会决定参考视频时长上限。
keep_original_soundboolean仅 Motion Control是否保留参考视频原声,默认 true

所有文字提示词都放在 promptcontent 只用于参考图片和参考视频。

参考素材列表(content

content 是参考素材列表,因为一个任务可能需要首帧和尾帧、多张无顺序参考图,或 Motion Control 的一张图片加一个视频。每项素材的 image_urlvideo_url 直接填写一个 HTTPS URL 字符串。

[
  { "type": "image_url", "image_url": "https://cdn.example.com/first.png", "role": "first_frame" },
  { "type": "image_url", "image_url": "https://cdn.example.com/last.png", "role": "last_frame" }
]
  • 图片类型:image_urlinput_image
  • 视频类型:video_urlinput_video
  • 首尾帧角色:first_framelast_frame;尾帧始终要求同时提供首帧。
  • Motion Control 角色:一个 reference_image 和一个 reference_video
  • Grok 参考图无需角色,也接受 reference_image
  • 当前不支持参考音频素材。
  • 媒体地址必须是公网可访问的 HTTPS URL,并在任务读取期间保持有效。
  • 图片使用 image_url,视频使用 video_url

首帧 + 尾帧完整调用

把两张图片放在可公开读取的 HTTPS 地址,然后直接将 URL 放进 content

curl -X POST https://api.icodeeasy.cc/v1/videos/generations \
  -H 'Authorization: Bearer <你的 API Key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "doubao-seedance-2.0",
    "prompt": "镜头从首帧平滑过渡到尾帧",
    "content": [
      {"type":"image_url","image_url":"https://cdn.example.com/first.png","role":"first_frame"},
      {"type":"image_url","image_url":"https://cdn.example.com/last.png","role":"last_frame"}
    ],
    "resolution": "480p",
    "ratio": "9:16",
    "duration": 4,
    "generate_audio": true
  }'

可以只传首帧;如果没有在同一个请求中提供首帧,就不能单独传尾帧。


分模型接入示例

Seedance:文本、首帧和尾帧

Seedance 2.5、Seedance 2.0 Standard、Fast、Mini 以及 Seedance 1.5 Pro 支持文生视频和首尾帧生成。参考图片必须明确标注帧角色;Seedance 2.5 排在该系列首位。

{
  "model": "doubao-seedance-2.5",
  "prompt": "镜头环绕玻璃雕塑,晨光逐渐变化",
  "content": [
    { "type": "image_url", "image_url": "https://cdn.example.com/seedance-first.png", "role": "first_frame" },
    { "type": "image_url", "image_url": "https://cdn.example.com/seedance-last.png", "role": "last_frame" }
  ],
  "resolution": "720p",
  "ratio": "16:9",
  "duration": 6,
  "generate_audio": true
}

Seedance 2.5 不传生成规格时,默认使用 480p9:16、4 秒,并默认开启生成音频。使用首帧或首尾帧时,比例会规范化为 adaptive

MiniMax H3:文本、首帧和尾帧

MiniMax-H3 通过同一套公开请求支持文生视频和首尾帧生成。它支持 768P2K、4–15 秒,以及 21:916:94:31:13:49:16 比例;默认值为 768P9:16、5 秒。请不要传 generate_audio:H3 的公开契约没有生成音频请求开关。

Kling:首尾帧引导

{
  "model": "kling-v3",
  "prompt": "列车穿过薄雾驶入站台",
  "content": [
    { "type": "image_url", "image_url": "https://cdn.example.com/kling-first.png", "role": "first_frame" },
    { "type": "image_url", "image_url": "https://cdn.example.com/kling-last.png", "role": "last_frame" }
  ],
  "resolution": "1080p",
  "ratio": "16:9",
  "duration": 5,
  "generate_audio": true
}

Kling 各版本的重要差异:

  • kling-v2-6:使用尾帧必须选择 1080p;生成音频也只支持 1080p,且不能与尾帧同时使用。
  • kling-3.0-turbo:仅支持首帧,不支持生成音频。
  • kling-v3kling-v3-omni:支持首尾帧和生成音频。
  • kling-v3-omni 还支持最多两张不带角色的参考图,但同一请求中不能混用无角色参考图和首尾帧角色图。
  • kling-video-o1:支持首尾帧,不支持生成音频。

Grok:无顺序参考图

Grok 最多接受七张参考图 URL,不要设置 first_framelast_frame

{
  "model": "grok-imagine-1.5-video",
  "prompt": "云层掠过峡谷,镜头缓慢升高",
  "content": [
    { "type": "image_url", "image_url": "https://cdn.example.com/grok-reference.png" }
  ],
  "resolution": "480p",
  "ratio": "16:9",
  "duration": 6
}

Grok 默认使用 480p9:16 和 6 秒,不支持生成音频。

Kling Motion Control

提供一张公网 HTTPS 图片和一个公网 HTTPS MP4 视频:

{
  "model": "kling-v3-motion-control",
  "prompt": "保持角色身份并跟随参考动作",
  "content": [
    { "type": "image_url", "image_url": "https://cdn.example.com/character.png", "role": "reference_image" },
    { "type": "video_url", "video_url": "https://cdn.example.com/motion.mp4", "role": "reference_video" }
  ],
  "motion_mode": "std",
  "character_orientation": "image",
  "keep_original_sound": true
}
  • character_orientation: "image":参考视频必须为 3–10 秒。
  • character_orientation: "video":参考视频必须为 3–30 秒。
  • Motion Control 模型不能传 resolutionratiodurationgenerate_audio

模型能力表

规范模型 ID分辨率 / 模式时长比例参考素材音频默认值
doubao-seedance-2.5480p720p4–30 秒16:94:31:13:49:1621:9adaptive首帧 + 尾帧;帧引导时比例规范化为 adaptive开启
doubao-seedance-2.0480p720p1080p4K4–15 秒16:99:161:14:33:421:9adaptive首帧 + 尾帧开启
doubao-seedance-2.0-fast480p720p4–15 秒同 Seedance 2.0首帧 + 尾帧开启
doubao-seedance-2.0-mini480p720p4–15 秒同 Seedance 2.0首帧 + 尾帧开启
doubao-seedance-1-5-pro480p720p1080p4–12 秒16:99:161:14:33:421:9首帧 + 尾帧开启
MiniMax-H3768P2K4–15 秒21:916:94:31:13:49:16首帧 + 尾帧无公开生成音频开关
kling-v2-6720p1080p5 或 10 秒16:99:161:1首帧 + 条件尾帧关闭
kling-3.0-turbo720p1080p3–15 秒16:99:161:1仅首帧不支持
kling-v3720p1080p4K3–15 秒16:99:161:1首帧 + 尾帧开启
kling-v3-omni720p1080p4K3–15 秒16:99:161:1首尾帧,或最多 2 张无角色参考图开启
kling-video-o1720p1080p5 或 10 秒16:99:161:1首帧 + 尾帧不支持
kling-v2-6-motion-controlstdpro参考视频时长1 张图片 + 1 个视频默认保留原声
kling-v3-motion-controlstdpro参考视频时长1 张图片 + 1 个视频默认保留原声
grok-imagine-1.5-video480p720p6–30 秒16:99:161:13:22:3最多 7 张无角色参考图不支持

标准模型省略可选字段时,会使用上表及前文说明的默认值;model 本身始终必填。服务会在开始任务前校验参数组合。


响应与下载行为

任务响应使用统一结构:

字段含义
id按用户隔离的任务 ID,用于轮询、下载、删除和客服排查
object固定为 video.generation.job
statusqueuedrunningsucceededfailed
model别名规范化后的模型 ID
created_atupdated_atUTC RFC 3339 时间
progress尽力提供的生成进度,不可用时会省略
url仅成功后返回;可能是 Relay 内容路由或带签名的 Relay 文件路由
cost_rmb成功结算后的最终任务费用
error.code失败任务的稳定错误分类

建议始终使用 GET /v1/videos/tasks/{id}/content 下载,不要依赖 url 的具体形状。使用 curl -L,或在 HTTP 客户端中启用重定向。鉴权内容接口可能返回 200206 Partial Content,或重定向到 Relay 管理的存储。

带签名的 Relay 文件 URL 无需 API Key 即可打开;获得完整 URL 就能访问对应视频。不要把它暴露在公开日志、公开页面或客户端分析数据中。

安全删除终态任务会返回 HTTP 204,同时可能删除 Relay 中保存的视频文件。删除任务前,请先下载并保存需要的结果。运行中或计费尚未完成的任务会返回 409 video_delete_unsafe。删除本地任务记录不会取消已经开始的视频生成。


错误处理

HTTP 错误统一为:

{
  "error": {
    "type": "invalid_request",
    "message": "model is not supported"
  }
}
HTTP错误类型含义 / 处理方式
400invalid_request模型、字段、素材 URL、角色、时长、比例或参数组合不合法;修正请求
401unauthorizedAPI Key 缺失、无效或已禁用
402insufficient_balance余额无法覆盖任务;不会开始生成
404not_found任务不存在或属于其他账户
409video_not_ready任务成功前请求了视频内容
409video_delete_unsafe任务当前不能安全删除
413request_too_large创建任务的 JSON 请求体超过大小限制
502upstream_error视频生成或结果下载失败
503video_service_unavailableupstream_quota_exceededvideo_price_unavailable视频服务容量或当前公开价格暂时不可用
503submission_unknown无法确认任务是否已接受;不要重复提交

失败任务响应示例:

{
  "id": "vid_1785398400000000000",
  "object": "video.generation.job",
  "status": "failed",
  "model": "doubao-seedance-2.0",
  "error": { "code": "generation_failed" }
}

计费

视频生成使用账户余额,不使用月卡额度。

任务费用 = 所选模型及规格在价格页展示的人民币单秒价格 × 计费秒数

当前各模型单秒价格请查看价格页面。分辨率、生成音频或 Motion Control 模式可能对应不同的单秒价格行。标准模型的计费秒数就是请求中的 duration;Motion Control 使用系统识别的参考视频时长,不足整秒时向上取整。

创建任务时,余额必须能够覆盖该任务。余额不足会在开始生成前返回 402。成功任务中的 cost_rmb 是最终实际费用;明确失败的任务不收费。