curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}'import os
import requests
payload = {
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}
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 (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
payload := map[string]any{}
if err := json.Unmarshal([]byte(`{
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}`), &payload); err != nil {
panic(err)
}
body, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}use reqwest::Client;
use serde_json::json;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload = json!({
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
});
let response = Client::new()
.post("https://api.apipod.ai/v1/videos/generations")
.bearer_auth(env::var("APIPOD_API_KEY")?)
.json(&payload)
.send()
.await?
.error_for_status()?;
println!("{}", response.text().await?);
Ok(())
}const response = await fetch("https://api.apipod.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(
{
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}
),
});
if (!response.ok) {
throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
}
console.log(await response.json());{
"code": 200,
"message": "success",
"data": {
"task_id": "vid_task_01JEXAMPLE"
}
}WAN 2.7 Text to Video
Wan 2.7 Text to Video is a dedicated task mode in Alibaba’s Wan video family that creates video directly from text prompts without source media.
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}'import os
import requests
payload = {
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}
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 (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
payload := map[string]any{}
if err := json.Unmarshal([]byte(`{
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}`), &payload); err != nil {
panic(err)
}
body, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}use reqwest::Client;
use serde_json::json;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload = json!({
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
});
let response = Client::new()
.post("https://api.apipod.ai/v1/videos/generations")
.bearer_auth(env::var("APIPOD_API_KEY")?)
.json(&payload)
.send()
.await?
.error_for_status()?;
println!("{}", response.text().await?);
Ok(())
}const response = await fetch("https://api.apipod.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(
{
"model": "wan2.7-t2v",
"prompt": "A premium product photograph on a dark studio set, precise typography, soft rim lighting, highly detailed.",
"resolution": "1080P",
"aspect_ratio": "16:9",
"duration": 5
}
),
});
if (!response.ok) {
throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
}
console.log(await response.json());{
"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.
"wan2.7-t2v"Describe the content of the video to be generated.
5000Whether to enable intelligent prompt rewriting. After enabling, a large model will be used to intelligently rewrite the input prompt. The generation effect is significantly improved for short prompts, but it will increase time consumption.
Describe the content you do not wish to see in the video frame, which can be used to restrict the video frame.
500The model will generate a video using this audio. If the audio length exceeds the duration value (e.g., 5 seconds), the first 5 seconds will be automatically captured and the rest discarded. If the audio length is shorter than the video duration, the part beyond the audio length will be silent video. For example, if the audio is 3 seconds long and the video duration is 5 seconds, the output video will have sound in the first 3 seconds and be silent in the remaining 2 seconds.
Resolution levels for video generation, used to control the clarity (total pixels) of the video
720P, 1080P Aspect ratio of the generated video.
16:9, 9:16, 1:1, 4:3, 3:4 Duration of the generated video.
2 <= x <= 15Whether to add a watermark logo, with the watermark positioned at the bottom right corner of the video
Was this page helpful?