VibeAPIVibeAPI 开发者文档

视频生成概览

万相 3.0 · Seedance · MiniMax H3 · Grok Imagine。异步提交轮询取片,三个系列的计费口径并不一致

视频生成是异步的:提交拿到 task_id,轮询到 completed,再取片。 一次生成通常 3 到 8 分钟,长时长更久。

POST  /v1/videos                    提交任务
GET   /v1/videos/{task_id}          查询状态
GET   /v1/videos/{task_id}/content  下载成片

三个接口共用同一把 Key,都带 Authorization: Bearer <API_KEY>

因为是异步的,这里不受 120 秒超时的约束——提交请求本身很快返回,长耗时发生在 轮询之间。这是视频与文本、图像端点最大的不同。

基本调用

提交、轮询、取片三步。官方 SDK 未覆盖这组接口,直接发 HTTP 即可。

# 1. 提交
curl -X POST "https://www.vibeapi.cn/v1/videos" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video-720p",
    "prompt": "一只猫在窗台上打盹,阳光缓缓移动",
    "seconds": "5",
    "aspect_ratio": "16:9"
  }'

# 2. 轮询(每 10~15 秒一次)
curl "https://www.vibeapi.cn/v1/videos/$TASK_ID" -H "Authorization: Bearer $API_KEY"

# 3. 取片
curl -L "https://www.vibeapi.cn/v1/videos/$TASK_ID/content" \
  -H "Authorization: Bearer $API_KEY" -o output.mp4
import time, requests

BASE = "https://www.vibeapi.cn/v1"
H = {"Authorization": "Bearer YOUR_API_KEY"}

task = requests.post(f"{BASE}/videos", headers=H, json={
    "model": "wan3.0-video-720p",
    "prompt": "一只猫在窗台上打盹,阳光缓缓移动",
    "seconds": "5",              # wan3.0 传字符串
    "aspect_ratio": "16:9",
}).json()
task_id = task["id"]

while True:
    s = requests.get(f"{BASE}/videos/{task_id}", headers=H).json()
    if s["status"] in ("completed", "failed"):
        break
    time.sleep(12)               # 每 10~15 秒一次,超时按 15 分钟设

if s["status"] == "completed":
    # metadata.url 多数模型指向 /content,H3 则是对象存储直链
    url = s.get("metadata", {}).get("url") or f"{BASE}/videos/{task_id}/content"
    mp4 = requests.get(url, headers=H).content
    open("output.mp4", "wb").write(mp4)
import fs from "fs";

const BASE = "https://www.vibeapi.cn/v1";
const H = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

const task = await (await fetch(`${BASE}/videos`, {
  method: "POST",
  headers: H,
  body: JSON.stringify({
    model: "wan3.0-video-720p",
    prompt: "一只猫在窗台上打盹,阳光缓缓移动",
    seconds: "5",              // wan3.0 传字符串
    aspect_ratio: "16:9",
  }),
})).json();

let s;
while (true) {
  s = await (await fetch(`${BASE}/videos/${task.id}`, { headers: H })).json();
  if (s.status === "completed" || s.status === "failed") break;
  await sleep(12_000);         // 每 10~15 秒一次,超时按 15 分钟设
}

if (s.status === "completed") {
  // metadata.url 多数模型指向 /content,H3 则是对象存储直链
  const url = s.metadata?.url ?? `${BASE}/videos/${task.id}/content`;
  const mp4 = Buffer.from(await (await fetch(url, { headers: H })).arrayBuffer());
  fs.writeFileSync("output.mp4", mp4);
}

所有参数行为、分辨率与计费口径均来自真实调用,最后验证:2026-09-05。怎么调得好看,见视频生成工作流

本页结论来自对本网关的真实调用,最后验证:2026-09-05。

页面内容
万相 3.0文生 / 图生视频,分辨率在模型名里,首尾帧与参考视频
Seedance一口价 30 秒长片,三个型号的差异
MiniMax H3图 / 视频 / 音频三类参考素材,768P
Grok 视频按秒计费,走 Grok 自己的端点
视频生成工作流先出 4K 参考图再喂视频模型、无缝循环

三个接口

视频生成是异步的:提交拿到 task_id,轮询到 completed,再取片。 一次生成通常 3 到 8 分钟,长时长更久。三个接口共用同一把 Key。

POST https://www.vibeapi.cn/v1/videos                    提交任务
GET  https://www.vibeapi.cn/v1/videos/{task_id}          查询状态
GET  https://www.vibeapi.cn/v1/videos/{task_id}/content  下载成片

