Wan 2.2 Spicy API reference
Wan 2.2 Spicy image-to-video: give it a first frame and a prompt and it returns a 5 or 8 second clip. Add a last frame and it interpolates between the two. Output is 480p or 720p, billed per second. You can also try it in the browser on the model page.
Model page: Wan 2.2 Spicy API — pricing, specs and the playground
Autenticación
Authorization: Bearer YOUR_API_KEYModel & pricing
| Resolution | Per second | 5-second clip | 8-second clip | Actual frame |
|---|---|---|---|---|
| 480p | $0.03 | $0.15 | $0.24 | 832x480 |
| 720p | $0.06 | $0.30 | $0.48 | 1280x720 |
Billed on the duration you request (5 or 8 seconds), not on the exact length of the returned file. Adding a last frame costs nothing extra. Failed requests are not charged.
Limits (read this first)
| A first frame is required | This is image-to-video; there is no text-only mode. Omitting image returns a 400. |
| Duration is 5 or 8 seconds only | There are no other values. Passing 6 or 10 returns a 400 stating the legal values — it is never rounded to the nearest legal one and billed anyway. |
| Resolution is 480p or 720p only | The actual frames are 832x480 and 1280x720. There is no 1080p, 2K or 4K — upscale afterwards if you need more. |
| The output has no audio track | The returned MP4 is video only. Add sound in post, or use a video model that generates audio. |
| Generation takes 35-75 seconds | Measured range, rising with resolution and duration: about 35s for 480p/5s and about 72s for 720p/8s. Design your polling around an async task. |
| No watermark | We generated one clip in each of the four tiers and checked all four corners of each: no watermark or corner mark. |
Code examples
# ─── Image-to-video (first frame + prompt) ────────────────
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-2.2-i2v-spicy",
"image": "https://example.com/first-frame.jpg",
"prompt": "she slowly turns toward the camera, hair moving in the wind",
"duration": 5,
"resolution": "480p"
}'
# Response (async — a task is created):
# { "code": 200, "data": { "taskId": "clxxx", "state": "pending" } }
# ─── First + last frame (the model interpolates between them) ──
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-2.2-i2v-spicy",
"image": "https://example.com/first.jpg",
"last_image": "https://example.com/last.jpg",
"prompt": "smooth camera push-in",
"duration": 8,
"resolution": "720p",
"seed": 42
}'
# ─── Poll for the result ──────────────────────────────────
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# { "code": 200, "data": { "state": "completed", "resultUrls": ["https://r2.apimodels.app/..."] } }Parámetros de la solicitud
| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | wan-2.2-i2v-spicy |
| image | Yes | string | First frame: a public image URL or base64. image_url and first_frame_url are accepted too. |
| prompt | Yes | string | How the shot should move |
| last_image | No | string | End frame; when given the model interpolates from the first to this one. image_tail and last_frame_url are accepted too. |
| duration | No | number | Either 5 or 8, default 5. Anything else is a 400 — it is never silently changed to a legal value. |
| resolution | No | string | Either 480p or 720p, default 480p. There is no 1080p or 4K tier. |
| seed | No | number | Random seed (0 to 2147483647); random when omitted |
| prompt_extend | No | boolean | Automatic prompt rewriting, on by default. See the section below. |
| callback_url | No | string | Webhook URL called when the task completes |
Automatic prompt rewriting (prompt_extend)
When enabled, your prompt is first sent to a dedicated rewriting service that expands it and fills in detail, and the expanded version is what gets generated. It helps most with one-line prompts: if you write only "she turns her head", the rewrite adds camera, lighting and motion detail that the model responds to. The switch is on by default.
Pass prompt_extend: false to turn it off and have the model follow your text exactly. Turn it off when you have already written a long, precise prompt, or when you need reproducible comparisons alongside seed — otherwise each rewrite differs and a fixed seed still will not line up.
Note: there is no separate endpoint for the rewriting — this parameter is the only way to trigger it. It does not change what you pay: pricing depends only on resolution and duration.
What it is for: a cost-efficient traffic engine and interactive assets
Wan 2.2 Spicy is the volume model of the Spicy line: silent, 5 or 8 seconds, from $0.03/s at 480p. Silence is a feature here — with audio and video decoupled, your engine controls TTS, lip sync and background music precisely. For premium clips with native audio, 2 to 15 seconds and 1080p, use wan-2.7-i2v-spicy.
| Visual-novel and game sprites | Micro-animations for dialogue scenes: breathing, blinking, subtle gestures. Silent output lets the engine drive TTS and lip sync itself, and 5 to 8 seconds loops seamlessly. 30 characters × 8 moods × 5 seconds = 1200 seconds, $36 in total at 480p. |
| AI companions and chatbots | A moving avatar in the chat window. Pre-generate a library of mood clips; each message gets an emotion tag, the cached clip is matched, TTS is layered on top and streamed — millisecond response, and every dialogue node can afford a micro-animation. |
| Short-form social video | Fast visual hooks for TikTok, Reels and Shorts. Silent output pairs freely with whatever sound is trending on the platform, and at $0.15 for a 480p 5-second clip or $0.48 for 720p 8 seconds, large A/B batches are affordable. |
| AI photos and animated portraits | A user uploads one image and gets a portrait that breathes; high-frequency, low-friction UGC. The usual monetisation is a few free 480p renders and unlimited 720p on a paid tier. |
| Animated feed covers | A 5-second animated cover for each content card instead of a still, generated automatically on upload; $0.15 to $0.30 per cover, subsidised by the platform or reserved for members. |
| Live streaming and VTuber assets | Loop backgrounds, tip-triggered character reactions and fan effects. 5 to 8 second loops drop straight into an OBS scene source, and silence never fights the streamer's live voice. A library of 50 reactions costs under $15. |
The latest upstream build cut 2.2 sampling time roughly in half: about 50 seconds for a 480p 5-second clip. The 35 to 75 second range in the limits table above is our own measurement from 09-20; expect the lower end.
Notas
- Async: create a task for a taskId, then poll GET ?task_id= for the result
- The first frame takes a public image URL or base64; the last frame is optional and makes the model interpolate between the two
- The model page has a web playground with the same parameters
- Result files are deleted after 30 days; download or re-host them in time
- Charged only on success
Preguntas frecuentes
How much does Wan 2.2 Spicy cost?
Per second of the duration you request: $0.03 at 480p and $0.06 at 720p. That makes a 5-second clip $0.15 or $0.30 and an 8-second clip $0.24 or $0.48. Adding a last frame costs nothing extra, and failed requests are not charged.
What durations and resolutions does Wan 2.2 Spicy support?
Duration is 5 or 8 seconds and resolution is 480p (832x480) or 720p (1280x720) — those are the only values the model accepts. Anything else returns a 400 stating the legal values rather than being silently adjusted and billed.
Does Wan 2.2 Spicy generate audio?
No. The returned MP4 has no audio track, so add sound in post or pick a video model that generates audio. It also needs a first frame: there is no text-only mode, and the clips carry no watermark.
What does prompt_extend do on Wan 2.2 Spicy?
It is automatic prompt rewriting, on by default: your prompt is expanded with camera, lighting and motion detail before the clip is generated, which helps most with short one-line prompts. Pass prompt_extend: false to generate from your text verbatim — do that when your prompt is already precise, or when you need reproducible results alongside a fixed seed. There is no separate endpoint for the rewriting, and it does not change the price.