API 文档

WisGate 文本、图片、视频与通用接口调用说明

视频生成

OpenAI 兼容视频任务的创建、查询与内容下载。

通用视频生成

WisGate 提供 /v1/videos 创建和查询视频任务,使用接近 OpenAI Videos 的请求与任务结构。生成是异步操作:创建成功只说明收到任务,需要继续查询直到完成。

本页示例使用 sora-2,前提是当前 API Key 有对应可用渠道。其他视频模型必须使用其支持的时长、尺寸和素材类型。文本模型 deepseek-v4-flash 不用于视频生成。

接口清单

方法 路径 本平台行为
POST /v1/videos 创建视频任务,解析 JSON 或 multipart 表单
GET /v1/videos/{id} 查询当前用户任务快照
GET /v1/videos/{id}/content 代理上游视频二进制内容,有渠道限制,见下载说明

当前没有在该模块注册 GET /v1/videos 列表、DELETE /v1/videos/{id} 或 remix/edit/extension/角色管理端点。OpenAI 官方 Videos 的能力范围大于本平台当前公开实现。OpenAI Videos 参考

平台还有 /v1/video/generations 历史统一入口,其响应契约不能与本页混用。Seedance 推荐使用独立的 Seedance 生视频协议。

创建文生视频任务

curl --fail-with-body https://api.wisgate.cn/v1/videos \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "sora-2",
    "prompt": "清晨的海岸,海浪轻拍沙滩,镜头缓慢平移,无字幕。",
    "size": "1280x720",
    "seconds": "8"
  }'

这是参数组合示例,需当前渠道支持 sora-2、8 秒和该尺寸。不要由单个示例推导出所有模型的枚举值。

也可以使用 multipart。特别是直接上传参考图时使用表单:

curl --fail-with-body https://api.wisgate.cn/v1/videos \
  -H "Authorization: Bearer $WISGATE_API_KEY" \
  -F 'model=sora-2' \
  -F 'prompt=保持参考图主体,生成自然流畅的产品展示镜头。' \
  -F 'size=1280x720' \
  -F 'seconds=8' \
  -F 'input_reference=@reference.png;type=image/png'

不要手工设置 multipart 的 Content-Type,curl 会生成 boundary。将 reference.png 替换为本地图片文件。模型可能要求参考图尺寸、格式与输出参数匹配。

参数表

字段 类型 要求与限制
model string 必填,WisGate 模型名
prompt string 文生视频必填;部分渠道允许仅参考素材,但不是通用保证
seconds string / number 时长,推荐 OpenAI 风格字符串;允许值由模型决定
size string 像素尺寸,例如 1280x720;不要填写 Seedance 的 720p 代替
input_reference multipart file 上传参考图片;当前 Sora 路径保留文件,其他渠道有不同限制
duration number 平台兼容时长别名;同层同时提供时解析优先采用正数 seconds
resolution、ratio string 平台扩展,只有对应供应商转换器支持才生效
image / images string / string[] 平台 URL 图片扩展,依赖目标渠道,不是所有 OpenAI Videos 模型的通用字段
content array 平台多媒体扩展,依赖转换器;Seedance 复杂素材建议使用专用协议
n / video_count、frames、mode、metadata 各自模型类型 兼容扩展,不建议通用最小示例携带

本地 JSON 解析器还读取 options 中的尺寸/时长参数,优先级与顶层不同。建议只用一处定义参数,避免混合新旧格式产生歧义。未知 JSON 和表单字段在 Sora 路径可保留,但不等于所有上游支持,也不等于其他供应商路径同样透传。

平台不会静默把无法转换的音频/视频/上传文件都降级为纯文本。新分配路径对不匹配素材会拒绝请求,例如当前 Vertex 视频转换不支持图片参考、可灵转换仅支持一张参考图。参数可解析与供应商支持需分开判断。

创建响应与任务 ID

创建响应的字段数量随渠道不同,以下是结构示例:

{
  "id": "video_example",
  "object": "video",
  "model": "sora-2",
  "status": "queued",
  "progress": 0,
  "created_at": 1791504000
}

