curl -X POST https://api.vibetool.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4
}'
import requests
url = "https://api.vibetool.ai/v1/videos/generations"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4
}
r = requests.post(url, json=payload, headers=headers, timeout=60)
print(r.status_code, r.json())
const response = await fetch("https://api.vibetool.ai/v1/videos/generations", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "seedance-2.0-fast-image-to-video",
image_url: "https://example.com/input.png",
prompt: "a cat stretching on a sunny windowsill",
duration: 4
})
});
const data = await response.json();
console.log(data);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4,
}
b, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.vibetool.ai/v1/videos/generations", bytes.NewReader(b))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
{
"id": "gen_vid_abc123",
"object": "video.generation",
"model": "seedance-2.0-fast-image-to-video",
"created_at": 1767072426,
"status": "pending",
"task_id": "vid_202512261557_b4fcbb08"
}
{
"error": {
"message": "Invalid image URL or unsupported image format.",
"type": "invalid_request_error",
"param": "image_url",
"code": 400
}
}
Seedance Series
Seedance 2.0 Fast Image To Video
ByteDance’s second-generation video model for multimodal video generation, now with full real human video support. Available globally with per-second billing.
POST
/
v1
/
videos
/
generations
curl -X POST https://api.vibetool.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4
}'
import requests
url = "https://api.vibetool.ai/v1/videos/generations"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4
}
r = requests.post(url, json=payload, headers=headers, timeout=60)
print(r.status_code, r.json())
const response = await fetch("https://api.vibetool.ai/v1/videos/generations", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "seedance-2.0-fast-image-to-video",
image_url: "https://example.com/input.png",
prompt: "a cat stretching on a sunny windowsill",
duration: 4
})
});
const data = await response.json();
console.log(data);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4,
}
b, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.vibetool.ai/v1/videos/generations", bytes.NewReader(b))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
{
"id": "gen_vid_abc123",
"object": "video.generation",
"model": "seedance-2.0-fast-image-to-video",
"created_at": 1767072426,
"status": "pending",
"task_id": "vid_202512261557_b4fcbb08"
}
{
"error": {
"message": "Invalid image URL or unsupported image format.",
"type": "invalid_request_error",
"param": "image_url",
"code": 400
}
}
Pricing: See vibetool.ai/pricing for current rates.
Input Modalities
- Image – a still image to animate
- Text – (optional) a prompt describing the desired motion or scene
Output Modality
- Video – an MP4 file (duration depends on model configuration)
Authorization
string
required
All APIs require Bearer Token authentication. Format:
Bearer YOUR_API_KEYRequest Body
string
required
The model identifier. Use
"seedance-2.0-fast-image-to-video".string
required
A publicly accessible URL to the input image (JPEG or PNG). The image should be at least 256x256 pixels and no larger than 2048x2048.
string
Optional text description of the desired video content (e.g., “a person waving, cinematic lighting”).
number
Requested video duration in seconds (defaults to 4, maximum 10). The model may adjust to match its capabilities.
Response Schema
string
required
Unique identifier for the generation task.
string
required
Type of object, always
"video.generation".string
required
The model used, e.g.,
"seedance-2.0-fast-image-to-video".integer
required
Unix timestamp (seconds) of task creation.
string
required
Initial status:
"pending" or "processing". Use the Get Video Status endpoint to poll for completion.string
required
The task ID to query in the status endpoint.
curl -X POST https://api.vibetool.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4
}'
import requests
url = "https://api.vibetool.ai/v1/videos/generations"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4
}
r = requests.post(url, json=payload, headers=headers, timeout=60)
print(r.status_code, r.json())
const response = await fetch("https://api.vibetool.ai/v1/videos/generations", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "seedance-2.0-fast-image-to-video",
image_url: "https://example.com/input.png",
prompt: "a cat stretching on a sunny windowsill",
duration: 4
})
});
const data = await response.json();
console.log(data);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"model": "seedance-2.0-fast-image-to-video",
"image_url": "https://example.com/input.png",
"prompt": "a cat stretching on a sunny windowsill",
"duration": 4,
}
b, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.vibetool.ai/v1/videos/generations", bytes.NewReader(b))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
{
"id": "gen_vid_abc123",
"object": "video.generation",
"model": "seedance-2.0-fast-image-to-video",
"created_at": 1767072426,
"status": "pending",
"task_id": "vid_202512261557_b4fcbb08"
}
{
"error": {
"message": "Invalid image URL or unsupported image format.",
"type": "invalid_request_error",
"param": "image_url",
"code": 400
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Was this page helpful?