Skip to content

OpenAI 协议接入(视频)​

New API 提供与 OpenAI Videos API 对齐的异步视频接口。一个接口覆盖所有走异步任务的视频模型: 提交任务拿到任务 ID,再用任务 ID 查询状态、取回文件。

本页字段与状态取值直接对应仓库实现,改动代码时请同步更新: relay/common/relay_info.go(提交字段)、dto/openai_video.go(提交/查询响应的 OpenAI 形状)、 dto/task.go(网关通用任务响应)、model/task.go(任务状态常量)、router/video-router.go(路由)。

端点一览​

方法路径说明
POSThttps://api.yu-yu.ai/v1/videos提交视频生成任务
POSThttps://api.yu-yu.ai/v1/videos/{video_id}/remix基于已有视频再生成一版(video_id 为原任务 ID)
GEThttps://api.yu-yu.ai/v1/videos/{task_id}查询任务状态与结果
GEThttps://api.yu-yu.ai/v1/videos/{task_id}/content取回视频文件本体(二进制流)

同一个提交入口还有一条别名:POST https://api.yu-yu.ai/v1/video/generations,查询别名为 GET https://api.yu-yu.ai/v1/video/generations/{task_id}。两者与上表行为一致,选任一条都可以。

鉴权​

所有端点都使用 API Key:

http
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
Content-Type: application/json

GET /v1/videos/{task_id}/content 额外允许控制台登录态直接访问(便于在浏览器里预览), 但用 API Key 调用时与其他端点完全一致。

提交任务​

请求体字段​

字段类型必填说明
modelstring是模型名,取值见模型列表
promptstring通常是画面描述。部分模型以图生视频为主,可只传图不传提示词
imagestring否首帧参考图 URL(部分模型支持 Base64)
imagesstring[]否多张参考图,用于多图参考的模型
video_urlstring否输入视频 URL,用于视频改绘/超分这类任务
input_referencestring否OpenAI 协议的参考图字段,与 image 等价
sizestring否分辨率,如 720p、1080p、1920x1080;不传按模型默认值
durationinteger | string否生成时长(秒)。数字与数字字符串都接受,"5" 与 5 等价
secondsstring否OpenAI 协议的时长字段,字符串形式,如 "8"
generation_modelstring否指定底模(同一模型族内多底模时使用);也接受驼峰 generationModel
modestring否生成模式标识,取值随模型而定(如文生视频/图生视频)
metadataobject | string否模型专用参数。对象或 JSON 字符串都接受;常用键见下表

metadata 里的常见键(是否生效取决于模型):

键类型说明
resolutionstring分辨率,与 size 同义
ratio / aspect_ratiostring画幅比例,如 16:9、9:16
durationnumber时长(秒),会被合并进顶层时长
seednumber随机种子,用于复现同一结果
negative_promptstring负向提示词
watermarkboolean是否加模型方水印
callback_urlstring任务终态回调地址,部分家族支持

请求示例​

bash
curl -X POST 'https://api.yu-yu.ai/v1/videos' \
  -H 'Authorization: Bearer sk-xxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "wan3.0-video",
    "prompt": "一只橘猫坐在窗边打哈欠,清晨自然光,镜头缓慢推进",
    "size": "720p",
    "duration": 5
  }'

图生视频:

bash
curl -X POST 'https://api.yu-yu.ai/v1/videos' \
  -H 'Authorization: Bearer sk-xxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "happyhorse-1.1-i2v",
    "prompt": "镜头缓慢环绕",
    "image": "https://your-oss-domain/path/first-frame.jpg",
    "metadata": { "resolution": "1080p", "ratio": "16:9" }
  }'

提交响应​

提交成功后立即返回任务对象,此时视频还没生成:

json
{
  "id": "task_xxxxxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "wan3.0-video",
  "status": "queued",
  "progress": 0,
  "created_at": 1767225600,
  "upstream_task_id": ""
}
字段类型说明
idstring任务 ID,后续查询/取回都用它
task_idstring与 id 同值,兼容早期接口(逐步废弃)
objectstring固定为 video
modelstring实际使用的模型名
statusstring任务状态,提交阶段固定为 queued
progressinteger进度百分比,0~100
created_atinteger创建时间(Unix 秒)
completed_atinteger完成时间,未完成时不返回
expires_atinteger结果过期时间,部分协议返回
secondsstring实际时长,部分协议返回
sizestring实际分辨率,部分协议返回
remixed_from_video_idstring重制任务的来源视频 ID,仅 remix 返回
upstream_task_idstring上游任务号,部分协议返回;无则为空串
errorobject失败时的 { code, message }

查询任务​

bash
curl 'https://api.yu-yu.ai/v1/videos/task_xxxxxxxxxxxxxxxx' \
  -H 'Authorization: Bearer sk-xxxxxxxxxxxxxxxx'

