Open API v1 · Vidrush V1

Put AI video generation behind your product

The Vidrush Open API is an asynchronous generation gateway. Create returns a task immediately, the website and API share one credit ledger, and every public video model — Vidrush V1, Seedance 2.0, Veo 3.1, Kling 2.6, MiniMax H3 and more — sits behind the same request shape. Images, music, speech and sound effects ride the same task lifecycle.

  • Text-to-Video: generate from a prompt alone.
  • Image-to-Video / Frames-to-Video: animate one image, or bridge a first and last frame.
  • Reference-to-Video / Video-to-Video: keep identity from reference images or restyle an existing clip.

Quickstart

Any signed-in user can create an sk_ key under Settings → API Keys. The secret is shown once — store it on your server.

  1. 1

    Set environment variables

    Every request is sent to the base URL with the key as a Bearer token.

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

    Quote credits (optional, free)

    POST the same body to /videos/quote and read data.costCredits. Quote and create share one billing formula.

  3. 3

    Create the task

    POST /videos. Success is 200 with the task object; data.id is your handle and data.costCredits is what was charged.

  4. 4

    Poll the task

    GET /tasks/{id} every 5 seconds until status is success, failed or canceled. On success, play the URLs in data.taskUrls.

Integrate into your video product

Keep Vidrush behind your backend. Users talk only to your product; your service owns the API key and task sync.

01

Product UI

Collects the prompt, model and media.

02

Your backend

Validates the user, stores a record, then calls Vidrush.

03

Vidrush API

Charges credits and returns the task id.

04

Result page

Reads your task status and plays the video.

Boundary: Do not call the Open API from the browser. Never expose the API key or billing decisions to the client.

Authentication

Authorizationstring · headerrequired

Every endpoint requires Authorization: Bearer $VIDRUSH_API_KEY. Keys are created and revoked under Settings → API Keys and inherit the account's credit balance.

Content-Typestring · headerrequired

application/json on every POST. Request bodies are plain JSON objects; arrays of URLs must be public HTTPS.

Response envelope

Every response is {"code", "message", "data"}. code 0 is success and data carries the payload; non-zero code plus an HTTP error status means the request did not go through. Branch on the HTTP status and code, not the message text.

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

Models and capabilities

GET/api/v1/modelsendpoint

Returns the public models available right now — durations, resolutions, aspect ratios, audio toggle and credit pricing per mode. This is the live source of truth; the table below is rendered from the same catalog.

?type=video|image|music type selects the catalog: video (default), image or music. Responses are cacheable for an hour.

21 public video models

Model IDVendorModesDurationsResolutionsCredits
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"
      },
      "…"
    ]
  }
}

Quote a generation

POST/api/v1/videos/quoteendpoint

Use the exact body you would send to create. Nothing is created and no credits move; you get back the model, mode and costCredits that create would charge.

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

Quote first, then decide whether the user can submit — combine it with GET /credits for a balance check.

Create a video generation

POST/api/v1/videosendpoint

Creates an asynchronous video task, charges costCredits up front, and returns the task object. Use the monitor on the right to switch model, mode and language.

modelstringrequired

A current model ID from GET /models. Use the public IDs shown in the table above, not upstream aliases.

promptstringrequired

Non-empty video instruction. Describe subject, action, camera and style; the model receives it verbatim.

modeenum

text-to-video, image-to-video, frames-to-video, reference-to-video or video-to-video; must be supported by the model. Defaults to text-to-video, or image-to-video when image_urls is present.

image_urlsstring[]

Public HTTPS image URLs. image-to-video takes one, frames-to-video takes first and last, reference-to-video takes up to the model's slot count.

video_urlsstring[]

Public HTTPS video URLs for video-to-video models. Send options.source_video_duration_seconds when the model is priced per second.

optionsobject

Model-specific controls. Only send values the selected model and mode advertise in GET /models.

options

