Skip to content

Vidu API — 27 Operations and Pricing

The Vidu API gives you one URL-only task endpoint for Vidu video, image, audio, motion, lip-sync, template, and film workflows. OmnAPI handles authentication, credit authorization, task polling, cancellation rules, and webhooks while your application supplies public media URLs.

Use this flow:

  1. POST /api/v1/vidu/quote with an operation and input.
  2. POST /api/v1/vidu/tasks with the same core fields, optional create-only guards, and an Idempotency-Key.
  3. Poll GET /api/v1/vidu/tasks/{taskId} or configure config.webhookUrl.
  4. Download completed resources immediately and no later than one hour. Honor an earlier expiry when the returned resource provides one.

Quote and create share operation, input, and pricingContext. Create also accepts the create-only fields shown below:

FieldTypeRequiredMeaning
operationenumyesOne of the 27 values in Supported operations.
inputobjectyesThe selected Vidu Enterprise v2 request body, nested unchanged except for the restrictions below.
pricingContext.durationSecnumber, > 0, max 3,600conditionalMedia duration used when pricing cannot be derived from a URL. Supply it for duration-priced lip-sync, motion, upscale, or edit calls when input.duration is absent.
pricingContext.providerCreditCapnumber, 1–100,000conditionalVidu-credit authorization reserve required for replace-video, digital-human, template, and template-story.
maxCreditsnumber, >= 1create onlyReject creation before debit when the latest OmnAPI quote exceeds this amount.
configobjectcreate onlyStandard priority, tags, metadata, and webhookUrl task config.

Copy the fields from the linked Vidu request-body reference into input, not beside it. Do not copy Vidu’s callback_url / callbackUrl; OmnAPI rejects those fields and uses config.webhookUrl instead. Do not send Vidu credentials. Where Vidu accepts either Base64 or a URL, OmnAPI accepts only a public http:// or https:// URL. For general-film-edit and general-film-compose, include Vidu’s parent id in input; OmnAPI moves it to the fixed Vidu URL path and does not forward it in the JSON body.

The operation sections below list the Vidu body fields currently documented by OmnAPI. Names are case-sensitive. “One of” means at least one member of that group must be supplied. Vidu’s callback_url is deliberately absent because OmnAPI rejects it; use config.webhookUrl. Follow the linked operation reference in the next section for model-dependent ranges, media formats, dimensions, and file-size limits.

input is intentionally an open pass-through object in the OmnAPI contract. OmnAPI validates the wrapper, pricing inputs, public-URL-only rule, and callback restriction; operation-level request validation is completed by Vidu. Fields outside this index may be forwarded, but they are not part of OmnAPI’s stable documented contract. This distinction matters to generated SDKs: do not assume the OpenAPI schema statically validates every nested Vidu field.

Open the operation you intend to call. Field names are also searchable in this page.

image-to-video

Required: model: string, images: string[1]

Optional: prompt, voice_id, is_rec, bgm, audio, audio_type, duration, seed, resolution, movement_amplitude, payload, off_peak

reference-to-video

Required: model, subjects[], prompt

Optional: auto_subjects, audio, audio_type, duration, seed, aspect_ratio, resolution, movement_amplitude, payload, off_peak; each subject requires name and images[], with optional voice_id

start-end-to-video

Required: model, images: string[2]

Optional: prompt, is_rec, duration, seed, resolution, movement_amplitude, bgm, audio, payload, off_peak

text-to-video

Required: model, prompt

Optional: style, duration, seed, aspect_ratio, resolution, movement_amplitude, bgm, audio, payload, off_peak

reference-to-image

Required: model, prompt

Optional: images (0–7 for viduq2, 1–7 for viduq1), seed, aspect_ratio, resolution, payload

text-to-audio

Required: model, prompt

Optional: duration, seed

timing-to-audio

Required: model, timing_prompts[]

Optional: duration, seed; each timing item uses from, to, and prompt

text-to-speech

Required: text, voice_setting_voice_id

Optional: voice_setting_speed, voice_setting_volume, voice_setting_pitch, voice_setting_emotion, payload

