Wan 3.0 Video Prime
Wan 3.0 Video Prime — the high-speed tier of Alibaba's Wan 3.0 video model. Up to 30 seconds in a single pass from text, frames, reference media, documents, or a web page, at 480P/720P/1080P.
The high-speed tier of Alibaba's Wan 3.0 video model. Wan 3.0 Video Prime takes the same inputs as the standard tier — text, first/last frame images, reference images, video, audio, a document, or a public web page — and returns 2 to 30 second clips at 480P, 720P, or 1080P with an audio track by default. See current pricing on the model page.
Prime vs the standard tier
The two models accept an identical parameter set. Prime returns results faster at a higher per-second rate; nothing in the model's documentation claims a quality difference. Choose by how much the wait is worth to you — see Wan 3.0 for the standard tier.
Quick example
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-prime",
"prompt": "A lighthouse keeper climbing a spiral staircase at dawn",
"resolution": "720P",
"aspect_ratio": "16:9",
"duration": 10
}'import requests
resp = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"model": "wan3.0-video-prime",
"prompt": "A lighthouse keeper climbing a spiral staircase at dawn",
"resolution": "720P",
"aspect_ratio": "16:9",
"duration": 10,
},
)
task_id = resp.json()["id"]const resp = await fetch('https://reapi.ai/api/v1/videos/generations', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'wan3.0-video-prime',
prompt: 'A lighthouse keeper climbing a spiral staircase at dawn',
resolution: '720P',
aspect_ratio: '16:9',
duration: 10,
}),
});
const { id } = await resp.json();body := strings.NewReader(`{
"model": "wan3.0-video-prime",
"prompt": "A lighthouse keeper climbing a spiral staircase at dawn",
"resolution": "720P",
"aspect_ratio": "16:9",
"duration": 10
}`)
req, _ := http.NewRequest("POST", "https://reapi.ai/api/v1/videos/generations", body)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)Authentication
Every request needs an API key in the Authorization header:
Authorization: Bearer YOUR_API_KEYCreate one in API keys.
Endpoint
POST https://reapi.ai/api/v1/videos/generationsGeneration is asynchronous. The response carries a task id; poll
GET /api/v1/tasks/{id} until status settles.
Modes
There is no mode field — the model picks the mode from which media fields
are present. The two media families are mutually exclusive and a request that
mixes them is rejected.
| Mode | Fields to send |
|---|---|
| Text to video | prompt only |
| First frame | first_frame_url |
| First + last frame | first_frame_url + last_frame_url |
| Omni-reference | any of reference_image_urls / reference_video_urls / reference_audio_urls |
| Document | reference_file_urls |
| Web page | reference_link_urls |
Frame fields (first_frame_url, last_frame_url) cannot be combined with any
reference_*_urls field. reference_file_urls and reference_link_urls are
also mutually exclusive with each other.
In reference mode, address your material from the prompt as Image1,
Video1, Audio1 and so on, numbered by position within each array.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
model | string | yes | wan3.0-video-prime |
prompt | string | no | Up to 20,000 characters. Required in practice for text-to-video. Chinese and English. |
first_frame_url | string | no | One image used as the opening frame. |
last_frame_url | string | no | One image used as the closing frame. |
reference_image_urls | string[] | no | Up to 10 images. |
reference_video_urls | string[] | no | Up to 5 clips, 1–15s each, 15s combined. Input duration + duration must not exceed 30s. |
reference_audio_urls | string[] | no | Up to 5 clips, 1–15s each, 15s combined. |
reference_file_urls | string[] | no | Exactly one document: docx, doc, xlsx, xls, pptx, ppt, pdf, txt, key, pages, numbers, md. |
reference_link_urls | string[] | no | Exactly one public, login-free web page. |
resolution | enum | no | 480P / 720P / 1080P. Default 1080P. |
aspect_ratio | enum | no | adaptive / 16:9 / 4:3 / 1:1 / 3:4 / 9:16. Default adaptive. |
duration | integer | no | 2–30 seconds, or -1 to let the model choose. Default 5. |
audio | boolean | no | Whether the clip carries an audio track. Default true. |
seed | integer | no | 0–2147483647. |
content_filter | boolean | no | Safety filter. Default true. API keys only — see below. |
All media inputs must be public http(s) URLs. reAPI does not accept base64 or
data: URIs on any endpoint, for any model.
Content filter
content_filter defaults to true. Requests authenticated with an API key may
set it to false; requests originating from the reAPI website are rejected
with 20003 if they try, regardless of the value sent.
Response envelope
Submitting returns a task id:
{ "id": "task_01k9s419324drezfbwnsvxyr6h", "status": "processing" }Poll GET /api/v1/tasks/{id}. A completed task looks like:
{
"id": "task_01k9s419324drezfbwnsvxyr6h",
"model": "wan3.0-video-prime",
"status": "completed",
"created_at": 1762853430,
"output": {
"video_urls": [
"https://cdn.reapi.ai/media/tasks/01k9s419324drezfbwnsvxyr6h/0.mp4"
]
},
"usage": { "credits": 1386 },
"error": null
}usage.credits is what the task actually cost once settled — see
Tasks.
Pricing
Billing has two dimensions: output seconds × resolution.
Neither the mode nor the audio track changes the rate — a document-to-video request costs the same per second as a text-to-video one at the same resolution, with or without sound. Current per-second rates for each resolution are on the model page.
credits = ceil(per_second_usd × markup × duration × 1000)1 credit = $0.001 USD.
Two things to know before you send a request:
- Omitting
resolutionbills at1080P, the most expensive tier, because that is the model's own default. duration: -1reserves the 30-second ceiling. The final length is not knowable at submit time, so the hold is taken at the maximum. Pass an explicitdurationwhen cost matters.
Failed tasks are refunded automatically.
Errors
| Code | Meaning |
|---|---|
20003 | Invalid parameter value — mixed media families, out-of-range duration, unknown enum, or a website request trying to disable the content filter |
20004 | Model not supported on this endpoint |
30001 | Insufficient credits |
80006 | Rejected by content moderation |
80007 | Upstream rejected the input |
Full catalog: Errors.
Tips
- Iterate at
480Pand switch to1080Ponly for the final render — the rate scales with the tier and the framing does not change. - Reference images hold characters and wardrobe across a long take. Name them
positionally in the prompt (
Image1,Image2) rather than describing them again in prose. - With reference video, remember input seconds count against the 30-second budget: a 10-second reference leaves 20 seconds of output.
- Write prompts as a shot list with explicit time ranges. The model follows timed beats more reliably than a single paragraph of description.
- Pick the standard Wan 3.0 tier when turnaround is not the constraint — it takes the identical request body at a lower rate.