curl -X POST https://api.vibetool.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9"
}'
import requests
url = "https://api.vibetool.ai/v1/videos/generations"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9"
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
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({
reference_video: "https://example.com/input.mp4",
prompt: "A person walking on a sunny beach",
duration: 5,
aspect_ratio: "16:9"
})
});
const data = await response.json();
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{}{
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9",
}
jsonBytes, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonBytes))
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 {
fmt.Println(err)
return
}
defer resp.Body.Close()
fmt.Println(resp.StatusCode)
}
{
"task_id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426
}
{
"error": {
"message": "Invalid parameter: reference_video must be a valid URL or base64 data",
"type": "invalid_request_error",
"param": "reference_video",
"code": 400
}
}
Seedance Series
Seedance 2.0 Reference To Video
Create an asynchronous video generation task using a reference video, image, or text prompt with ByteDance’s Seedance 2.0 model.
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 '{
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9"
}'
import requests
url = "https://api.vibetool.ai/v1/videos/generations"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9"
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
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({
reference_video: "https://example.com/input.mp4",
prompt: "A person walking on a sunny beach",
duration: 5,
aspect_ratio: "16:9"
})
});
const data = await response.json();
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{}{
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9",
}
jsonBytes, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonBytes))
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 {
fmt.Println(err)
return
}
defer resp.Body.Close()
fmt.Println(resp.StatusCode)
}
{
"task_id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426
}
{
"error": {
"message": "Invalid parameter: reference_video must be a valid URL or base64 data",
"type": "invalid_request_error",
"param": "reference_video",
"code": 400
}
}
Pricing: See vibetool.ai/pricing for current rates.
task_id to poll for completion with the Get Video Result endpoint.
The generated video is available for 24 hours after completion. Download it promptly via the
video_url returned in the status response.Authorization
string
required
All API requests require Bearer Token authentication. Format:
Bearer YOUR_API_KEYRequest Body
string
required
URL or base64-encoded data of the reference video. Maximum duration of 10 seconds recommended.
string
default:"null"
A text description to guide the video generation. Can be omitted if using a reference video or image.
string
default:"null"
URL or base64-encoded data of an optional reference image to influence the style or composition.
number
default:"4"
Desired video duration in seconds. Seedance 2.0 supports up to 10 seconds.
string
default:"16:9"
Aspect ratio of the output video. Supported:
16:9, 9:16, 1:1, 4:3, 3:4.Response Schema
string
required
Unique identifier for the generation task. Use this with the status endpoint to track progress.
string
required
Initial task status. Always
"pending" upon creation.integer
required
Unix timestamp (seconds) of task creation.
curl -X POST https://api.vibetool.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9"
}'
import requests
url = "https://api.vibetool.ai/v1/videos/generations"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9"
}
r = requests.post(url, headers=headers, json=payload, timeout=30)
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({
reference_video: "https://example.com/input.mp4",
prompt: "A person walking on a sunny beach",
duration: 5,
aspect_ratio: "16:9"
})
});
const data = await response.json();
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{}{
"reference_video": "https://example.com/input.mp4",
"prompt": "A person walking on a sunny beach",
"duration": 5,
"aspect_ratio": "16:9",
}
jsonBytes, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonBytes))
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 {
fmt.Println(err)
return
}
defer resp.Body.Close()
fmt.Println(resp.StatusCode)
}
{
"task_id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426
}
{
"error": {
"message": "Invalid parameter: reference_video must be a valid URL or base64 data",
"type": "invalid_request_error",
"param": "reference_video",
"code": 400
}
}
After receiving a
task_id, you can poll the Get Video Result endpoint every few seconds until status becomes "completed" or "failed". Results include the download URL and duration.For best quality with human subjects, we recommend providing a reference video at least 2 seconds long and a clear description of the desired motion.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Use seedance-2.0-reference-to-video.
Available options:
seedance-2.0-reference-to-video Reference video URL
Text description of the video to generate
Reference image URL
Duration in seconds
Output aspect ratio
Was this page helpful?