Most "how do I use model X" questions are not really about prompting. They are
about where you type the prompt, and for Alibaba's Wan 3.0 that is genuinely
confusing, because the model shipped as an API months before it shipped as
anything a person could open.
There are four routes in. The model at the far end is the same in all four. What
differs is the paperwork.
| Route | What you need before you can start | Who it suits |
| Alibaba Cloud Model Studio | Cloud account, a region choice, an API key that matches that region | Teams already on Alibaba Cloud |
| Qwen Cloud | An account; international access still rolling out | Developers outside China |
| Alibaba's own consumer surfaces | An account, plus access being rolled out to members | People who want the first-party product |
| A hosted front end | Usually nothing, sometimes an email | One clip today |
That table is the whole answer for most people. The rest of this post is the
part that actually costs money if you skip it.
The region/key pairing is a real constraint, not boilerplate
On the official route, the API key is scoped to the region you picked. A key
issued in one region will not authenticate against another region's endpoint,
and the failure surfaces as an authentication error rather than "wrong region",
which sends people to rotate a perfectly good key.
Worth knowing before you build routing: four of the five regions are priced
identically and the fifth is about 25% more. If your traffic is not
latency-sensitive, region choice is a billing decision that looks like an
infrastructure decision.
The API is asynchronous, and there are two separate 24-hour clocks
You submit a job and poll. There is no callback in the published reference, and
there is no documented cancel call — CANCELED exists in the state enum, but
nothing in the API puts a task into it. Once a thirty-second job is submitted,
it is submitted.
Then two clocks start, and they are not the same clock:
- The
task_id is valid for 24 hours. Query it later and you get UNKNOWN,
which is not a failure state. It means the system no longer remembers the job.
A front end that maps UNKNOWN onto PENDING will spin forever — if you have
ever watched a progress bar run past an hour, that is usually what you were
watching.
- The
video_url also expires 24 hours after success. The file was
generated, the money was spent, and if nobody fetched it, there is nothing to
show. Copying the output into your own storage the moment a job succeeds is
the single most important line in the integration, and it is the line people
leave for later.
Six states exist in total: PENDING, RUNNING, SUCCEEDED, FAILED,
CANCELED, UNKNOWN. Collapsing the last one into "failed" is the mistake that
generates support tickets, because "expired" and "failed" have different causes
and different remedies.
Concurrency is small enough to design around
Two concurrent tasks. A fifty-task queue. Thirty submissions a minute. A single
generation usually runs one to five minutes, longer for longer clips.
Batch four variants and you are running two and waiting on two. Nothing failed;
two are queued. The useful consequence is that your rate limiter is probably
guarding the wrong number — the submission ceiling is rarely what you hit first,
concurrency is.
The default that quietly quadruples the bill
If you do not set resolution, Wan 3.0 generates at 1080P. At Alibaba's
published rates that is four times the per-second cost of 480P: a thirty-second
clip is $6.00 instead of $1.50. Nothing errors and nothing warns you. One
parameter.
Related, and equally undocumented in most write-ups: prompt expansion is on by
default. It helps a short prompt and interferes with a long one you already
tuned. The response hands your original text back under orig_prompt, so you
can always diff what you sent against what ran.
Wan 3.0 takes a reference family (reference_image, reference_video,
reference_audio, file, link) and a keyframe family (first_frame,
last_frame), and it refuses both in the same call:
{
"code": "InvalidParameter",
"message": "The two modes are mutually exclusive. Do not pass reference_xx and first_frame/last_frame at the same time."
}
This reads like an arbitrary validation rule and it is not. Keyframes say start
here, end there, invent the middle. References say here is a cast and a mood,
work the shot out yourself. One pass cannot be pinned at both ends and freely
composed at the same time. So the fix is a decision rather than a workaround.
The same shape appears twice more, smaller: file and link are mutually
exclusive, and there is exactly one of each per job.
If you just want one clip today
Route four exists because the other three are a day of setup for a thing you
wanted to try for ten minutes. wan-3.run is a browser tab
that runs the same wan3.0-video model, prints the model ID and upstream task
ID under every result, and gives the first clip away so you can check the output
before you decide whether any of the paperwork above is worth it.
If you are writing the integration rather than using one, the numbers above are
the ones to hard-code tests around, and there is
a spec table with each row dated and linked to its source
that is easier to diff against than the docs when Alibaba changes something.
Disclosure: I work on that second link.