curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-prime",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"duration": 5,
"resolution": "1080P",
"aspect_ratio": "adaptive",
"generate_audio": true
}'import os
import requests
payload = {
"model": "wan3.0-video-prime",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"duration": 5,
"resolution": "1080P",
"aspect_ratio": "adaptive",
"generate_audio": True
}
response = requests.post(
"https://api.apipod.ai/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json())package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apipod.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"wan3.0-video-prime\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}falseconst options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({model: 'wan3.0-video-prime'})
};
fetch('https://api.apipod.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"code": 200,
"message": "success",
"data": {
"task_id": "vid_task_01JEXAMPLE"
}
}WAN 3.0 Video Prime
All-in-one WAN 3.0 Video Prime: every scenario from one model ID — text-to-video, image-to-video (first/last frame), and reference generation — at the high-speed Prime tier.
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-prime",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"duration": 5,
"resolution": "1080P",
"aspect_ratio": "adaptive",
"generate_audio": true
}'import os
import requests
payload = {
"model": "wan3.0-video-prime",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"duration": 5,
"resolution": "1080P",
"aspect_ratio": "adaptive",
"generate_audio": True
}
response = requests.post(
"https://api.apipod.ai/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json())package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apipod.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"wan3.0-video-prime\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}falseconst options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({model: 'wan3.0-video-prime'})
};
fetch('https://api.apipod.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"code": 200,
"message": "success",
"data": {
"task_id": "vid_task_01JEXAMPLE"
}
}Authorizations
Use your APIPod API key as a Bearer token in the Authorization header.
Body
Public APIPod model ID.
"wan3.0-video-prime"Text prompt used to describe the expected generated video content. Required for the text-to-video scenario.
20000Image URLs. Scenario inference applies: when images are the only media input and 1-2 URLs are provided they are treated as first/last frames (image-to-video); with other reference media present or more than 2 URLs, all images are treated as reference images. Pair with the role field to pin the semantics explicitly. Up to 10 images are supported.
10Explicit interpretation of image_urls. reference_images: all images are treated as reference images regardless of count. first_last_frame: images are treated as the first frame plus an optional last frame (max 2; cannot be combined with reference videos or audios). When omitted, the scenario is inferred from the materials.
reference_images, first_last_frame Reference videos. Maximum 5 clips, total duration no more than 15 seconds.
5Refer to the audio, with a maximum of 5 segments and a total duration no more than 15 seconds.
5Reference File, maximum one, cannot be input together with link url. Supported formats: docx, doc, xlsx, xls, pptx, ppt, pdf, txt, key, pages, numbers, md.
The URL address of the public web page. Only public web pages that do not require login are supported for parsing. Cannot be input together with file.
The duration of the generated video, in seconds. -1 lets the model decide the duration.
-1 2 <= x <= 30480P, 720P, 1080P adaptive, 16:9, 4:3, 1:1, 3:4, 9:16 Was this page helpful?