Authorizationstring · headerrequiredEvery endpoint requires Authorization: Bearer $VIDRUSH_API_KEY. Keys are created and revoked under Settings → API Keys and inherit the account's credit balance.
Open API v1 · Vidrush V1
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.
Any signed-in user can create an sk_ key under Settings → API Keys. The secret is shown once — store it on your server.
Set environment variables
Every request is sent to the base URL with the key as a Bearer token.
export VIDRUSH_BASE_URL=https://vidrush-ai.com/api/v1
export VIDRUSH_API_KEY=sk-xxxQuote credits (optional, free)
POST the same body to /videos/quote and read data.costCredits. Quote and create share one billing formula.
Create the task
POST /videos. Success is 200 with the task object; data.id is your handle and data.costCredits is what was charged.
Poll the task
GET /tasks/{id} every 5 seconds until status is success, failed or canceled. On success, play the URLs in data.taskUrls.
Keep Vidrush behind your backend. Users talk only to your product; your service owns the API key and task sync.
Product UI
Collects the prompt, model and media.
Your backend
Validates the user, stores a record, then calls Vidrush.
Vidrush API
Charges credits and returns the task id.
Result page
Reads your task status and plays the video.
Authorizationstring · headerrequiredEvery 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 · headerrequiredapplication/json on every POST. Request bodies are plain JSON objects; arrays of URLs must be public HTTPS.
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.
{
"code": 0,
"message": "ok",
"data": {
"remainingCredits": 1240
}
}/api/v1/modelsendpointReturns 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 ID | Vendor | Modes | Durations | Resolutions | Credits |
|---|---|---|---|---|---|
| p-video | Pruna AI | text-to-videoimage-to-video | 1s – 20s | 720p · 1080p | 4-160 credits |
| seedance-2-0 | ByteDance | text-to-videoimage-to-videoframes-to-videoreference-to-video | 4s – 15s | 480p · 720p · 1080p · 4k | 60-3270 credits |
| seedance-2-0-fast | ByteDance | text-to-videoimage-to-videoframes-to-videoreference-to-video | 4s – 15s | 480p · 720p | 42-420 credits |
| seedance-2-mini | ByteDance | text-to-videoimage-to-videoframes-to-videoreference-to-video | 4s – 15s | 480p · 720p | 16-150 credits |
| seedance-1-5-pro | ByteDance | text-to-videoimage-to-video | 4s – 12s | 480p · 720p · 1080p | 7-60 credits |
| grok-imagine | Grok | text-to-videoimage-to-video | 6s – 30s | 480p · 720p | 10-90 credits |
| grok-imagine-1-5 | Grok | text-to-videoimage-to-video | 6s – 30s | 480p · 720p | 18-90 credits |
| kling-2-6 | Kling | text-to-videoimage-to-video | 5s – 10s | — | 55-220 credits |
| runway | Runway | text-to-videoimage-to-video | 5s – 10s | 720p · 1080p | 12-30 credits |
| veo-3-1 | text-to-videoimage-to-videoframes-to-videoreference-to-video | — | 720p · 1080p · 4k | 225-285 credits | |
| veo-3-1-fast | text-to-videoimage-to-videoframes-to-videoreference-to-video | — | 720p · 1080p · 4k | 30-100 credits | |
| veo-3-1-lite | text-to-videoimage-to-videoframes-to-videoreference-to-video | — | 720p · 1080p · 4k | 15-75 credits | |
| gemini-omni-cheap | text-to-videoimage-to-videovideo-to-video | 10s | 720p | 35 credits | |
| gemini-omni | text-to-videoimage-to-videovideo-to-video | 10s | 720p · 1080p | 50 credits | |
| gemini-omni-video | text-to-videoimage-to-videovideo-to-video | 4s – 10s | 720p · 1080p · 4k | 45-180 credits | |
| flux-3 | Black Forest Labs | text-to-videoimage-to-videovideo-to-videoframes-to-video | 5s – 20s | — | 80-320 credits |
| minimax-h3 | MiniMax | text-to-videoimage-to-videoreference-to-video | 4s – 15s | 768P · 2K | 72-435 credits |
| seedence-1-0-pro | ByteDance | text-to-videoimage-to-video | 5s – 10s | 480p · 720p · 1080p | 14-42 credits |
| seedence-1-0-pro-fast | ByteDance | image-to-video | 5s – 10s | 720p · 1080p | 16+ credits |
| seedence-1-0-lite | ByteDance | text-to-videoimage-to-video | 5s – 10s | 480p · 720p · 1080p | 10-40 credits |
| vidrush-v1 | VidRush | text-to-videoimage-to-videoframes-to-videoreference-to-video | 1s – 15s | 480p · 768P | 1-15 credits |
{
"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"
},
"…"
]
}
}/api/v1/videos/quoteendpointUse 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.
{
"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.
/api/v1/videosendpointCreates 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.
modelstringrequiredA current model ID from GET /models. Use the public IDs shown in the table above, not upstream aliases.
promptstringrequiredNon-empty video instruction. Describe subject, action, camera and style; the model receives it verbatim.
modeenumtext-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.
optionsobjectModel-specific controls. Only send values the selected model and mode advertise in GET /models.
| field | type | description |
|---|---|---|
| duration | string | A supported duration such as "5s" or "10s". |
| resolution | string | A supported resolution such as "720p", "768P" or "1080p". |
| aspect_ratio | string | A supported ratio such as "16:9", "9:16" or "Auto". |
| audio | boolean | Only when the model/mode exposes audio_toggle: true. |
| source_video_duration_seconds | number | Required with video_urls on per-second-priced models. |
{
"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.
/api/v1/tasks/{taskId}endpointPoll 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 | |
|---|---|
| pending | Accepted and queued. Keep polling. |
| processing | The provider is generating. Keep polling. |
| success | Done. Play or download the URLs in data.taskUrls. |
| failed | Generation failed. Credits were refunded automatically. |
| canceled | The provider canceled the job. Credits were refunded automatically. |
{
"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.
/api/v1/tasksendpointYour own tasks, newest first, in the same sanitized shape as GET /tasks/{id}.
statusenumpending, processing, success, failed or canceled.
media_typeenumvideo, image, music, audio or speech.
pageinteger1-based page, default 1.
limitinteger1–100, default 20. data.has_more tells you whether to fetch the next page.
{
"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
}
}/api/v1/imagesendpointText-to-image and image-to-image on the same task lifecycle. Discover models with GET /models?type=image.
modelstringrequiredA current image model ID such as nano-banana-2.
promptstringrequiredNon-empty image instruction.
sceneenumtext-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.
optionsobjectaspect_ratio (e.g. "1:1", "16:9") and quality ("1K", "2K", "4K") as advertised by the model.
{
"model": "nano-banana-2",
"prompt": "Editorial product shot of a ceramic mug on linen, soft window light",
"options": {
"aspect_ratio": "1:1",
"quality": "2K"
}
}/api/v1/musicendpointGenerate an original track from a prompt. One model is exposed today; GET /models?type=music lists its controls.
promptstringrequiredDescription of the track — mood, genre, instruments, tempo.
options.duration_secondsnumberTarget length, 3–300 seconds.
options.instrumentalbooleantrue for no vocals.
options.style / options.lyricsstringOptional style hint and lyrics.
Text-to-speech uses the ElevenLabs voice catalog; sound effects take a prompt. Both return a task with the audio URL in taskUrls.
/api/v1/speechendpointtextstringrequiredNon-empty text to speak.
voice_idstringrequiredA voice id from GET /voices.
optionsobjectmodel_id, speed (0.25–4), stability (0–1), similarity_boost (0–1).
/api/v1/sound-effectsendpointpromptstringrequiredDescription of the sound.
optionsobjectduration_seconds (0.5–22), prompt_influence (0–1).
/api/v1/voicesendpointGET /voices returns the public voice catalog with ids, names, languages and preview URLs. No authentication is required for the catalog.
/api/v1/creditsendpointReturns data.remainingCredits for the account behind the key. Quote first, then compare against the balance before you let a user submit.
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.
| Stage | Behavior |
|---|---|
| quote | No charge; returns costCredits. |
| create | Charges costCredits and returns the task. |
| success | The charge stands; result URLs are yours to keep. |
| failed / canceled | costCredits is refunded to the balance automatically. |
Branch on the HTTP status and the stable code field. 500 is safe to retry.
| HTTP | code | Meaning |
|---|---|---|
| 400 | -1 | Malformed body, unknown model, unsupported mode or option — the message says which. |
| 401 | -1001 | Missing, invalid or revoked API key. |
| 402 | -1002 | Insufficient credits for costCredits. Top up or pick a cheaper option. |
| 404 | -1 | Task does not exist or belongs to another account. |
| 500 | -1 | Provider or internal failure; the public message is generic. Retry. |