Open API v1 · Vidrush V1

把 AI 视频生成放进你的产品

Vidrush Open API 是一个异步生成网关:创建请求立即返回任务,网站与 API 共用同一份积分账本,所有公开视频模型——Vidrush V1、Seedance 2.0、Veo 3.1、Kling 2.6、MiniMax H3 等——都使用同一种请求结构。图片、音乐、语音和音效走同样的任务生命周期。

  • 文生视频:仅凭一段提示词生成。
  • 图生视频 / 首尾帧:让一张图动起来,或在首帧与尾帧之间补全运动。
  • 参考生视频 / 视频转视频:用参考图保持角色一致,或对已有片段重新风格化。

快速开始

任何已登录用户都可以在「设置 → API Keys」创建 sk_ 密钥。密钥只显示一次,请保存在你的服务器端。

  1. 1

    设置环境变量

    所有请求都发往基础地址,并以 Bearer token 形式携带密钥。

    SHELL
    export VIDRUSH_BASE_URL=https://vidrush-ai.com/api/v1
    export VIDRUSH_API_KEY=sk-xxx
  2. 2

    报价(可选,免费)

    把与创建完全相同的请求体 POST 到 /videos/quote,读取 data.costCredits。报价与创建使用同一套计费公式。

  3. 3

    创建任务

    POST /videos。成功返回 200 与任务对象;data.id 是任务句柄,data.costCredits 是实际扣除的积分。

  4. 4

    轮询任务

    每 5 秒 GET /tasks/{id},直到 status 变为 success、failed 或 canceled。成功后播放 data.taskUrls 中的地址。

接入到你的视频产品

让 Vidrush 留在你的后端。用户只与你的产品交互;由你的服务持有 API Key 并同步任务状态。

01

产品界面

收集提示词、模型和素材。

02

你的后端

校验用户、落库记录,然后调用 Vidrush。

03

Vidrush API

扣除积分并返回任务 id。

04

结果页

读取你的任务状态并播放视频。

边界: 不要在浏览器中直接调用 Open API。永远不要把 API Key 或计费决策暴露给客户端。

鉴权

Authorizationstring · headerrequired

所有接口都要求 Authorization: Bearer $VIDRUSH_API_KEY。密钥在「设置 → API Keys」中创建和吊销,并共用账户的积分余额。

Content-Typestring · headerrequired

所有 POST 请求使用 application/json。请求体是普通 JSON 对象;URL 数组必须是公网可访问的 HTTPS 地址。

响应结构

所有响应都是 {"code", "message", "data"}。code 为 0 表示成功,data 携带数据;非 0 的 code 加上 HTTP 错误状态表示请求未被接受。请根据 HTTP 状态与 code 分支处理,不要依赖 message 文本。

200 · GET /credits
{
  "code": 0,
  "message": "ok",
  "data": {
    "remainingCredits": 1240
  }
}

模型与能力

GET/api/v1/modelsendpoint

返回当前可用的公开模型:每种模式支持的时长、分辨率、画幅、音频开关和积分价格。这是实时的数据来源;下表由同一份目录渲染。

?type=video|image|music type 选择目录:video(默认)、image 或 music。响应可缓存一小时。

21 个公开视频模型

