curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'import os
import requests
payload = {
"model": "seedance-2.0-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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 Mini Image to Video
Seedance 2.0 Mini Image to Video is a efficiency-oriented route for scaled workloads that animates a required first-frame image and can use an optional last… 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-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'import os
import requests
payload = {
"model": "seedance-2.0-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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-mini-i2v",
"prompt": "Animate the subject with a slow camera push-in, natural motion, and soft cinematic lighting.",
"image_urls": [
"https://cdn.example.com/reference-1.jpg"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"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"
}
}Authorizations
Use your APIPod API key as a Bearer token in the Authorization header.
Body
Public APIPod model ID.
"seedance-2.0-mini-i2v"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 <= 15Generate video resolution.
480p, 720p Aspect ratio of the generated video,When the ratio is configured as adaptive,automatically select the closest aspect ratio based on the proportion of the uploaded first frame image.
adaptive, 4:3, 1:1, 3:4, 9:16, 16:9, 21:9 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.
Controls whether the generated video contains audio synchronized with the visuals.
Was this page helpful?