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-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped in slow motion, with droplets splashing in every direction"
}'
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-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped"
}
response = requests.post(url, json=payload, headers=headers, timeout=30)
print(response.status_code, response.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-text-to-video',
prompt: 'A cinematic slow-motion shot of a glass of water being dropped'
})
});
const data = await response.json();
console.log(data);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.vibetool.ai/v1/videos/generations"
payload := map[string]string{
"model": "seedance-2.0-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped",
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(body))
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()
// Handle response...
fmt.Println(resp.StatusCode)
}
{
"task_id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426
}
{
"error": {
"message": "The `model` parameter is missing or invalid.",
"type": "invalid_request_error",
"param": "model",
"code": 400
}
}
Seedance Series
Seedance 2.0 Text To Video
Generate a video using ByteDance’s Seedance 2.0 model based on a text prompt.
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-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped in slow motion, with droplets splashing in every direction"
}'
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-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped"
}
response = requests.post(url, json=payload, headers=headers, timeout=30)
print(response.status_code, response.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-text-to-video',
prompt: 'A cinematic slow-motion shot of a glass of water being dropped'
})
});
const data = await response.json();
console.log(data);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.vibetool.ai/v1/videos/generations"
payload := map[string]string{
"model": "seedance-2.0-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped",
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(body))
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()
// Handle response...
fmt.Println(resp.StatusCode)
}
{
"task_id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426
}
{
"error": {
"message": "The `model` parameter is missing or invalid.",
"type": "invalid_request_error",
"param": "model",
"code": 400
}
}
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
The model ID to use for generation. Must be
seedance-2.0-text-to-video.string
required
Text description of the video you want to generate. Provide clear and detailed instructions for best results.
Response Schema
string
required
Task ID for the asynchronous generation job. Use this to poll the video result endpoint for status and output.
enum<string>
required
Initial status of the task. Typically
pending immediately after creation.Available values: pending, processing, completed, failedinteger
required
Unix timestamp (seconds) when the task was created.
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-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped in slow motion, with droplets splashing in every direction"
}'
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-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped"
}
response = requests.post(url, json=payload, headers=headers, timeout=30)
print(response.status_code, response.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-text-to-video',
prompt: 'A cinematic slow-motion shot of a glass of water being dropped'
})
});
const data = await response.json();
console.log(data);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.vibetool.ai/v1/videos/generations"
payload := map[string]string{
"model": "seedance-2.0-text-to-video",
"prompt": "A cinematic slow-motion shot of a glass of water being dropped",
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(body))
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()
// Handle response...
fmt.Println(resp.StatusCode)
}
{
"task_id": "vid_202512261557_b4fcbb08",
"status": "pending",
"created_at": 1767072426
}
{
"error": {
"message": "The `model` parameter is missing or invalid.",
"type": "invalid_request_error",
"param": "model",
"code": 400
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Was this page helpful?