模型 ID厂商模式时长分辨率积分
p-videoPruna AItext-to-videoimage-to-video1s – 20s720p · 1080p4-160 credits
seedance-2-0ByteDancetext-to-videoimage-to-videoframes-to-videoreference-to-video4s – 15s480p · 720p · 1080p · 4k60-3270 credits
seedance-2-0-fastByteDancetext-to-videoimage-to-videoframes-to-videoreference-to-video4s – 15s480p · 720p42-420 credits
seedance-2-miniByteDancetext-to-videoimage-to-videoframes-to-videoreference-to-video4s – 15s480p · 720p16-150 credits
seedance-1-5-proByteDancetext-to-videoimage-to-video4s – 12s480p · 720p · 1080p7-60 credits
grok-imagineGroktext-to-videoimage-to-video6s – 30s480p · 720p10-90 credits
grok-imagine-1-5Groktext-to-videoimage-to-video6s – 30s480p · 720p18-90 credits
kling-2-6Klingtext-to-videoimage-to-video5s – 10s55-220 credits
runwayRunwaytext-to-videoimage-to-video5s – 10s720p · 1080p12-30 credits
veo-3-1Googletext-to-videoimage-to-videoframes-to-videoreference-to-video720p · 1080p · 4k225-285 credits
veo-3-1-fastGoogletext-to-videoimage-to-videoframes-to-videoreference-to-video720p · 1080p · 4k30-100 credits
veo-3-1-liteGoogletext-to-videoimage-to-videoframes-to-videoreference-to-video720p · 1080p · 4k15-75 credits
gemini-omni-cheapGoogletext-to-videoimage-to-videovideo-to-video10s720p35 credits
gemini-omniGoogletext-to-videoimage-to-videovideo-to-video10s720p · 1080p50 credits
gemini-omni-videoGoogletext-to-videoimage-to-videovideo-to-video4s – 10s720p · 1080p · 4k45-180 credits
flux-3Black Forest Labstext-to-videoimage-to-videovideo-to-videoframes-to-video5s – 20s80-320 credits
minimax-h3MiniMaxtext-to-videoimage-to-videoreference-to-video4s – 15s768P · 2K72-435 credits
seedence-1-0-proByteDancetext-to-videoimage-to-video5s – 10s480p · 720p · 1080p14-42 credits
seedence-1-0-pro-fastByteDanceimage-to-video5s – 10s720p · 1080p16+ credits
seedence-1-0-liteByteDancetext-to-videoimage-to-video5s – 10s480p · 720p · 1080p10-40 credits
vidrush-v1VidRushtext-to-videoimage-to-videoframes-to-videoreference-to-video1s – 15s480p · 768P1-15 credits
200 · GET /models
{
  "code": 0,
  "message": "ok",
  "data": {
    "models": [
      {
        "id": "vidrush-v1",
        "label": "Vidrush V1",
        "vendor": "VidRush",
        "modes": {
          "text-to-video": {
            "durations": [
              "1s",
              "2s",
              "3s",
              "4s",
              "5s",
              "6s",
              "7s",
              "8s",
              "9s",
              "10s",
              "11s",
              "12s",
              "13s",
              "14s",
              "15s"
            ],
            "resolutions": [
              "480p",
              "768P"
            ],
            "aspect_ratios": [
              "16:9",
              "9:16"
            ],
            "audio_toggle": false,
            "credits_per_second": {
              "480p": 1,
              "768P": 1
            }
          },
          "image-to-video": {
            "durations": [
              "1s",
              "2s",
              "3s",
              "4s",
              "5s",
              "6s",
              "7s",
              "8s",
              "9s",
              "10s",
              "11s",
              "12s",
              "13s",
              "14s",
              "15s"
            ],
            "resolutions": [
              "480p",
              "768P"
            ],
            "aspect_ratios": [
              "16:9",
              "9:16"
            ],
            "audio_toggle": false,
            "credits_per_second": {
              "480p": 1,
              "768P": 1
            }
          },
          "frames-to-video": {
            "durations": [
              "1s",
              "2s",
              "3s",
              "4s",
              "5s",
              "6s",
              "7s",
              "8s",
              "9s",
              "10s",
              "11s",
              "12s",
              "13s",
              "14s",
              "15s"
            ],
            "resolutions": [
              "480p",
              "768P"
            ],
            "aspect_ratios": [
              "16:9",
              "9:16"
            ],
            "audio_toggle": false,
            "credits_per_second": {
              "480p": 1,
              "768P": 1
            }
          },
          "reference-to-video": {
            "durations": [
              "1s",
              "2s",
              "3s",
              "4s",
              "5s",
              "6s",
              "7s",
              "8s",
              "9s",
              "10s",
              "11s",
              "12s",
              "13s",
              "14s",
              "15s"
            ],
            "resolutions": [
              "480p",
              "768P"
            ],
            "aspect_ratios": [
              "16:9",
              "9:16"
            ],
            "audio_toggle": false,
            "credits_per_second": {
              "480p": 1,
              "768P": 1
            }
          }
        },
        "credits_label": "1-15 credits"
      },
      "…"
    ]
  }
}

