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-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42
}'
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-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
print(r.status_code, r.json())
const fetch = require('node-fetch');
const url = 'https://api.vibetool.ai/v1/videos/generations';
const headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
};
const body = {
model: 'seedance-2.0-fast-reference-to-video',
prompt: 'A serene mountain landscape at sunset, with clouds drifting slowly',
image_url: 'https://example.com/reference.png',
seed: 42
};
fetch(url, {
method: 'POST',
headers,
body: JSON.stringify(body)
})
.then(res => res.json())
.then(data => console.log(data));
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
func main() {
url := "https://api.vibetool.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "seedance-2.0-fast-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42,
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 30 * time.Second}
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.Printf("%+v\n", result)
}
{
"id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426,
"estimated_duration_seconds": 10
}
{
"error": {
"message": "Invalid API Key provided",
"type": "authentication_error",
"param": null,
"code": 401
}
}
Seedance Series
Seedance 2.0 Fast Reference To Video
Generate a video using ByteDance’s Seedance 2.0 model from a text prompt, optional reference image, and optional reference video.
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-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42
}'
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-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
print(r.status_code, r.json())
const fetch = require('node-fetch');
const url = 'https://api.vibetool.ai/v1/videos/generations';
const headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
};
const body = {
model: 'seedance-2.0-fast-reference-to-video',
prompt: 'A serene mountain landscape at sunset, with clouds drifting slowly',
image_url: 'https://example.com/reference.png',
seed: 42
};
fetch(url, {
method: 'POST',
headers,
body: JSON.stringify(body)
})
.then(res => res.json())
.then(data => console.log(data));
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
func main() {
url := "https://api.vibetool.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "seedance-2.0-fast-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42,
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 30 * time.Second}
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.Printf("%+v\n", result)
}
{
"id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426,
"estimated_duration_seconds": 10
}
{
"error": {
"message": "Invalid API Key provided",
"type": "authentication_error",
"param": null,
"code": 401
}
}
Pricing: See vibetool.ai/pricing for current rates.
Authorization
string
required
All APIs require Bearer Token authentication. Format:
Bearer YOUR_API_KEYRequest Body
string
required
Model identifier. Must be
seedance-2.0-fast-reference-to-video.string
required
A text description of the video to generate. For example,
"A serene mountain landscape at sunset, with clouds drifting slowly".Maximum length: 1000 characters.string
URL of a reference image to guide the video content. Optional.
string
URL of a reference video to influence motion or style. Optional.
integer
Seed for deterministic generation. If omitted, a random seed is used.Range:
0 to 2147483647Response Schema
string
required
Unique task ID. Use this to poll for the generated video via the status endpoint.
enum<string>
required
Initial task status. Always
pending immediately after creation.Available options: pending, processing, completed, failedinteger
Unix timestamp (seconds) when the task was created.
number
Approximate duration of the final video in seconds. Useful for billing estimates.
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-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42
}'
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-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
print(r.status_code, r.json())
const fetch = require('node-fetch');
const url = 'https://api.vibetool.ai/v1/videos/generations';
const headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
};
const body = {
model: 'seedance-2.0-fast-reference-to-video',
prompt: 'A serene mountain landscape at sunset, with clouds drifting slowly',
image_url: 'https://example.com/reference.png',
seed: 42
};
fetch(url, {
method: 'POST',
headers,
body: JSON.stringify(body)
})
.then(res => res.json())
.then(data => console.log(data));
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
func main() {
url := "https://api.vibetool.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "seedance-2.0-fast-reference-to-video",
"prompt": "A serene mountain landscape at sunset, with clouds drifting slowly",
"image_url": "https://example.com/reference.png",
"seed": 42,
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 30 * time.Second}
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.Printf("%+v\n", result)
}
{
"id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426,
"estimated_duration_seconds": 10
}
{
"error": {
"message": "Invalid API Key provided",
"type": "authentication_error",
"param": null,
"code": 401
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Use seedance-2.0-fast-reference-to-video.
Available options:
seedance-2.0-fast-reference-to-video Text description of the video to generate
Reference image URL
Reference video URL
Random seed for reproducibility
Was this page helpful?