返回体有两种形状,以你实际拿到的为准:

形状 A:OpenAI 视频对象(绝大多数模型走这条)

json
{
  "id": "task_xxxxxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "wan3.0-video",
  "status": "completed",
  "progress": 100,
  "created_at": 1767225600,
  "completed_at": 1767225720,
  "seconds": "5",
  "size": "1280x720",
  "upstream_task_id": "cgt-2026xxxx",
  "metadata": { "url": "https://.../result.mp4" }
}

形状 B:网关通用任务对象(任务刚提交、模型平台信息尚未回填等情况下出现)

json
{
  "code": "success",
  "message": "",
  "data": {
    "task_id": "task_xxxxxxxxxxxxxxxx",
    "status": "SUCCESS",
    "progress": "100%",
    "result_url": "https://.../result.mp4",
    "resolution": "1280x720",
    "duration_seconds": 5,
    "submit_time": 1767225600,
    "start_time": 1767225610,
    "finish_time": 1767225720,
    "fail_reason": ""
  }
}

形状 B 的字段说明(data 内,来自网关任务对象):

字段类型说明
task_idstring任务 ID
platformstring任务所属平台标识
actionstring任务类型标识
statusstring任务状态,见下表
progressstring进度文本,如 "35%"、"100%"
result_urlstring结果文件地址,成功时返回
resolutionstring结果分辨率
duration_secondsinteger结果时长(秒)
submit_time / start_time / finish_timeinteger提交/开始/完成时间(Unix 秒)
fail_reasonstring失败原因,失败时返回
upstream_task_idstring上游任务号

状态取值​

形状 A(小写)

状态含义
queued排队中,尚未开始
in_progress生成中
completed已完成,可以取回结果
failed失败,看 error 字段
cancelled已取消
unknown状态未知(上游未返回可识别的状态)

形状 B(大写)

状态含义
NOT_START尚未开始
SUBMITTED已提交
QUEUED排队中
PREPARING_ASSETS正在准备素材(参考图/视频预处理)
SUBMITTING正在向上游提交
IN_PROGRESS生成中
SUCCESS已完成
FAILURE失败
CANCELLED已取消
UNKNOWN状态未知

判断是否结束:形状 A 看 completed / failed / cancelled;形状 B 看 SUCCESS / FAILURE / CANCELLED。其余状态继续轮询。

取回视频文件​

GET https://api.yu-yu.ai/v1/videos/{task_id}/content 返回视频二进制流(不是 JSON),响应头带内容类型。 适合直接给播放器或下载:

bash
curl -L 'https://api.yu-yu.ai/v1/videos/task_xxxxxxxxxxxxxxxx/content' \
  -H 'Authorization: Bearer sk-xxxxxxxxxxxxxxxx' \
  -o result.mp4

任务还没完成时该端点不返回半成品,会按任务状态给出错误;也可以直接用 result_url / metadata.url。

轮询建议​

任务耗时通常从十几秒到几分钟不等,建议:

  • 首次查询延迟 5 秒以上,之后每次间隔 5 秒;单次任务轮询上限 10 次左右。
  • 命中终态立即停止;连续查询失败不要重试到无限(网络类错误重试 2~3 次即可)。
  • 长耗时模型(1080P、长时长)请放宽上限,或改用 callback_url 回调。

错误响应​

JSON 接口的错误体形如:

json
{
  "error": {
    "code": "task_not_exist",
    "message": "task_not_exist"
  }
}

常见错误码:

错误码触发条件处理方式
task_not_exist任务 ID 不存在,或不属于当前 API Key检查任务 ID 是否来自同一个 Key 的提交
invalid_channel_id终态任务缺少可用的平台信息(数据异常)用控制台任务详情核对,必要时重新提交
not_implemented该模型所在接入方式不支持 OpenAI 视频查询格式用该模型文档页给出的查询端点
quota_not_enough当前 API Key 的可用量不足更换一个可用的 Key
convert_to_openai_video_failed结果转换失败(上游返回异常)稍后重试;持续失败请提交任务详情

常见问题​

  • 提交返回 model 不存在:确认模型名拼写,并用模型列表核对当前实例启用的模型。
  • duration 传了字符串没生效:本接口同时接受数字与数字字符串,但不要传 "5s" 这类带单位的写法,只接受纯数字或纯数字字符串。
  • 图生视频提示图片不可访问:参考图必须是公网可访问的 URL;本地文件先上传到对象存储。
  • remix 报任务不存在:路径里的 {video_id} 必须是本 Key 自己提交成功过的任务 ID。
  • 查询一直 in_progress:模型正在生成,或任务在排队。可用控制台任务页核对详细状态与进度。

在线调试​