生成报价

POST/api/v1/videos/quoteendpoint

使用与创建完全相同的请求体。不会创建任何任务、不会移动积分;返回创建时将会扣除的 model、mode 和 costCredits。

200 · POST /videos/quote
{
  "code": 0,
  "message": "ok",
  "data": {
    "model": "vidrush-v1",
    "mode": "text-to-video",
    "costCredits": 5
  }
}

先报价再决定用户能否提交——配合 GET /credits 做余额检查。

创建视频生成任务

POST/api/v1/videosendpoint

创建一个异步视频任务,预先扣除 costCredits,并返回任务对象。用右侧的监视面板切换模型、模式和语言。

modelstringrequired

来自 GET /models 的当前模型 ID。请使用上表中的公开 ID,不要发送上游别名。

promptstringrequired

非空的视频指令。描述主体、动作、镜头和风格;模型会原样接收。

modeenum

text-to-video、image-to-video、frames-to-video、reference-to-video 或 video-to-video,且必须被模型支持。默认 text-to-video;带 image_urls 时默认 image-to-video。

image_urlsstring[]

公网 HTTPS 图片地址。image-to-video 需要一张,frames-to-video 需要首尾两张,reference-to-video 最多到模型的参考位数量。

video_urlsstring[]

video-to-video 模型使用的公网 HTTPS 视频地址。按秒计价的模型需同时传 options.source_video_duration_seconds。

optionsobject

模型相关的控制项。只发送所选模型与模式在 GET /models 中声明的取值。

options

fieldtypedescription
durationstring支持的时长,例如 "5s" 或 "10s"。
resolutionstring支持的分辨率,例如 "720p"、"768P" 或 "1080p"。
aspect_ratiostring支持的画幅,例如 "16:9"、"9:16" 或 "Auto"。
audioboolean仅当模型/模式声明 audio_toggle: true 时有效。
source_video_duration_secondsnumber按秒计价的模型在使用 video_urls 时必填。
200 · POST /videos
{
  "code": 0,
  "message": "ok",
  "data": {
    "id": "task_01JQ9X2B6XK9K4VQY2QZ4H6W3R",
    "userId": "user_1",
    "mediaType": "video",
    "model": "vidrush-v1",
    "scene": "text-to-video",
    "status": "pending",
    "costCredits": 5,
    "taskId": null,
    "taskUrls": [],
    "createdAt": "2026-09-07T12:00:00.000Z",
    "updatedAt": "2026-09-07T12:00:00.000Z"
  }
}

任务记录在返回前会被脱敏:供应商名称、内部提示词与请求指纹永远不会暴露。

查询任务

GET/api/v1/tasks/{taskId}endpoint

轮询直到 status 为 success、failed 或 canceled。返回的是与创建时相同的脱敏任务对象;任务仍在进行时会从供应商刷新。

状态流转

status
pending已接受并排队。继续轮询。
processing供应商正在生成。继续轮询。
success完成。播放或下载 data.taskUrls 中的地址。
failed生成失败。积分已自动退回。
canceled供应商取消了任务。积分已自动退回。
200 · GET /tasks/{taskId}
{
  "code": 0,
  "message": "ok",
  "data": {
    "id": "task_01JQ9X2B6XK9K4VQY2QZ4H6W3R",
    "userId": "user_1",
    "mediaType": "video",
    "model": "vidrush-v1",
    "scene": "text-to-video",
    "status": "success",
    "costCredits": 5,
    "taskId": "prov_8f1c",
    "taskUrls": [
      "https://r2.vibevideo.app/vidrush/videos/task_01JQ9X2B.mp4"
    ],
    "createdAt": "2026-09-07T12:00:00.000Z",
    "updatedAt": "2026-09-07T12:02:41.000Z"
  }
}

