curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
}'import os
import requests
payload = {
"model": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"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 (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
payload := map[string]any{}
if err := json.Unmarshal([]byte(`{
"model": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
}`), &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": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
});
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": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
}
),
});
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"
}
}Seedance 2.0 Fast Reference to Video
Seedance 2.0 Fast Reference to Video is a lower-latency route that uses reference images, video, or audio to guide subjects, motion, visual style, and sound. Media URLs are submitted to asset review before task creation.
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
}'import os
import requests
payload = {
"model": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"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 (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
payload := map[string]any{}
if err := json.Unmarshal([]byte(`{
"model": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
}`), &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": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
});
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": "seedance-2.0-fast-r2v",
"prompt": "A cinematic tracking shot through a rain-soaked neon street, realistic motion, synchronized ambient sound.",
"duration": 5,
"audio_urls": [
"https://cdn.example.com/reference.mp3"
],
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"resolution": "720p",
"video_urls": [
"https://cdn.example.com/reference.mp4"
],
"aspect_ratio": "adaptive",
"generate_audio": true
}
),
});
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"
}
}Asset and Scene Limits
Seedance 2.0 Fast reference-material mode supports 9 reference images, 3 reference videos, and 3 audio clips. It is a full-capability route that supports real-person content and faces; materials are submitted to asset review before task creation.- Text prompt: For Chinese, keep it under 500 characters; for English, under 1,000 words.
- Image input: Supports jpeg, png, webp, bmp, tiff, gif, heic, and heif; each image under 30 MB; aspect ratio (0.4, 2.5); width and height (300px, 6000px).
- Multimodal reference scenes: No more than 9 images.
- Video input: Supports mp4 and mov; each video 2–15 seconds; up to 3 reference videos; total video duration must not exceed 15 seconds; each video under 50 MB; frame rate [24, 60].
- Audio input: Supports wav and mp3; each clip 2–15 seconds; up to 3 reference audio clips; total audio duration must not exceed 15 seconds; each clip under 15 MB.
- Audio input restriction: Audio cannot be provided on its own; at least one reference image or video is required.
Authorizations
Use your APIPod API key as a Bearer token in the Authorization header.
Body
Public APIPod model ID.
"seedance-2.0-fast-r2v"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.
300004, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 4 <= x <= 15Please note that audio files cannot be uploaded alone; at least one reference video or image must be included.
480p, 720p After enabling, the model will independently decide whether to search Internet content (such as products, weather, etc.) based on the user's prompt. This can improve the timeliness of generated videos but will also introduce a certain degree of latency.
adaptive, 1:1, 3:4, 4:3, 9:16, 16:9, 21:9 Controls whether the generated video contains audio synchronized with the visuals.
Was this page helpful?