voice-clone

Required: audio_url, voice_id, text

Optional: prompt_audio_url, prompt_text, payload

lip-sync

Required: video_url, one of audio_url or text

Optional: speed, voice_id, ref_photo_url, volume

motion-sync-v1

Required: image_url, video_url

Optional: payload

motion-sync-v2

Required: images, video_urls

Optional: template (motion_control_2 by default; motion_control_2.5 is accepted), payload

extend-video

Required: model, one of video_creation_id or video_url

Optional: images, prompt, duration, resolution, payload

multi-frame-video

Required: model, start_image, image_settings[]

Optional: resolution, payload; every image_settings item requires key_image and may include prompt and duration

upscale-video

Required: one of video_url or video_creation_id

Optional: upscale_resolution, payload

replace-video

Required: video_url, object, image

Optional: prompt, start_from, payload; also requires pricingContext.providerCreditCap

digital-human

Required: model, image, plus the speech/prompt fields required by the selected mode

Optional: prompt, audio_url, text, voice_id, resolution, payload; also requires pricingContext.providerCreditCap

prompt-recommendation

Required: images, type[] (template, img2video, or both)

Optional: resolution, count (1–10)

template

Required: template, images[]

Optional: prompt, seed, aspect_ratio, area, beast, bgm, payload; also requires pricingContext.providerCreditCap

template-story

Required: story, images[]

Optional: payload; also requires pricingContext.providerCreditCap

general-film-create

Required: images[], duration (10–180)

Optional: prompt, aspect_ratio, payload

general-film-edit

Required: id, job_id, prompt

Optional: None

general-film-compose

Required: id, job_ids

Optional: None

ad-film-create

Required: images[]

Optional: prompt, duration, aspect_ratio, language

ad-film-edit

Required: ad_one_click_task_id, type, prompt

Optional: storyboard_video_index (required when type is generate_video), payload

ad-film-compose

Required: ad_one_click_task_id, video_task_ids[], bgm_task_id, narration_task_id

Optional: payload

trending-replicate

Required: video_url, images[]

Optional: prompt, aspect_ratio, resolution, remove_audio

Every Vidu credit is billed at 2 OmnAPI credits. At OmnAPI’s $0.002 public quote benchmark, that is $0.004 or 80% of Vidu’s $0.005 dollar list price; your effective cash cost depends on the credit package you purchase. Direct pricing is separate from the Music Video API. Always use /quote; video rates vary by model, resolution, duration, and off-peak selection.

Example: viduq3-turbo, 720p, 5-second image-to-video uses 55 Vidu credits and quotes 110 OmnAPI credits at the standard rate.

OmnAPI credits = ceil(Vidu provider credits) × 2

The tables below show both quantities so you can calculate a request before calling /quote. “Normal / off-peak” values are shown in that order. Vidu bills whole provider credits; formulas that produce a fraction are rounded up at the provider-credit boundary and then multiplied by 2.

The source rate card is Vidu API Pricing. The OmnAPI amount is the public customer charge, not an internal cost figure. The runtime quote remains authoritative if Vidu changes a supported combination.

These rates apply per generated second for image-to-video, text-to-video, and start-end-to-video. Q3 Pro Fast is available only for image-to-video.

ModelResolutionVidu credits/s normal / off-peakOmnAPI credits/s normal / off-peak
Q3 Pro540p9 / 518 / 10
Q3 Pro720p20 / 1040 / 20
Q3 Pro1080p24 / 1248 / 24
Q3 Turbo540p7 / 414 / 8
Q3 Turbo720p11 / 622 / 12
Q3 Turbo1080p13 / 726 / 14
Q3 Pro Fast (image-to-video)720p20 / 1040 / 20
Q3 Pro Fast (image-to-video)1080p25 / 1350 / 26
ModelResolutionVidu credits/s normal / off-peakOmnAPI credits/s normal / off-peak
Q3 Mix720p24 / not supported48 / not supported
Q3 Mix1080p29 / not supported58 / not supported
Q3 Turbo540p4 / 28 / 4
Q3 Turbo720p10 / 520 / 10
Q3 Turbo1080p13 / 726 / 14
Q3540p7 / 414 / 8
Q3720p12 / 624 / 12
Q31080p15 / 730 / 14