fieldtypedescription
durationstringA supported duration such as "5s" or "10s".
resolutionstringA supported resolution such as "720p", "768P" or "1080p".
aspect_ratiostringA supported ratio such as "16:9", "9:16" or "Auto".
audiobooleanOnly when the model/mode exposes audio_toggle: true.
source_video_duration_secondsnumberRequired with video_urls on per-second-priced models.
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"
  }
}

The task record is sanitized before it is returned: provider names, internal prompts and request fingerprints are never exposed.

Get a task

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

Poll until status is success, failed or canceled. The response is the same sanitized task object create returned, refreshed from the provider when the task is still in flight.

Status lifecycle

status
pendingAccepted and queued. Keep polling.
processingThe provider is generating. Keep polling.
successDone. Play or download the URLs in data.taskUrls.
failedGeneration failed. Credits were refunded automatically.
canceledThe provider canceled the job. Credits were refunded automatically.
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"
  }
}

Poll every 5 seconds. Result URLs are platform URLs, not upstream temporary links, so they are safe to store.

List tasks

GET/api/v1/tasksendpoint

Your own tasks, newest first, in the same sanitized shape as GET /tasks/{id}.

statusenum

pending, processing, success, failed or canceled.

media_typeenum

video, image, music, audio or speech.

pageinteger

1-based page, default 1.

limitinteger

1–100, default 20. data.has_more tells you whether to fetch the next page.

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
  }
}

Create an image

POST/api/v1/imagesendpoint

Text-to-image and image-to-image on the same task lifecycle. Discover models with GET /models?type=image.

modelstringrequired

A current image model ID such as nano-banana-2.

promptstringrequired

Non-empty image instruction.

sceneenum

text-to-image or image-to-image. Defaults to image-to-image when image_urls is present.

image_urlsstring[]

Public HTTPS image URLs; required for image-to-image.

optionsobject

aspect_ratio (e.g. "1:1", "16:9") and quality ("1K", "2K", "4K") as advertised by the model.

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"
  }
}

Create music

POST/api/v1/musicendpoint

Generate an original track from a prompt. One model is exposed today; GET /models?type=music lists its controls.

promptstringrequired

Description of the track — mood, genre, instruments, tempo.

options.duration_secondsnumber

Target length, 3–300 seconds.

options.instrumentalboolean

true for no vocals.

options.style / options.lyricsstring

Optional style hint and lyrics.

Speech and sound effects

Text-to-speech uses the ElevenLabs voice catalog; sound effects take a prompt. Both return a task with the audio URL in taskUrls.

POST/api/v1/speechendpoint
textstringrequired

Non-empty text to speak.

voice_idstringrequired

A voice id from GET /voices.

optionsobject

model_id, speed (0.25–4), stability (0–1), similarity_boost (0–1).

POST/api/v1/sound-effectsendpoint
promptstringrequired

Description of the sound.

optionsobject

duration_seconds (0.5–22), prompt_influence (0–1).

GET/api/v1/voicesendpoint

GET /voices returns the public voice catalog with ids, names, languages and preview URLs. No authentication is required for the catalog.

Credit balance

GET/api/v1/creditsendpoint

Returns data.remainingCredits for the account behind the key. Quote first, then compare against the balance before you let a user submit.

Billing

The website and API use the same prices for the same account. Credits are charged when a task is accepted and returned when it cannot be delivered.

StageBehavior
quoteNo charge; returns costCredits.
createCharges costCredits and returns the task.
successThe charge stands; result URLs are yours to keep.
failed / canceledcostCredits is refunded to the balance automatically.

Error handling

Branch on the HTTP status and the stable code field. 500 is safe to retry.

HTTPcodeMeaning
400-1Malformed body, unknown model, unsupported mode or option — the message says which.
401-1001Missing, invalid or revoked API key.
402-1002Insufficient credits for costCredits. Top up or pick a cheaper option.
404-1Task does not exist or belongs to another account.
500-1Provider or internal failure; the public message is generic. Retry.
Machine-readable:llms.txtFull guidesLast updated