Model guide

Wan 3.0 API: 30-second clips, pricing and code

Wan 3.0 is Alibaba's video model with sound, five ways to steer a clip and lengths from 2 to 30 seconds. Here is what the API accepts, what each length and resolution costs, and how to call it.

What Wan 3.0 offers

Wan is Alibaba's family of video models, and Wan 3.0 is the newest Wan generation in the Revana catalogue. Here is what it accepts:

  • Five input modes. Text to video, image to video, first and last frame, reference images and video to video.
  • A wide range of lengths. Anywhere from 2 to 30 seconds per clip, so quick 2 second tests and full 30 second takes use the same model.
  • Sound with the picture. Set audio to true for ambience, effects and speech generated in the same pass.
  • Framing for every channel. Choose adaptive, 16:9, 4:3, 1:1, 3:4, 9:16 or 21:9 framing.
  • Up to 10 reference images for characters, products and settings.

We do not publish quality scores or rankings. The catalogue tells you what a model accepts and what it costs; whether its output suits your product is something to test with your own prompts.

Wan 3.0 or Wan 3.0 Prime?

Both are on Revana. The catalogue lists the same resolutions, lengths and reference image limit for both. The differences it shows: Prime does not offer video to video or 21:9, and it has its own per-second rates (see the pricing table below).

Wan 3.0 and Wan 3.0 Prime compared
Wan 3.0Wan 3.0 Prime
Taskstext to video, image to video, first and last frame, reference images and video to videotext to video, image to video, first and last frame and reference images
Resolution480p, 720p and 1080p480p, 720p and 1080p
Length2 to 30 s2 to 30 s
Aspect ratioadaptive, 16:9, 4:3, 1:1, 3:4, 9:16 or 21:9adaptive, 16:9, 4:3, 1:1, 3:4 or 9:16
Reference imagesup to 10up to 10
Price from$0.05 / s$0.07 / s
Routesthree routesthree routes

A practical way to choose: run the same three or four prompts through both at 480p, where a 5 second test costs $0.25 on Wan 3.0 and $0.35 on Prime, and compare the results side by side.

Wan 3.0 pricing (October 2026)

Both models are billed per second of output video, with one rate per resolution whether sound is on or off.

Wan 3.0 and Prime price per second and per clip
ResolutionWan 3.0 / s10 s clip30 s clipPrime / sPrime 30 s
480p$0.05$0.50$1.50$0.07$2.10
720p$0.09$0.90$2.70$0.13$3.90
1080p$0.17$1.70$5.10$0.26$7.80

When you submit, the job's price is held from your prepaid balance; it is charged only if the job succeeds, and the hold is released if it fails. The amount is returned as cost_usd. See the pricing page for credit packs and every model's rates.

Wan 2.6 and Wan 2.7

The previous Wan models are still available, at 720p and 1080p:

Older Wan models
ModelTasksLengthSoundFrom / sRoutes
Wan 2.6text to video, image to video and video to video5, 10 or 15 syes$0.07two routes
Wan 2.7text to video, image to video, first and last frame, video to video and reference images2 to 15 sno$0.09two routes

Generate a 15-second Wan 3.0 clip

Send POST /v1/generations with "model": "wan-3.0", then poll the generation until it finishes. This 15 second 720p clip with sound costs $1.35.

cURL
export REVANA_API_KEY="sr_live_..."

# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
  -H "Authorization: Bearer $REVANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-3.0",
    "input": {
      "prompt": "A hot air balloon rises over a misty valley at sunrise. Shot 1: wide shot as the balloon lifts off a meadow. Shot 2: view from the basket as the valley opens up below. Shot 3: the balloon drifts past the camera into the sun. Burner roar, birdsong, wind.",
      "resolution": "720p",
      "duration": 15,
      "aspect_ratio": "16:9",
      "audio": true
    },
    "max_cost_usd": 2
  }'

# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JBX7Q2M4 \
  -H "Authorization: Bearer $REVANA_API_KEY"
Python
import os
import time

import requests

API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}

resp = requests.post(f"{API}/generations", headers=HEADERS, json={
    "model": "wan-3.0",
    "input": {
        "prompt": "A hot air balloon rises over a misty valley at sunrise. Shot 1: wide shot as the balloon lifts off a meadow. Shot 2: view from the basket as the valley opens up below. Shot 3: the balloon drifts past the camera into the sun. Burner roar, birdsong, wind.",
        "resolution": "720p",
        "duration": 15,
        "aspect_ratio": "16:9",
        "audio": True,
    },
    "max_cost_usd": 2,
})
resp.raise_for_status()
job = resp.json()

while job["status"] in ("queued", "running"):
    time.sleep(5)
    job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()

if job["status"] == "succeeded":
    print(job["output"]["urls"], job["cost_usd"])
