Skip to main content
Wan 3.0 generates up to 30 seconds of video with sound in one job. Text-to-video works from a prompt alone, image-to-video opens on a frame you supply and can close on another, and reference-to-video takes up to 10 images, 5 video clips, and 5 audio clips and puts the people, products, movement, and voices from them into the shot. Reference-to-video also edits and extends clips you already have. For what all video models share, see video generation; for other models that work from references, see reference to video and Seedance. Here are two images made with /image/generate and the clip reference-to-video made from them. The potter keeps her hair, freckles, and apron, the teapot keeps its glaze and gold handle, and the line at the end is spoken on camera.
The two reference images side by side: a red-haired potter in a denim apron, and a speckled teal teapot with a gold handle
Jobs run asynchronously: quote prices a job, queue submits it and charges you, and retrieve polls until the MP4 is ready. The examples assume VENICE_API_KEY is set:

Choose a model

Every tier has the same three variants: Prime is the faster option at a higher price: the pottery clip took 205 seconds on standard and 131 on Prime. Each ID also has a dotted form, such as wan-3.0-reference-to-video. Image-to-video and reference-to-video both take images, for different jobs. Image-to-video opens on image_url exactly and, if you send end_image_url, ends on it. Reference-to-video treats images as references: what is in them appears in the clip, framed however the prompt says. Use image-to-video when the first shot is fixed, and reference-to-video when you need the same person or product across shots. Durations, aspect ratios, and resolutions come from /models. This query returns them:
Right now every Wan 3.0 model offers 2s, 5s, 10s, 15s, 20s, 25s, and 30s, the aspect ratios 16:9, 9:16, 1:1, 4:3, and 3:4, and prompts up to 20,000 characters. Image-to-video and reference-to-video add adaptive, which follows the shape of your input. Those details can change, so read them from the API. The reference limits are not in /models; they are in step 2.

1. Get a price quote

Billing is per second of output, at a rate set by tier and resolution. On October 23, 2026, standard cost $0.065 per second at 480p, $0.13 at 720p, and $0.26 at 1080p, and Prime cost $0.088, $0.182, and $0.364. Pro cost $0.237 at 1080p, $0.272 at 2K, and $0.296 at 4K, and Prime Pro cost $0.331, $0.355, and $0.379. The three variants in a tier cost the same, and turning audio off does not change the price. Reference videos are billed on top, at the job’s rate and to the fraction of a second, so a 4.2-second clip adds 4.2 seconds. Reference images and audio are free. Quote needs no API key; add reference_video_total_duration, in seconds, when the job has reference videos:
Quotes and charges are rounded to the cent, so 5 seconds at 480p, $0.325, is quoted and charged as $0.33.

2. Queue the job

This is the request behind the pottery clip, with the two images pointing at the copies in these docs so you can run it as is:
References go in three arrays, as public URLs or data URLs. Venice fetches URLs itself, so they have to work without headers or cookies. A reference-to-video job needs at least one image or video; audio alone is rejected. The reference videos and duration together must also fit in 30 seconds. Videos can be MP4 or MOV and audio MP3 or WAV. Images smaller than the 240-pixel minimum on the short side are scaled up rather than rejected. In the prompt, @Image1 is the first entry in reference_image_urls, @Image2 the second, and so on, and @Video1 and @Audio1 count the same way in their own arrays. Name every reference you send, including audio: write @Audio1 where the voice or sound belongs. Wan 3.0 does not use reference_document_urls, even though the API reference lists it. Prime, Pro, and Prime Pro reject it, and the standard tier accepts the document, ignores it, and charges for the job as usual. The response gives you the handle for everything that follows:
Keep both values; retrieve needs them. You have been charged at this point, not when the video comes back, so do not retry a queue request. If you have a queue_id, poll with it. If the response never arrived, sending the job again can charge you twice. Queue is limited to 40 requests per minute and retrieve to 120; both report x-ratelimit-remaining-requests. Most mistakes are rejected here with 400 and no charge: a value that is not in /models, a field the variant does not take, too many references, audio without an image or video, or a missing aspect_ratio. The body says what is wrong in issues[].message. Clip lengths are checked after the charge, so a reference clip that is too long or too short gets a queue_id here and fails on the first retrieve, with the charge refunded.

