LoopToken

接口说明

视频生成 /v1 统一异步协议:POST /v1/videos/generations 提交,GET /v1/tasks/{task_id} 轮询任务对象,支持 callback_url 回调

POST/v1/videos/generations
GET/v1/tasks/{task_id}

视频生成耗时通常数十秒到数分钟,接口采用平台自定义的异步两步协议,不是 OpenAI 官方接口。本页是所有使用 /v1 的视频模型的公共协议,各模型页只写差异。

项值
模型见模型系列,model 字段传平台模型 ID
模式异步(POST /v1/videos/generations 提交 → 轮询 GET /v1/tasks/{task_id},或用 callback_url 接收回调)
计费提交时预扣,终态按实际结果多退少补,失败退回,见计费
媒体保留video_url 最长保留至任务完成后 72 小时,见响应

Seedance 方舟原生接口使用 /api/v3/contents/generations/tasks,提供创建、单任务查询和本地任务列表。Seedance 方舟原生素材库版是独立模式,使用 /hub/api/v3/contents/generations/tasks,提供 v3 视频接口、素材库和真人认证。快手可灵 3.0 系列使用与官方一致的原生接口,见 Kling 3.0原生接口。本页描述 /v1 协议。

快速开始

步骤说明
1. 提交POST /v1/videos/generations,立即返回 202 和任务对象(status: pending)
2. 轮询GET /v1/tasks/{task_id},建议间隔 5-10 秒,直到 status 为 succeeded 或 failed
3. 取结果succeeded 读 video_url;failed 读 error

请求头:Authorization: Bearer $LOOPTOKEN_API_KEY、Content-Type: application/json。请求体上限 10 MiB(不是素材文件大小限制)。

# 1. 提交任务
curl https://api.vibelab.me/v1/videos/generations \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-0-fast-260128",
    "content": [{"type": "text", "text": "海边日落,海浪拍打礁石 --duration 5 --resolution 720p"}]
  }'
# => 202 {"task_id":"vt_...","status":"pending","progress":0,...}

# 2. 用返回的 task_id 轮询,间隔建议 5-10 秒
curl https://api.vibelab.me/v1/tasks/vt_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY"

模式选择

模型系列

使用 /v1 的视频模型共用本页的异步协议与任务对象,但提交请求体的形状和参数规则因系列而异。不能把一个系列的参数规则套用到另一个系列。

系列请求体形状当前模型
主流视频模型统一扁平字段:prompt、duration、resolution、mode、audio、aspect_ratio、image_urls、first_frame_imagesora-2、sora-2-pro、veo3.1-fast、veo3.1-quality、veo3.1-lite、MiniMax-Hailuo-2.3、minimax-h3
Seedance 系列方舟风格:顶层参数 + content 多模态数组doubao-seedance-2-5-cloud、seedance-2-5-max、seedance-2-5-hig、seedance-2-0-hig、seedance-2-5-duo、seedance-2-0-duo、seedance-2-0-fast-duo、seedance-2-0-mini-duo、doubao-seedance-2-0-260128、doubao-seedance-2-0-fast-260128、doubao-seedance-2-0-mini-260615、seedance-2.5-c、seedance-2.5-c1、seedance-2.5-c2、seedance-2.5-c7、seedance-2.0-c
Wan 视频系列DashScope 风格:input.prompt/input.media + parameterswan3.0-video、wan3.0-video-prime
Grok Imagine Video统一扁平字段:prompt、quality、duration、image_urlsgrok-imagine-1.5-video
SkyReels V4统一扁平字段:prompt、resolution、duration、image_urls、ref_images、ref_videosskyreels-v4-fast、skyreels-v4-std
Pixverse v6统一扁平字段:prompt、resolution、duration、image_urls、audiopixverse-v6
Vidu Q3 系列统一扁平字段:prompt、resolution、duration、image_urlsviduq3、viduq3-mix、viduq3-pro、viduq3-turbo
Omni Flash 系列统一扁平字段:prompt、resolution/duration(omni-flash-ext);gemini-omni-flash-preview 仅需 promptomni-flash-ext、gemini-omni-flash-preview

选型对照

本表只列非 Seedance 系列的模型,Seedance 见Seedance 系列。