In the formulas below, s = ceil(duration seconds). Q2 off-peak is half of the normal Vidu total, rounded up, and is then converted at 2×. Setting audio: true on Q2 image-to-video or reference-to-video adds 15 Vidu credits / 30 OmnAPI credits. Setting is_rec: true on a supported video operation adds 10 Vidu credits / 20 OmnAPI credits.

Operation and modelResolutionVidu credit formulaOmnAPI credit formula
Image/start-end · Q2 Turbo540p6 + 2 × (s−1)12 + 4 × (s−1)
Image/start-end · Q2 Turbo720ps=1: 8; s≥2: 10 + 10 × (s−2)s=1: 16; s≥2: 20 + 20 × (s−2)
Image/start-end · Q2 Turbo1080p35 + 10 × (s−1)70 + 20 × (s−1)
Image/start-end · Q2 Pro540ps=1: 8; s≥2: 10 + 5 × (s−2)s=1: 16; s≥2: 20 + 10 × (s−2)
Image/start-end · Q2 Pro720p15 + 10 × (s−1)30 + 20 × (s−1)
Image/start-end · Q2 Pro1080p55 + 15 × (s−1)110 + 30 × (s−1)
Image/start-end · Q2 Pro Fast720p8 + 2 × (s−1)16 + 4 × (s−1)
Image/start-end · Q2 Pro Fast1080p16 + 4 × (s−1)32 + 8 × (s−1)
Text-to-video · Q2540p10 + 2 × (s−1)20 + 4 × (s−1)
Text-to-video · Q2720p15 + 5 × (s−1)30 + 10 × (s−1)
Text-to-video · Q21080p20 + 10 × (s−1)40 + 20 × (s−1)
Reference-to-video · Q2540p15 + 5 × (s−1)30 + 10 × (s−1)
Reference-to-video · Q2720p25 + 5 × (s−1)50 + 10 × (s−1)
Reference-to-video · Q21080p75 + 10 × (s−1)150 + 20 × (s−1)
Reference-to-video · Q2 Pro540p20 + 5 × (s−1)40 + 10 × (s−1)
Reference-to-video · Q2 Pro720p30 + 5 × (s−1)60 + 10 × (s−1)
Reference-to-video · Q2 Pro1080p85 + 10 × (s−1)170 + 20 × (s−1)
Model and operationSupported outputVidu credits normal / off-peakOmnAPI credits normal / off-peak
Q1 image/reference/start-end/text5s · 1080p80 / 40160 / 80
Vidu 2.0 image/start-end4s · 360p20 / 1040 / 20
Vidu 2.0 image/start-end4s · 720p40 / 2080 / 40
Vidu 2.0 image/start-end4s · 1080p100 / 50200 / 100
Vidu 2.0 image/start-end8s · 720p100 / 50200 / 100
Vidu 2.0 reference-to-video4s · 360p or 720p80 / 40160 / 80
OperationScopeVidu creditsOmnAPI credits
Q2 text-to-image (0 references)1080p / 2K / 4K6 / 8 / 1012 / 16 / 20
Q2 reference-to-image (1–3 references)1080p / 2K / 4K8 / 12 / 2016 / 24 / 40
Q2 reference-to-image (4–7 references)1080p / 2K / 4K10 / 16 / 3020 / 32 / 60
Q1 reference-to-image (1–7 references)1080p2040
Text/timing-to-audioup to 5s / over 5s through 10s10 / 2020 / 40
Text-to-speecheach started 500 characters10, minimum 1020, minimum 20
Voice cloneper voice + required TTS preview300 + TTS600 + TTS
OperationBilling unitVidu creditsOmnAPI credits
Prompt recommendationeach started 5 prompts, per requested type1020
Lip synceach started 5 seconds2040
Motion Sync V1each started second · 720p1020
Motion Control 2each started second · 720p1938
Motion Control 2.5each started second · 1080p3468
Upscale Proeach started second · 1080p / 2K / 4K / 8K10 / 20 / 40 / 16020 / 40 / 80 / 320