3. Poll and download

Call retrieve with the values from the queue response:
The response is one of two things. While the job is running you get JSON:
When it is done you get video/mp4 and the body is the video. Branch on Content-Type. The two numbers are milliseconds: how long jobs on this model usually take, and how long yours has been running. The average sat at about 7.5 minutes on every model we tried, and every job beat it. Jobs took 1 to 5 minutes: 2-second tests at 480p a little over a minute, and jobs built on a 5-second reference video 3 to 5 minutes. Poll every 10 to 15 seconds rather than sleeping until the average. The MP4 is H.264 at 30 frames per second with stereo AAC audio, or with no audio track if you sent audio: false. 720p comes back at 1280×720 and standard 1080p at 1920×1080, but Pro and Prime Pro returned 1936×1088 for 1080p.

If it fails

A failed job stays failed: polling again returns the same status and body. Jobs that fail before generation starts, such as a reference clip outside the length limits or an image Venice cannot decode, are refunded within seconds of being queued. Their bodies carry only error; the errors table lists them.

Clean up

Pass delete_media_on_completion: true on retrieve and the stored video is deleted in the same call that returns it. Any later retrieve for that id returns 404. Leave it off if you want to download the video more than once.

Workflows

The pottery clip is the subject workflow: images in, the same people and objects in the clip. The requests below are the other workflows as we ran them, with the inputs at placeholder URLs. All but the last use reference-to-video, where the prompt decides what the model does with a clip.

Movement from a clip

A reference video can supply camera movement or motion without its content. Here a 5-second orbit around a statue, made with wan-3-0-text-to-video, set the camera move around the potter:
The camera arcs around her the way it circled the statue.

A voice for the dialogue

Say in the prompt that the line is spoken in the voice from @Audio1. Here a 6-second line from /audio/speech supplied the voice:
She says the new line to camera.

Edit a clip

Describe the change, name what has to stay the same, and set duration to the clip’s length:
Snow covered the courtyard and the trees while the statue and the orbit stayed as they were. With adaptive, the 854×480 source came back at 1280×718.

Extend a clip

The result starts with your clip, regenerated, and carries on from there, so duration is the length of the whole result: the clip plus the new footage.
The 5-second orbit came back as 10 seconds: the orbit again, then 5 new seconds rising over the rooftops. The same request with "duration": "5s" returned the orbit and nothing more. The opening is regenerated rather than copied, so if you need your original frames, cut the new footage off the end and join it to your clip. The clip’s seconds are billed twice, as reference video and as part of the result. Because the clip and duration share the 30-second limit, a 10-second clip can grow by 10 seconds at most.

First and last frames

This one uses image-to-video. Send the opening frame as image_url, the closing frame as end_image_url, and describe what happens in between. Both frames came from /image/generate, and the second was made from the first with /image/edit so the room matches:
The clip opens on the morning frame and settles on the evening one.

Writing prompts

Wan 3.0 follows a structured prompt closely, and these habits helped in our runs:
  • Give each stretch of the clip a timestamp, such as 0-4s: and 4-10s:. In the pottery clip, the lift and the push-in land where the prompt put them.
  • Put dialogue in double quotes, and say when a character should stay quiet. Left to itself, the model filled quiet moments with small words: the first take of the pottery clip added “Okay.” before the line. The second take, with She is silent. in the first shot and says only: before the line, had just a quiet “Mm.”
  • Name camera moves plainly: slow push-in, static camera, one slow orbit.
  • Describe the sound you want, including room tone and ambience. Wan 3.0 has no negative prompt, so write exclusions such as no music into the prompt itself.

Complete example

This script made the pottery clip: it quotes the job, queues it with the two images as data URLs, polls until the MP4 arrives, and saves it. Save the potter and the teapot next to it as woman.webp and teapot.webp. The 20-minute deadline is several times the longest job we ran.
Retrieve deletes the stored video as it hands it over, so drop delete_media_on_completion if you want to download it again.

API parameters

Queue

Retrieve

Errors