必须保存实际返回的 id,不要自行拼装上游任务号。平台可能使用公开任务 ID 映射。返回 2xx 与 queued 均不表示视频已经成功生成。

查询结果

curl --fail-with-body https://api.wisgate.cn/v1/videos/video_example \
  -H "Authorization: Bearer $WISGATE_API_KEY"
status 意义 下一步
queued 已提交或排队 稍后继续查询
in_progress 生成中 继续查询
completed 完成 下载结果
failed 失败 读取 error,停止轮询
unknown / 未识别值 平台兜底或上游扩展 保留原响应,按超时策略处理,不当作成功

部分供应商查询结果保留原始字段,不能要求所有渠道完全一致。常见返回字段:

字段 含义
id、object、model 任务标识、对象类型、模型
status、progress 状态与进度;progress 可能粗粒度更新
created_at、completed_at、expires_at Unix 秒时间戳;后两者可能缺失
seconds、size 输出参数,可能由上游返回
error.code、error.message 任务失败信息
meta_data.url 部分非 Sora 渠道提供的结果 URL,注意字段拼写

普通查询可能读本地快照,状态不一定立即随上游变化。建议每数秒查询一次,按业务设置总超时;这是客户端建议,不是平台固定 SLA。

Python 有界轮询示例(安装 requests,替换任务 ID):

import os
import time
import requests

task_id = "video_example"
headers = {"Authorization": "Bearer " + os.environ["WISGATE_API_KEY"]}
deadline = time.monotonic() + 900
while time.monotonic() < deadline:
    response = requests.get(
        f"https://api.wisgate.cn/v1/videos/{task_id}", headers=headers, timeout=30
    )
    response.raise_for_status()
    task = response.json()
    if task.get("status") == "completed":
        print(task)
        break
    if task.get("status") == "failed":
        raise RuntimeError(task.get("error", task))
    time.sleep(5)
else:
    raise TimeoutError("本次轮询超时;保存任务 ID,稍后继续查询,不要重复创建任务。")

下载

对于提供 OpenAI 兼容下载端点的上游:

curl --fail-with-body --location \
  https://api.wisgate.cn/v1/videos/video_example/content \
  --output result.mp4

该平台路由当前是匿名内容代理,不继承创建/查询使用的 API Key 鉴权,并设置公开缓存。因此内容链接及任务 ID 应按可访问资源管理。这里如实描述当前实现,不应写成“所有下载都受同一 Key 保护”。

下载实现会访问原渠道 /v1/videos/{provider_task_id}/content,不会自动把所有供应商的 URL 结果转换成同一个下载服务。若渠道只提供 meta_data.url 等结果地址,应直接下载该 URL。当前未实现 OpenAI 的 thumbnail/spritesheet variant 转发,不能承诺这些格式。

失败下载可能返回 JSON 错误,检查 HTTP 状态后再把文件当作视频。结果地址有时效性,成功后及时转存。

SDK 接入

如所用 OpenAI Python SDK 提供 Videos 资源,可按以下方式调用兼容入口;渠道差异仍以原始 HTTP 返回为准:

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["WISGATE_API_KEY"], base_url="https://api.wisgate.cn/v1")
task = client.videos.create(
    model="sora-2", prompt="清晨海岸,镜头缓慢平移。", seconds="8", size="1280x720"
)
print(task.id)
print(client.videos.retrieve(task.id))

不要因为 SDK 暴露了 list/delete/remix 等方法,就认为网关对应接口已经实现。

失败与重复提交

生成失败应查看查询响应中的 error;请求阶段错误可能是 OpenAI 风格 error,也可能是平台 {code,message,data}。客户端应先判断 HTTP 状态,再解析实际错误体。

提交超时并不能证明上游没有创建任务。保存已取得的任务 ID,避免重发相同请求造成重复生成。当前没有通用的 Idempotency-Key 幂等约定。429 或暂时性 5xx 可采用有界退避;参数错误先修改请求。