For URL inputs, put the known duration in pricingContext.durationSec. OmnAPI does not download or inspect the source to discover its duration.

s = ceil(extension or segment seconds). Multi-frame prices every frame-to-frame segment independently and sums the results.

ModelResolutionVidu credit formulaOmnAPI credit formula
Q2 Turbo extension540p10 + 2 × (s−1)20 + 4 × (s−1)
Q2 Turbo extension720p15 + 5 × (s−1)30 + 10 × (s−1)
Q2 Turbo extension1080p40 + 10 × (s−1)80 + 20 × (s−1)
Q2 Pro extension540p15 + 5 × (s−1)30 + 10 × (s−1)
Q2 Pro extension720p30 + 10 × (s−1)60 + 20 × (s−1)
Q2 Pro extension1080p60 + 15 × (s−1)120 + 30 × (s−1)
Multi-frameup to 9 segmentssum all Q2 segment prices2 × summed Vidu credits

General-film and ad-film operations share the same create, edit, and compose rates. ad-film-create uses 15 seconds when input.duration is omitted.

OperationBilling unitVidu creditsOmnAPI credits
General film / Ad film create1080p · per second4080
Edit footage1080p · per second4080
Edit narrationeach started 500 characters1020
Edit BGMper second24
Compose filmper call12
Trending replicate540p / 720p / 1080p · per second12 / 16 / 2024 / 32 / 40

Some template and character workflows do not have a deterministic public rate. The following four operations require pricingContext.providerCreditCap:

OperationAuthorizationFinal settlement
templateproviderCreditCap × 2 OmnAPI creditsreported Vidu credits × 2
template-storyproviderCreditCap × 2 OmnAPI creditsreported Vidu credits × 2
replace-videoproviderCreditCap × 2 OmnAPI creditsreported Vidu credits × 2
digital-humanproviderCreditCap × 2 OmnAPI creditsreported Vidu credits × 2

OmnAPI deducts the authorized cap at creation and refunds the unused difference when Vidu reports a lower actual total. The cap is a spend authorization, not a quoted fixed price.

CategoryoperationWhat it doesExact input body reference
Videoimage-to-videoAnimate one image.Image to Video
Videoreference-to-videoGenerate video from subject/style references.Reference to Video
Videostart-end-to-videoGenerate between start and end frames.Start/End to Video
Videotext-to-videoGenerate video from a prompt.Text to Video
Imagereference-to-imageText-to-image, reference generation, and image editing with 0-7 references.Reference to Image
Audiotext-to-audioGenerate a sound effect or short audio clip.Text to Audio
Audiotiming-to-audioGenerate timed audio segments.Timing to Audio
Speechtext-to-speechSynthesize speech with a Vidu voice.Text to Speech
Speechvoice-cloneClone a voice and synthesize a preview.Voice Clone
Video editlip-syncSynchronize video speech to text or audio.Lip Sync
Motionmotion-sync-v1Transfer motion from a reference video.Motion Sync
Motionmotion-sync-v2Use the current motion-control template.Motion Sync plus OmnAPI’s injected motion_control_2 template
Video editextend-videoExtend an existing Vidu creation or public video.Video Extension
Video editmulti-frame-videoGenerate transitions across multiple keyframes.Multi-Frame
Video editupscale-videoUpscale a video to 1080p, 2K, 4K, or 8K.Upscale Pro
Video editreplace-videoReplace an object or region in a video.Video Replacement
Characterdigital-humanGenerate a speaking character from an image and text/audio.Digital Human
Promptprompt-recommendationRecommend image-to-video prompts.Prompt Recommendation
TemplatetemplateRun a Vidu effect template.Template
Templatetemplate-storyRun a story template.Template Story
Filmgeneral-film-createCreate a general-purpose finished film.One Click General Film — create
Filmgeneral-film-editEdit a general-film job; input.id selects the parent.One Click General Film — edit
Filmgeneral-film-composeCompose selected general-film jobs; input.id selects the parent.One Click General Film — compose
Advertisingad-film-createCreate a finished advertising film.One Click Ad-Film — create
Advertisingad-film-editEdit advertising footage, narration, or music.One Click Ad-Film — edit
Advertisingad-film-composeCompose selected advertising jobs.One Click Ad-Film — compose
Trendstrending-replicateRecreate a trending video format.One Click Trending Replicate

