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 table below is the complete set of 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 table 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.

operationRequired input fieldsOptional input fields and nested shape
image-to-videomodel: string, images: string[1]prompt, voice_id, is_rec, bgm, audio, audio_type, duration, seed, resolution, movement_amplitude, payload, off_peak
reference-to-videomodel, subjects[], promptauto_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-videomodel, images: string[2]prompt, is_rec, duration, seed, resolution, movement_amplitude, bgm, audio, payload, off_peak
text-to-videomodel, promptstyle, duration, seed, aspect_ratio, resolution, movement_amplitude, bgm, audio, payload, off_peak
reference-to-imagemodel, promptimages (0–7 for viduq2, 1–7 for viduq1), seed, aspect_ratio, resolution, payload
text-to-audiomodel, promptduration, seed
timing-to-audiomodel, timing_prompts[]duration, seed; each timing item uses from, to, and prompt
text-to-speechtext, voice_setting_voice_idvoice_setting_speed, voice_setting_volume, voice_setting_pitch, voice_setting_emotion, payload
voice-cloneaudio_url, voice_id, textprompt_audio_url, prompt_text, payload
lip-syncvideo_url, one of audio_url or textspeed, voice_id, ref_photo_url, volume
motion-sync-v1image_url, video_urlpayload
motion-sync-v2images, video_urlstemplate (motion_control_2 by default; motion_control_2.5 is accepted), payload
extend-videomodel, one of video_creation_id or video_urlimages, prompt, duration, resolution, payload
multi-frame-videomodel, start_image, image_settings[]resolution, payload; every image_settings item requires key_image and may include prompt and duration
upscale-videoone of video_url or video_creation_idupscale_resolution, payload
replace-videovideo_url, object, imageprompt, start_from, payload; also requires pricingContext.providerCreditCap
digital-humanmodel, image, plus the speech/prompt fields required by the selected modeprompt, audio_url, text, voice_id, resolution, payload; also requires pricingContext.providerCreditCap
prompt-recommendationimages, type[] (template, img2video, or both)resolution, count (1–10)
templatetemplate, images[]prompt, seed, aspect_ratio, area, beast, bgm, payload; also requires pricingContext.providerCreditCap
template-storystory, images[]payload; also requires pricingContext.providerCreditCap
general-film-createimages[], duration (10–180)prompt, aspect_ratio, payload
general-film-editid, job_id, promptNone
general-film-composeid, job_idsNone
ad-film-createimages[]prompt, duration, aspect_ratio, language
ad-film-editad_one_click_task_id, type, promptstoryboard_video_index (required when type is generate_video), payload
ad-film-composead_one_click_task_id, video_task_ids[], bgm_task_id, narration_task_idpayload
trending-replicatevideo_url, images[]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.

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: vidu-i2v-demo-001" \
-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.