/content 对所有模型都可用,需带同一个 Authorization 头。 查询响应里的 metadata.url 分两种:多数模型回的就是上面那个 /content 地址; MiniMax H3 回的是对象存储直链,可以不带鉴权直接下载,也省一次中转。 两种都能用,写代码时取 metadata.url 即可,不要假设它一定指向我们的域名。

模型与计费

同一个 /v1/videos 接口下,三个系列的收费方式并不一致。

wan3.0 系列MiniMax H3seedance 系列
计费口径按秒 — 单价 × 时长按秒 — 单价 × 时长一口价 — 与时长无关
时长参数seconds,字符串secondsdurationduration,数字
分辨率写在模型名里,三档固定 768P固定
时长范围推荐 5–15 秒1–15 秒整数30 秒(seedance-2.5
画面比例aspect_ratio,四档含 adaptive六档固定,另有条件可用的 adaptiveaspect_ratio,逐型号不同

seedance 传 4 秒还是 15 秒价钱一样,用满时长才划算;wan3.0 与 H3 每多一秒都在计费。

全部模型

模型能力输出计费
wan3.0-video-{480p,720p,1080p}文生 / 图生 / 参考视频832×480 / 1280×720 / 1920×1080按输出 + 参考视频总时长
wan3.0-video-prime-*同上,高速版同上按秒,单价高约 20%
wan3.0-image-*图生视频专用,不收参考视频同上三档仅按输出时长
wan3.0-image-prime-*同上,高速版同上三档仅按输出时长
seedance-2.5文生 / 图生,固定 30 秒,参考图最多 9 张1280×720,全比例一口价
seedance-2.0-i2v图生视频,参考图必填 1–9 张,5–15 秒,另收 3 视频 / 3 音频resolution 可选 720p / 1080p,比例三选一一口价
MiniMax-H3文生 / 参考图生,1–15 秒,9 图 / 3 视频 / 3 音频参考固定 768P,六种比例按秒

seedance-2.0 已下架。

单价见 https://www.vibeapi.cn/pricing

轮询与取片

状态走 queuedin_progresscompleted。建议每 10 到 15 秒查一次,超时按 15 分钟设。

curl "https://www.vibeapi.cn/v1/videos/$TASK_ID" -H "Authorization: Bearer $API_KEY"

完成时:

{
  "id": "task_397b84onbn1ML8uBNhsiaQP3gafAe3AI",
  "status": "completed",
  "progress": 100,
  "metadata": { "url": "https://www.vibeapi.cn/v1/videos/task_397b.../content" }
}

下载:

curl -L "https://www.vibeapi.cn/v1/videos/$TASK_ID/content" \
  -H "Authorization: Bearer $API_KEY" -o output.mp4

完整 Python 示例

import os, time, requests

BASE = "https://www.vibeapi.cn/v1"
H = {"Authorization": f"Bearer {os.environ['VIBEAPI_KEY']}"}

def generate(payload, timeout=900, interval=12):
    task = requests.post(f"{BASE}/videos", headers=H, json=payload, timeout=120).json()
    if "id" not in task:
        raise RuntimeError(f"提交失败: {task}")
    tid = task["id"]
    print("已提交", tid)

    deadline = time.time() + timeout
    while time.time() < deadline:
        r = requests.get(f"{BASE}/videos/{tid}", headers=H, timeout=60).json()
        status = r.get("status")
        if status == "completed":
            break
        if status == "failed":
            raise RuntimeError(f"生成失败: {r.get('error')}")
        time.sleep(interval)
    else:
        raise TimeoutError(f"{timeout} 秒内未完成: {tid}")

    mp4 = requests.get(f"{BASE}/videos/{tid}/content", headers=H, timeout=600)
    mp4.raise_for_status()
    return tid, mp4.content

tid, data = generate({
    "model": "wan3.0-video-1080p",
    "prompt": "伊卡洛斯坠落。少年蜡制的双翼在刺目烈日下崩解成漫天金色羽毛,"
              "自极高处向湛蓝的爱琴海坠落,云层翻涌,镜头自远处缓慢仰摇",
    "seconds": "5",
    "aspect_ratio": "16:9",
})
open(f"{tid}.mp4", "wb").write(data)

样片:https://file-hub-dev.tianshu.sh/20260904/video-models/video/icarus-1080p.mp4

一条 15 秒的 1080P 成片通常 40 到 230 MB,码率很高,做网页背景前建议自行转码压缩。

错误与退款

提交阶段报错,额度不扣;任务失败,额度全额退回(用量日志里失败任务额度记为 0)。

现象原因怎么办
model_not_foundKey 所在分组没有这个模型确认 Key 分组,或换模型名
HTTP 400,提示缺时长没传 seconds / duration补上;wan3.0 传字符串,seedance 传数字
提示该模型维护中模型临时不可用换模型,或稍后重试
提交成功但很快 failed生成失败额度已全额退回,直接重试

参考素材导致失败的两个常见原因:

  1. 链接不是公网可直接下载。 要登录、要 Cookie、是分享页而非直链都不行。 贴进无痕窗口能直接下载才算数。
  2. 在提示词里写了比例或时长。 「竖屏」「16:9」「8 秒」会和参数冲突, 比例和时长只用 aspect_ratioseconds 控制。

能力边界

做不到说明
续写 / 剪辑 / 延长只做单条生成
固定随机种子同一提示词两次结果不同,没有 seed 参数
任意模型收参考视频wan3.0-image-*seedance-2.5 不收;其余收
H3 上用首尾帧上游不允许首尾帧与参考图混用,本接口只开放参考图。要首尾帧请用 wan3.0-image-*
成片长期保留取到就存自己那边
完成回调只能轮询,没有 Webhook

要点

  • 先分清计费口径:wan3.0 与 MiniMax H3 按秒,seedance 一口价
  • 分辨率写在模型名里,请求体里的 size 覆盖不了它。
  • seedance 三个型号能力不同:时长、比例、参考视频/音频的支持都不一样,别按系列套。
  • 参考素材必须是公网可直接下载的 HTTPS 直链,不能要登录。
  • 比例和时长只用参数控制,别写进提示词,会冲突。
  • wan3.0-video-*参考视频时长计入计费wan3.0-image-* 不计。
  • 任务失败全额退款,重试即可;seedance-2.5 请预留一次重试。
  • H3 的分辨率不用传,固定 768P;adaptive 比例只在带了图或视频时可用。
  • 接口以本页为准,不要照上游厂商的原文调用我们的域名——协议由网关翻译,端点和请求体都不一样。

想让画面更好看,接着读视频生成工作流

在线调试

填入你自己的 API Key 即可直接发起请求,参数表与响应结构由接口定义生成。

提交任务

POST
/v1/videos

Authorization

BearerAuth

AuthorizationBearer <token>

使用 Bearer Token 认证。 格式: Authorization: Bearer sk-xxxxxx

In: header

Request Body

multipart/form-data

model?string

模型/风格 ID

prompt?string

文本描述提示词

image?string

图片输入 (URL 或 Base64)

duration?number

视频时长(秒)

width?integer

视频宽度

height?integer

视频高度

fps?integer

视频帧率

seed?integer

随机种子

n?integer

生成视频数量

response_format?string

响应格式

user?string

用户标识

metadata?

扩展参数 (如 negative_prompt, style, quality_level 等)

Response Body

application/json

application/json

curl -X POST "https://www.vibeapi.cn/v1/videos"
{
  "id": "string",
  "object": "string",
  "model": "string",
  "status": "string",
  "progress": 0,
  "created_at": 0,
  "seconds": "string",
  "completed_at": 0,
  "expires_at": 0,
  "size": "string",
  "error": {
    "message": "string",
    "code": "string"
  },
  "metadata": {}
}
{
  "error": {
    "message": "string",
    "type": "string",
    "param": "string",
    "code": "string"
  }
}

查询状态

GET
/v1/videos/{task_id}

Authorization

BearerAuth

AuthorizationBearer <token>

使用 Bearer Token 认证。 格式: Authorization: Bearer sk-xxxxxx

In: header

Path Parameters

task_id*string

视频任务 ID

Response Body

application/json

application/json

curl -X GET "https://www.vibeapi.cn/v1/videos/string"
{
  "id": "string",
  "object": "string",
  "model": "string",
  "status": "string",
  "progress": 0,
  "created_at": 0,
  "seconds": "string"
}
{
  "error": {
    "message": "string",
    "type": "string",
    "param": "string",
    "code": "string"
  }
}

下载成片

GET
/v1/videos/{task_id}/content

Authorization

BearerAuth

AuthorizationBearer <token>

使用 Bearer Token 认证。 格式: Authorization: Bearer sk-xxxxxx

In: header

Path Parameters

task_id*string

视频任务 ID

Response Body

video/mp4

application/json

curl -X GET "https://www.vibeapi.cn/v1/videos/string/content"
"string"
{
  "error": {
    "message": "string",
    "type": "string",
    "param": "string",
    "code": "string"
  }
}