Real-time Vidu S1 sessions are not included because they require a live RTC connection rather than the asynchronous REST task lifecycle.

For each new logical operation, set and save a fresh REQUEST_KEY once. Reuse it with the exact same route and body only when recovering that operation. Use a different saved key when trying a different example or export format.

Terminal window
export REQUEST_KEY="$(uuidgen)"
Terminal window
curl -X POST https://api.omnapi.com/api/v1/vidu/quote \
-H "x-api-key: $OMNAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "image-to-video",
"input": {
"model": "viduq3-turbo",
"images": ["https://cdn.example.com/frame.jpg"],
"prompt": "A slow cinematic push-in",
"duration": 5,
"resolution": "720p"
}
}'

Response:

{
"operation": "image-to-video",
"viduCredits": 55,
"credits": 110,
"publicUsd": 0.22,
"pricingMode": "rate-card",
"pricingVersion": "vidu-direct-public-v1",
"customerRate": 2
}

credits is the OmnAPI amount to authorize. viduCredits explains the Vidu rate-card quantity. publicUsd is a display estimate; your balance and final settlement remain denominated in OmnAPI credits.

For URL-based tools whose price depends on media length, include the known duration without asking OmnAPI to inspect the file:

{
"operation": "lip-sync",
"input": {
"video_url": "https://cdn.example.com/source.mp4",
"audio_url": "https://cdn.example.com/voice.mp3"
},
"pricingContext": {
"durationSec": 11
}
}
Terminal window
curl -X POST https://api.omnapi.com/api/v1/vidu/tasks \
-H "x-api-key: $OMNAPI_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "image-to-video",
"input": {
"model": "viduq3-turbo",
"images": ["https://cdn.example.com/frame.jpg"],
"prompt": "A slow cinematic push-in",
"duration": 5,
"resolution": "720p"
},
"maxCredits": 110,
"config": {
"webhookUrl": "https://example.com/webhooks/omnapi",
"metadata": { "assetId": "asset_123" }
}
}'

Response:

{
"taskId": "task_01J...",
"status": "PENDING",
"creditsRequired": 110,
"viduCredits": 55,
"pricingMode": "rate-card",
"pollUrl": "/api/v1/vidu/tasks/task_01J..."
}

Reuse operation, input, and pricingContext from quote, then add maxCredits and config only to create. maxCredits rejects the create before deduction if the current quote is higher. Use a unique Idempotency-Key for each logical job so a network retry cannot create a second paid task.

Terminal window
curl https://api.omnapi.com/api/v1/vidu/tasks/task_01J... \
-H "x-api-key: $OMNAPI_KEY"
{
"taskId": "task_01J...",
"status": "COMPLETED",
"progress": 100,
"resources": [
{
"id": "res_01J...",
"index": 0,
"role": "output",
"type": "VIDEO",
"url": "https://..."
}
],
"outputUrlTtlHours": 1
}

outputUrlTtlHours is a conservative cross-operation window, not a promise that the URL expires exactly at that time. OmnAPI does not copy these assets; download them within one hour even when a standard Vidu creation URL would remain valid for up to 24 hours.

The status values are the standard OmnAPI task states: PENDING, PROCESSING, COMPLETED, FAILED, and CANCELLED.

POST /api/v1/vidu/tasks/{taskId}/cancel refunds a task immediately before submission. After submission, OmnAPI requests remote cancellation and refunds only after Vidu confirms it. A 409 means cancellation was not confirmed, so the task remains active and was not refunded; keep polling.

Do not put callback_url in input. Use config.webhookUrl so lifecycle events use the standard OmnAPI webhook contract, including signatures and retries.