curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "doubao-seedance-1.0-pro-fast",
"prompt": "A cat playing piano"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "doubao-seedance-1.0-pro-fast",
"prompt": "A cat playing piano"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({model: 'doubao-seedance-1.0-pro-fast', prompt: 'A cat playing piano'})
};
fetch('https://api.evolink.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evolink.ai/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'doubao-seedance-1.0-pro-fast',
'prompt' => 'A cat playing piano'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"doubao-seedance-1.0-pro-fast\",\n \"prompt\": \"A cat playing piano\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"doubao-seedance-1.0-pro-fast\",\n \"prompt\": \"A cat playing piano\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"doubao-seedance-1.0-pro-fast\",\n \"prompt\": \"A cat playing piano\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1761313744,
"id": "task-unified-1761313744-vux2jw0k",
"model": "doubao-seedance-1.0-pro-fast",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 165,
"video_duration": 8
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 8,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: doubao-seedance-1.0-pro-fast",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Seedance-1.0-Pro-Fast Video Generation
- Seedance 1.0 Pro Fast (doubao-seedance-1.0-pro-fast) model supports multiple generation modes including text-to-video and image-to-video
- Asynchronous processing mode, use the returned task ID to query
- Generated video links are valid for 24 hours, please save them promptly
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "doubao-seedance-1.0-pro-fast",
"prompt": "A cat playing piano"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "doubao-seedance-1.0-pro-fast",
"prompt": "A cat playing piano"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({model: 'doubao-seedance-1.0-pro-fast', prompt: 'A cat playing piano'})
};
fetch('https://api.evolink.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evolink.ai/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'doubao-seedance-1.0-pro-fast',
'prompt' => 'A cat playing piano'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"doubao-seedance-1.0-pro-fast\",\n \"prompt\": \"A cat playing piano\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"doubao-seedance-1.0-pro-fast\",\n \"prompt\": \"A cat playing piano\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"doubao-seedance-1.0-pro-fast\",\n \"prompt\": \"A cat playing piano\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1761313744,
"id": "task-unified-1761313744-vux2jw0k",
"model": "doubao-seedance-1.0-pro-fast",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 165,
"video_duration": 8
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 8,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: doubao-seedance-1.0-pro-fast",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Authorizations
##All APIs require Bearer Token authentication##
Get API Key:
Visit API Key Management Page to get your API Key
Add to request header:
Authorization: Bearer YOUR_API_KEY
Body
Video generation model name
doubao-seedance-1.0-pro-fast "doubao-seedance-1.0-pro-fast"
Prompt describing the video you want to generate, limited to 2000 tokens
2000"A cat playing piano"
Specifies the duration of the generated video (in seconds), defaults to 5 seconds
Note:
- Supports any integer value between
2and12seconds - Billing for a single request is based on the
durationvalue; longer durations result in higher costs
2 <= x <= 12Video resolution, defaults to 1080p
Note:
480p: Lower resolution, lower pricing720p: Standard definition, standard pricing1080p: High definition, higher pricing, this is the default value
480p, 720p, 1080p "1080p"
Video aspect ratio
Text-to-video mode:
- Default value:
16:9 - Supported values:
16:9(landscape),9:16(portrait),1:1(square),4:3,3:4,21:9(ultra-wide)
Image-to-video mode (when using image_urls):
- Default value:
adaptive - Supported values: In addition to the above 6 ratios, also supports
keep_ratio(keep original aspect ratio) andadaptive(adaptive)
"16:9"
Reference image URL list for image-to-video functionality
Note:
- Number of images supported per request:
1image - Image size: Not exceeding
10MB - Supported file formats:
.jpg,.jpeg,.png,.webp - Image URLs must be directly viewable by the server, or the URL should trigger a direct download when accessed (typically these URLs end with image extensions like
.png,.jpg)
1["https://example.com/image.jpg"]
HTTPS callback URL after task completion
Callback timing:
- Triggered when task is completed, failed, or cancelled
- Sent after billing confirmation is completed
Security restrictions:
- Only HTTPS protocol is supported
- Callbacks to internal network IP addresses are prohibited (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- URL length must not exceed
2048characters
Callback mechanism:
- Timeout:
10seconds - Maximum of
3retries after failure (retries occur after1/2/4seconds following failure) - Callback response body format is consistent with task query API response format
- Callback URL returning 2xx status code is considered successful; other status codes will trigger retries
"https://your-domain.com/webhooks/video-task-completed"
Response
Video generation task created successfully
Task creation timestamp
1761313744
Task ID
"task-unified-1761313744-vux2jw0k"
Actual model name used
"doubao-seedance-1.0-pro-fast"
Specific type of the task
video.generation.task Task progress percentage (0-100)
0 <= x <= 1000
Task status
pending, processing, completed, failed "pending"
Video task detailed information
Show child attributes
Show child attributes
Output type of the task
text, image, audio, video "video"
Usage and billing information
Show child attributes
Show child attributes