模型输入时长分辨率 / 档位计费方式
sora-2文生、图生(1 张)4/8/12/16/20 秒720p见定价页
sora-2-pro文生、图生(1 张)4/8/12/16/20 秒720p/1024p/1080p见定价页
veo3.1-fast/veo3.1-quality/veo3.1-lite文生、图生固定 8 秒720p/1080p/4k见定价页
MiniMax-Hailuo-2.3文生、首帧图生6/10 秒768p/1080p见定价页
minimax-h3文生、首尾帧、多模态参考4-15 秒768P/2K按秒 + 参考图/参考视频
wan3.0-video、wan3.0-video-prime文生/首尾帧/参考生成/视频编辑秒数480P/720P/1080P按计费时长 × 档位(带参考视频时含输入视频)
grok-imagine-1.5-video文生、图生6-30 秒480p/720p(quality)按秒
skyreels-v4-fast/std文生、首尾帧、参考图/参考视频3-15 秒480p/720p/1080p按秒 × 档位
pixverse-v6文生、首尾帧、多参考图1-15 秒360p/540p/720p/1080p按秒 × 档位,audio 加价
viduq3/viduq3-mix/viduq3-pro/viduq3-turbo多参考图 / 文生、图生、首尾帧1-16 秒(viduq3 为 3-16)540p/720p/1080p(viduq3-mix 无 540p)按秒 × 档位
omni-flash-ext文生、参考视频驱动4/6/8/10 秒720p/1080p/4k按条
gemini-omni-flash-preview文生、图生、视频编辑、续作由模型决定(约 3–10 秒)固定 720p按条

请求参数

请求体为 JSON。model 和 callback_url 是公共字段;生成输入与控制字段必须按所选模型系列填写。

参数类型必填默认说明
modelstring是-平台模型 ID;平台没有该模型 → 404 model_not_found
callback_urlstring否-任务到达终态时由 LoopToken 投递的回调地址;见回调

提交成功返回 202,响应体为任务对象(此时处于 pending 状态)。

主流模型扁平字段

主流视频模型使用顶层扁平字段:prompt、duration、resolution、mode、audio、aspect_ratio、image_urls、first_frame_image。平台会按所选主流模型解析这些字段,而不是把它们视为未处理的附加字段。字段必须符合具体模型的能力范围,详见各模型页面。

主流模型的预扣计费只读取模型默认值和顶层 duration / resolution / mode / audio:

  • content 中的旧式文本指令以及 parameters 中的嵌套字段不参与时长或质量档位计算。
  • 未传对应顶层字段时直接使用该模型默认值。
  • aspect_ratio、image_urls 与 first_frame_image 作为生成输入按模型能力处理,不参与时长或质量档位的默认值计算。

其他系列字段

参数类型必填默认说明
contentarray视系列-方舟风格系列(Seedance)的输入:[{"type":"text","text":"<提示词>"}];text 内可写 --duration <秒>、--resolution <720p|1080p> 指令来指定时长与分辨率
inputobject视系列-DashScope 风格系列(Wan)的输入:prompt、media 等,详见系列页
parameters.durationinteger否5显式指定时长(秒);参与预扣计算
parameters.sizestring否720p 档形如 "宽*高",长边 ≥1440 记为 1080p 计费档,否则记为 720p 档;参与预扣计算

这些系列的预扣参数取舍规则:

  • content 里的 --duration/--resolution 指令与 parameters.duration/parameters.size 整体二选一。
  • 请求体中只要出现 parameters 键,平台就只从 parameters 内读取 duration/size/resolution,text 里的指令整体忽略(不做字段级回退)。parameters 中缺失的子字段按默认值 5 秒 / 720p 处理。
  • 例:parameters 只传 {"duration": 10}、text 里写了 --resolution 1080p,实际按 10 秒 / 720p 计。
  • parameters.resolution 识别 480P/720P/1080P(不区分大小写);其他取值按 720p 档预扣。
  • 这份参数只用于提交时的预扣费计算,任务结束后按实际结果多退少补(终态 duration/resolution 的覆盖规则见下文任务对象字段)。

响应

提交成功返回 202 和任务对象(见下文任务对象字段)。取结果用提交返回的 task_id 查询。

查询任务

用提交返回的 task_id(格式 vt_ 前缀 + UUID)调用 GET /v1/tasks/{task_id}。任务不存在、或不属于当前 API Key 所在账户 → 404 task_not_found。

任务状态

status含义处理
pending排队中继续轮询
running生成中继续轮询
succeeded终态,成功读 video_url,尽快转存
failed终态,失败读 error

轮询时用 status 判断是否结束,progress 只用来展示进度条。只有部分模型的上游会回报真实进度,其余模型在整个生成过程中都是 0,直到终态跳到 100——不要用 progress 是否变化来判断任务是否卡住。当前会回报真实进度的是 seedance-2-5-max、seedance-2-5-hig、seedance-2-0-hig。

任务对象字段

所有状态都包含:

字段类型说明
task_idstringvt_ 前缀 + UUID
modelstring提交时使用的平台模型名
statusstringpending / running / succeeded / failed
progressinteger任务进度百分比,0-100;进入终态(含 failed)一律为 100
created_atinteger任务创建时间,Unix 秒
durationinteger/number时长(秒);默认为提交时预扣计算出的值,任务结束后如果上游返回了实际时长会被覆盖
resolutionstring所选模型支持的公开档位之一:720p / 768p / 1024p / 1080p / 4k;并非每个模型都支持全部档位。默认为提交时计算出的档位,任务结束后如果返回了可识别的实际分辨率会被覆盖

