curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"prompt": "Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.",
"image_urls": ["https://example.com/reference.png"],
"video_urls": ["https://example.com/reference.mp4"],
"duration": 4,
"resolution": "720p",
"aspect_ratio": "adaptive",
"generate_audio": true
}'import os
import requests
payload = {
"model": "seedance-2.5",
"prompt": "Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.",
"image_urls": ["https://example.com/reference.png"],
"video_urls": ["https://example.com/reference.mp4"],
"duration": 4,
"resolution": "720p",
"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\": \"seedance-2.5\",\n \"prompt\": \"Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.\"\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: 'seedance-2.5',
prompt: 'Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.'
})
};
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"
}
}Seedance 2.5
All-in-one Seedance 2.5: one model ID covers text-to-video, image-to-video (first/last frame), and omni reference generation with the scenario inferred from your request materials.
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"prompt": "Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.",
"image_urls": ["https://example.com/reference.png"],
"video_urls": ["https://example.com/reference.mp4"],
"duration": 4,
"resolution": "720p",
"aspect_ratio": "adaptive",
"generate_audio": true
}'import os
import requests
payload = {
"model": "seedance-2.5",
"prompt": "Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.",
"image_urls": ["https://example.com/reference.png"],
"video_urls": ["https://example.com/reference.mp4"],
"duration": 4,
"resolution": "720p",
"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\": \"seedance-2.5\",\n \"prompt\": \"Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.\"\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: 'seedance-2.5',
prompt: 'Cinematic drone shot over neon-lit rooftops at dusk, 10 seconds.'
})
};
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.
"seedance-2.5"Generation or editing instructions, up to 30000 characters. It is recommended to keep the prompt to no more than 500 Chinese characters or 1,000 English words. Lengthy text will lead to scattered information, and the model may ignore details and only focus on key points, resulting in missing elements in the generated video.
30000Image 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 30 images are supported; each image must be smaller than 30 MB.
30Explicit 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 video URLs. Up to 10 videos are supported; each video lasts 2-30 seconds and the total duration of all videos must not exceed 30 seconds.
10Reference audio URLs. Up to 10 audios are supported; each audio lasts 2-30 seconds and the total duration of all audios must not exceed 30 seconds. Audio-only input is allowed.
10Video duration in seconds, from 4 to 30.
4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 4 <= x <= 30Generate video resolution.
480p, 720p, 1080p Aspect ratio of the generated video. When the ratio is configured as adaptive, the model will automatically adapt the aspect ratio according to the generation scenario.
adaptive, 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 Controls whether the generated video contains audio synchronized with the visuals.
Was this page helpful?