else:
    print("Failed:", job["error"])
Node.js
// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
  Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
  "Content-Type": "application/json",
};

const res = await fetch(`${API}/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "wan-3.0",
    input: {
      prompt: "A hot air balloon rises over a misty valley at sunrise. Shot 1: wide shot as the balloon lifts off a meadow. Shot 2: view from the basket as the valley opens up below. Shot 3: the balloon drifts past the camera into the sun. Burner roar, birdsong, wind.",
      resolution: "720p",
      duration: 15,
      aspect_ratio: "16:9",
      audio: true,
    },
    max_cost_usd: 2,
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();

while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 5000));
  job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}

if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);

The first call returns 202 with a generation id and status queued. A finished job looks like this:

Response
{
  "id": "gen_01JBX7Q2M4",
  "model": "wan-3.0",
  "status": "succeeded",
  "output": {
    "urls": [
      "https://cdn.revana.si/g/gen_01JBX7Q2M4/0.mp4"
    ]
  },
  "cost_usd": 1.35,
  "attempts": 1,
  "error": null,
  "created_at": "2026-10-19T14:02:11Z",
  "completed_at": "2026-10-19T14:03:47Z"
}

Animate an image

Send the image as image_url. With adaptive, the model matches the frame to your image. This 8 second 1080p clip costs $1.36.

Request body
{
  "model": "wan-3.0",
  "input": {
    "prompt": "The waves in the painting start to move and crash against the rocks while the clouds drift slowly. Ocean surf, gulls.",
    "image_url": "https://example.com/painting.jpg",
    "resolution": "1080p",
    "duration": 8,
    "aspect_ratio": "adaptive",
    "audio": true
  },
  "max_cost_usd": 2
}

Reference images

Pass up to 10 images as image_urls and refer to each by its position. This 12 second square clip costs $1.08.

Request body
{
  "model": "wan-3.0",
  "input": {
    "prompt": "The robot from the first image waters the plants in the greenhouse from the second image, then stops to watch a butterfly. Soft electronic hum, dripping water.",
    "image_urls": [
      "https://example.com/robot.jpg",
      "https://example.com/greenhouse.jpg"
    ],
    "resolution": "720p",
    "duration": 12,
    "aspect_ratio": "1:1",
    "audio": true
  },
  "max_cost_usd": 2
}

Wan 3.0 also lists video to video, where a source clip guides the new one. Start and end frames work as on other models: image_url plus end_image_url.

Prompt tips for Wan 3.0

  • Test motion with very short clips. Wan 3.0 accepts clips as short as 2 seconds, so a quick motion test at 480p costs $0.10.
  • Use a shot list for long clips. For 15 to 30 seconds, number the shots and give each a subject, an action and a camera move.
  • Describe the sound. Say what runs underneath (wind, a crowd, music) and what happens at moments (a door, a line of dialogue). Say "no music" if you do not want any.
  • Keep the cast small. One or two characters stay consistent more reliably over a long clip than a crowd.
  • Leave text to the editor. Exact words on screen are unreliable on current video models.

Routing and fallback

Wan 3.0 currently has three routes on Revana and Wan 3.0 Prime has three routes. The router sends each job to the cheapest route first and moves it to the next if it fails or times out. Every route serves the same model at the same listed price, and you are charged once, only for the route that succeeds.

Fallback improves the chance of getting a result, but it is not an uptime guarantee. If all routes fail, the job ends as failed and costs nothing.

Browse every Wan model on the models page, read the API docs, or get an API key and run the samples.

Frequently asked questions

How much does the Wan 3.0 API cost?

In October 2026, Wan 3.0 costs $0.05 per second at 480p, $0.09 at 720p and $0.17 at 1080p, with sound included. A 10 second 720p clip is $0.90.

How long can a Wan 3.0 video be?

From 2 to 30 seconds per request, set with the duration field.

What is the difference between Wan 3.0 and Wan 3.0 Prime?

Prime starts from $0.07 per second, against $0.05 for Wan 3.0, and does not offer video to video or 21:9. Resolutions, lengths and the reference image limit are the same. Test both on your own prompts before you choose.

Does Wan 3.0 generate audio?

Yes. Set audio to true for sound generated with the picture, or false for silence. The price is the same either way.

How many reference images does Wan 3.0 accept?

Up to 10, sent as image_urls. Refer to each image by its position in the prompt.

Which aspect ratios does Wan 3.0 support?

Wan 3.0 lists adaptive, 16:9, 4:3, 1:1, 3:4, 9:16 and 21:9. Adaptive matches the frame to your input image.

Call Wan 3.0 with one key

Run Wan 3.0, Wan 3.0 Prime and every other model with the same key and request format. Prepaid credit from $10.