进入终态(succeeded/failed)后追加:

字段类型说明
completed_atinteger任务结束时间,Unix 秒
usageobject上游返回的用量信息,视上游而定可能包含 duration、SR(分辨率短边)、ratio(画面比例,如 "16:9")等子字段,缺失的子字段不出现
ratiostring画面比例(如 "16:9"),仅上游返回了该信息时出现
credits_chargednumber本次实际扣费(credit)

succeeded 额外追加:

字段类型说明
video_urlstring视频下载直链
expires_atintegervideo_url 的失效时间,Unix 秒

failed 额外追加:

字段类型说明
errorobject{"code": "...", "message": "..."};code 取值 timeout(平台侧轮询超时)或 upstream_error(上游生成失败,不透出上游原始错误码)

video_url 有时效,过期后字段不再返回(链接本身也会失效)。有效期上限为任务完成后 72 小时,具体时长取决于平台内部转存状态,某些情况下会短至完成后 24 小时。请在拿到 succeeded 结果后尽快下载转存,不要缓存链接长期使用。

回调

提交时可传 callback_url,任务到达终态时由 LoopToken 投递。

  • 仅接受 https,且不能解析到内网/回环/链路本地等非公网地址,否则 → 400 invalid_request_error。
  • 回调地址不得包含凭据,也不要在其中携带长期密钥。
  • 回调内容与任务查询结果保持一致。
  • 即使使用回调,也必须保留任务查询作为兜底,回调投递不能替代轮询。
  • 不要提交 webhook 或供应商回调字段,统一使用 callback_url。

计费

视频模型的计费方式因模型而异:部分按秒计费,部分按单次任务固定价格计费,具体金额还可能取决于分辨率或质量档位。

  • 提交时先按请求参数预扣,任务结束后按实际结果结算,多退少补。
  • credits_charged 为本次实际扣费金额。
  • 提交同步失败会释放预扣;异步生成失败会退回预扣,失败任务不收取最终生成费用。
  • 最终价格以定价页为准,实时价格见模型列表。

错误

HTTPcode触发场景处理
400invalid_request_error请求体不是合法 JSON,或 callback_url 不是字符串/不满足 https 与公网地址要求;各系列另有参数范围校验,message 为具体原因按 message 修正请求
401invalid_api_key缺少、无效或已吊销的 API Key检查 Key
402insufficient_credits账户余额不足以覆盖预扣费用充值或降低时长、分辨率
403model_not_allowed当前 Key 或分组无权调用该模型检查 Key 的模型白名单与分组权限
403access_denied该 Key 只能使用原生视频接口(Seedance 方舟原生、Kling)改用对应原生接口
403quota_exceeded账号视频生成总量已达上限联系管理员
404model_not_found提交时,平台没有该模型,或参数组合(时长、分辨率等)没有对应的售价档位使用模型列表中的精确 ID,调整参数
404task_not_found查询时,task_id 不存在或不属于当前账户使用提交响应中的 task_id
422invalid_request_error输入内容未通过安全检查修改输入内容
429media_concurrency_exceeded用户或 API Key 的媒体任务并发超限,响应带 Retry-After: 5按 Retry-After 稍后重试
500internal_error平台内部处理失败保存请求时间和 request ID,联系支持
502upstream_error上游提交失败且重试耗尽短暂等待后有限次数重试
503model_unavailable模型已被暂停服务稍后重试或改用其他模型
503no_available_channel该模型当前没有可用渠道指数退避后重试,不要高频重复提交

上游对该次请求返回 400 且没有更多候选渠道时,平台按上游的 400 回复(code 取上游公开错误码,缺省 invalid_request_error),不会包装成 502。

参数或素材类问题不保证在提交阶段发现,也可能在 202 之后表现为异步 failed。客户端必须同时处理同步 HTTP 错误和异步任务错误,不要解析失败文案编写业务逻辑,按 HTTP 状态、error.code 和任务状态分支处理。响应头 X-Request-Id 可用于问题排查。完整错误响应体格式与更多错误码见错误码。

注意事项

  • 只有 seedance-2-5-max、seedance-2-5-hig、seedance-2-0-hig 回报真实 progress → 其余模型生成中恒为 0,用 status 判断是否结束。
  • 请求体 parameters 键存在 → 方舟风格系列的预扣只读 parameters,content 里的 --duration/--resolution 整体忽略。
  • 使用 callback_url → 仍须保留轮询兜底。
  • video_url → 任务完成后尽快转存,不要长期缓存链接。

本页内容