Wan 2.7 Video is Alibaba's April 2026 umbrella video model, which picks its mode from the inputs you send. It covers text-to-video; image-to-video from a still, a first and last frame, a clip to continue, or audio that drives the motion; and prompt-based video editing. Output is 720P or 1080P in five aspect ratios, 2 to 15 seconds long (up to 10 for editing). Alibaba also offers a reference-to-video mode with separate subject images, clips and voices, but Jantaris does not expose it yet.
Best for
- Animating a character in time with a voice or music file
- Continuing a clip you already have
- Editing a video by instruction, such as changing weather or outfits
- Transitions between a first and a last frame
Prompting tips
- Pair
audio_urlwith one image to animate a still in time with the sound. - Sending
video_urlswitches the request to editing; keepdurationbetween 2 and 10 seconds. - Use
negative_promptfor recurring problems, like "warped hands, flicker". - The default resolution is 1080P; drop to 720P for drafts. Prompts can be up to 5,000 characters.
FAQ
How much does the Wan 2.7 Video API cost?
Wan 2.7 Video is billed at from $0.161 per second. The estimate is returned before the job starts, and failed generations are not charged.
How long can Wan 2.7 Video clips be?
2 to 15 seconds in most modes, and up to 10 seconds for editing.
What changed in Wan 3.0?
Wan 3.0 generates up to 30 seconds at up to 4K with generated audio and larger reference sets. Wan 2.7 Video is the one with prompt-based editing of an existing video.
How to call Wan 2.7 Video via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-2.7-video",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080P",
"duration": 5
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "wan-2.7-video",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080P",
"duration": 5
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "wan-2.7-video",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080P",
"duration": 5
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 5000 chars | |
negative_prompt | string | ||
aspect_ratio | string | 16:9 9:16 1:1 4:3 3:4 | 16:9 |
resolution | string | 720P 1080P | 1080P |
duration | integer | 2-15 | 5 |
image_url | string | ||
end_image_url | string | ||
image_urls | array | max 4 | |
video_url | string | ||
video_urls | array | max 1 | |
audio_url | string | ||
seed | integer |
The same schema is available from GET /v1/models/wan-2.7-video.