每 5 秒轮询一次。结果地址是平台地址而非上游临时链接,可以放心保存。

任务列表

GET/api/v1/tasksendpoint

你自己的任务,按创建时间倒序,结构与 GET /tasks/{id} 相同。

statusenum

pending、processing、success、failed 或 canceled。

media_typeenum

video、image、music、audio 或 speech。

pageinteger

从 1 开始的页码,默认 1。

limitinteger

1–100,默认 20。data.has_more 表示是否还有下一页。

200 · GET /tasks?limit=20
{
  "code": 0,
  "message": "ok",
  "data": {
    "tasks": [
      {
        "id": "task_01JQ9X2B…",
        "status": "success",
        "mediaType": "video"
      },
      {
        "id": "task_01JQ9WZ4…",
        "status": "processing",
        "mediaType": "image"
      }
    ],
    "page": 1,
    "limit": 20,
    "has_more": false
  }
}

创建图片

POST/api/v1/imagesendpoint

文生图与图生图共用同一套任务生命周期。用 GET /models?type=image 查看模型。

modelstringrequired

当前图片模型 ID,例如 nano-banana-2。

promptstringrequired

非空的图片指令。

sceneenum

text-to-image 或 image-to-image。带 image_urls 时默认 image-to-image。

image_urlsstring[]

公网 HTTPS 图片地址;图生图必填。

optionsobject

模型声明的 aspect_ratio(如 "1:1"、"16:9")与 quality("1K"、"2K"、"4K")。

BODY · POST /images
{
  "model": "nano-banana-2",
  "prompt": "Editorial product shot of a ceramic mug on linen, soft window light",
  "options": {
    "aspect_ratio": "1:1",
    "quality": "2K"
  }
}

创建音乐

POST/api/v1/musicendpoint

根据提示词生成原创音轨。目前开放一个模型;GET /models?type=music 列出其控制项。

promptstringrequired

音轨描述——情绪、风格、乐器、节奏。

options.duration_secondsnumber

目标时长,3–300 秒。

options.instrumentalboolean

true 表示纯音乐无人声。

options.style / options.lyricsstring

可选的风格提示与歌词。

语音与音效

文字转语音使用 ElevenLabs 音色库;音效接受一段提示词。两者都返回任务,音频地址在 taskUrls 中。

POST/api/v1/speechendpoint
textstringrequired

要朗读的非空文本。

voice_idstringrequired

来自 GET /voices 的音色 id。

optionsobject

model_id、speed(0.25–4)、stability(0–1)、similarity_boost(0–1)。

POST/api/v1/sound-effectsendpoint
promptstringrequired

声音描述。

optionsobject

duration_seconds(0.5–22)、prompt_influence(0–1)。

GET/api/v1/voicesendpoint

GET /voices 返回公开音色库,包含 id、名称、语言和试听地址。读取音色库无需鉴权。

积分余额

GET/api/v1/creditsendpoint

返回该密钥所属账户的 data.remainingCredits。先报价,再与余额比较,然后决定是否允许用户提交。

计费

同一账户在网站和 API 中使用相同价格。任务被接受时扣除积分,无法交付时退回。

阶段行为
quote不扣费;返回 costCredits。
create扣除 costCredits 并返回任务。
success扣费生效;结果地址归你保存。
failed / canceledcostCredits 自动退回余额。

错误处理

根据 HTTP 状态与稳定的 code 字段分支处理。500 可以安全重试。

HTTPcode含义
400-1请求体格式错误、未知模型、不支持的模式或选项——message 会说明具体原因。
401-1001缺少、无效或已吊销的 API Key。
402-1002积分不足以支付 costCredits。请充值或选择更便宜的配置。
404-1任务不存在或属于其他账户。
500-1供应商或内部错误;对外 message 是通用文案。请重试。
机器可读:llms.txt完整指南最后更新