Bytedance Seedance 2.0 Fast
curl --request POST \
--url https://whollyapi.com/api/v1/jobs/createTask \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"reference_image_urls": [
"<string>"
],
"reference_video_urls": [
"<string>"
],
"reference_audio_urls": [
"<string>"
],
"generate_audio": true,
"resolution": "<string>",
"aspect_ratio": "<string>",
"duration": 123,
"web_search": true
}
}
'import requests
url = "https://whollyapi.com/api/v1/jobs/createTask"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"reference_image_urls": ["<string>"],
"reference_video_urls": ["<string>"],
"reference_audio_urls": ["<string>"],
"generate_audio": True,
"resolution": "<string>",
"aspect_ratio": "<string>",
"duration": 123,
"web_search": True
}
}
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: '<string>',
input: {
prompt: '<string>',
first_frame_url: '<string>',
last_frame_url: '<string>',
reference_image_urls: ['<string>'],
reference_video_urls: ['<string>'],
reference_audio_urls: ['<string>'],
generate_audio: true,
resolution: '<string>',
aspect_ratio: '<string>',
duration: 123,
web_search: true
}
})
};
fetch('https://whollyapi.com/api/v1/jobs/createTask', 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://whollyapi.com/api/v1/jobs/createTask",
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' => '<string>',
'input' => [
'prompt' => '<string>',
'first_frame_url' => '<string>',
'last_frame_url' => '<string>',
'reference_image_urls' => [
'<string>'
],
'reference_video_urls' => [
'<string>'
],
'reference_audio_urls' => [
'<string>'
],
'generate_audio' => true,
'resolution' => '<string>',
'aspect_ratio' => '<string>',
'duration' => 123,
'web_search' => true
]
]),
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://whollyapi.com/api/v1/jobs/createTask"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"reference_image_urls\": [\n \"<string>\"\n ],\n \"reference_video_urls\": [\n \"<string>\"\n ],\n \"reference_audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true,\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"duration\": 123,\n \"web_search\": true\n }\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://whollyapi.com/api/v1/jobs/createTask")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"reference_image_urls\": [\n \"<string>\"\n ],\n \"reference_video_urls\": [\n \"<string>\"\n ],\n \"reference_audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true,\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"duration\": 123,\n \"web_search\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whollyapi.com/api/v1/jobs/createTask")
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\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"reference_image_urls\": [\n \"<string>\"\n ],\n \"reference_video_urls\": [\n \"<string>\"\n ],\n \"reference_audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true,\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"duration\": 123,\n \"web_search\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"msg": "<string>",
"data": {
"taskId": "<string>"
}
}Bytedance
Bytedance Seedance 2.0 Fast
Generate videos using the Bytedance Seedance 2.0 Fast model.
POST
/
api
/
v1
/
jobs
/
createTask
Bytedance Seedance 2.0 Fast
curl --request POST \
--url https://whollyapi.com/api/v1/jobs/createTask \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"input": {
"prompt": "<string>",
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"reference_image_urls": [
"<string>"
],
"reference_video_urls": [
"<string>"
],
"reference_audio_urls": [
"<string>"
],
"generate_audio": true,
"resolution": "<string>",
"aspect_ratio": "<string>",
"duration": 123,
"web_search": true
}
}
'import requests
url = "https://whollyapi.com/api/v1/jobs/createTask"
payload = {
"model": "<string>",
"input": {
"prompt": "<string>",
"first_frame_url": "<string>",
"last_frame_url": "<string>",
"reference_image_urls": ["<string>"],
"reference_video_urls": ["<string>"],
"reference_audio_urls": ["<string>"],
"generate_audio": True,
"resolution": "<string>",
"aspect_ratio": "<string>",
"duration": 123,
"web_search": True
}
}
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: '<string>',
input: {
prompt: '<string>',
first_frame_url: '<string>',
last_frame_url: '<string>',
reference_image_urls: ['<string>'],
reference_video_urls: ['<string>'],
reference_audio_urls: ['<string>'],
generate_audio: true,
resolution: '<string>',
aspect_ratio: '<string>',
duration: 123,
web_search: true
}
})
};
fetch('https://whollyapi.com/api/v1/jobs/createTask', 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://whollyapi.com/api/v1/jobs/createTask",
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' => '<string>',
'input' => [
'prompt' => '<string>',
'first_frame_url' => '<string>',
'last_frame_url' => '<string>',
'reference_image_urls' => [
'<string>'
],
'reference_video_urls' => [
'<string>'
],
'reference_audio_urls' => [
'<string>'
],
'generate_audio' => true,
'resolution' => '<string>',
'aspect_ratio' => '<string>',
'duration' => 123,
'web_search' => true
]
]),
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://whollyapi.com/api/v1/jobs/createTask"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"reference_image_urls\": [\n \"<string>\"\n ],\n \"reference_video_urls\": [\n \"<string>\"\n ],\n \"reference_audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true,\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"duration\": 123,\n \"web_search\": true\n }\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://whollyapi.com/api/v1/jobs/createTask")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"reference_image_urls\": [\n \"<string>\"\n ],\n \"reference_video_urls\": [\n \"<string>\"\n ],\n \"reference_audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true,\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"duration\": 123,\n \"web_search\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whollyapi.com/api/v1/jobs/createTask")
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\": \"<string>\",\n \"input\": {\n \"prompt\": \"<string>\",\n \"first_frame_url\": \"<string>\",\n \"last_frame_url\": \"<string>\",\n \"reference_image_urls\": [\n \"<string>\"\n ],\n \"reference_video_urls\": [\n \"<string>\"\n ],\n \"reference_audio_urls\": [\n \"<string>\"\n ],\n \"generate_audio\": true,\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"duration\": 123,\n \"web_search\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"msg": "<string>",
"data": {
"taskId": "<string>"
}
}Endpoint
POST /api/v1/jobs/createTask
Authentication
All API requests require a Bearer Token.Authorization: Bearer YOUR_API_KEY
Important Notes
- Image-to-Video (First Frame) and Image-to-Video (First & Last Frames) are mutually exclusive scenarios and cannot be used simultaneously.
Request Body
The request body must be JSON.Top-level parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
model | string | Yes | bytedance/seedance-2-fast | Model name. Must be bytedance/seedance-2-fast. |
input | object | Yes | — | Input parameters for the generation task. |
string
required
Must be
bytedance/seedance-2-fast.object
required
Input Parameters
Theinput object contains the parameters used to generate the video.string
Use
Maximum length:
prompt to describe the video you want to generate.Manimum length: 3 characters. Maximum length:
20000 characters.string
Provide the URL of the image to be used as the first frame for video generation. The value must be an uploaded file URL, not the file content itself.Supported image formats:
image/jpegimage/pngimage/jpgimage/webp
30 MBstring
Provide the URL of the image to be used as the last frame for video generation. The value must be an uploaded file URL, not the file content itself.Supported image formats:
image/jpegimage/pngimage/jpgimage/webp
30 MBstring[]
Enter the URL(s) of the reference image(s) to be used for video generation.Supported image formats:
Maximum number of files : The sum of the number of frames at the beginning and end must not exceed
Width and height (px):
Aspect ratio (width/height):
jpegpngwebpbmptiffgif
30 MB Maximum number of files : The sum of the number of frames at the beginning and end must not exceed
9. Width and height (px):
(300, 6000) Aspect ratio (width/height):
0.4 to 2.5string[]
Enter the URL(s) of the reference video(s) to be used for video generation.Maximum reference videos :
Single video requirements
Supported video formats:
Width and height (px):
Aspect ratio (width/height):
Frame rate (FPS): [24, 60]
Total pixels: [640×640=409600, 834×1112=927408]
3 Single video requirements
Supported video formats:
mp4mov
480p720p
- For single video duration beetween
2and15. - Total duration of all videos not exceeding
15seconds.
50 MB. Width and height (px):
(300, 6000) Aspect ratio (width/height):
0.4 to 2.5 Frame rate (FPS): [24, 60]
Total pixels: [640×640=409600, 834×1112=927408]
string[]
Enter the URL(s) of the reference audio(s) to be used for video generation.Maximum reference audio :
Single audio requirements
Supported audio formats:
3 Single audio requirements
Supported audio formats:
wavmp3
- For single audio duration beetween
2and15. - Total duration of all audios not exceeding
15seconds.
15 MB.boolean
default:"true"
Whether to generate audio.Default:
truestring
Specify the resolution of the generated video.Supported values:
480p720p
720pstring
default:"16:9"
Applies to multi-image generation. In single-image mode, video dimensions follow the source image dimensions.Supported values:
3:4, 4:3, 1:1, 16:9, 9:16, 21:9, adaptive.Default: 16:9number
Generated video duration in seconds.Type:
Supported range:
integer Supported range:
4–15, in one-second steps.Default: 5boolean
default:"false"
Use online search. Only available for text-to-video.Default:
falseExample Request
{
"model": "bytedance/seedance-2-fast",
"input": {
"prompt": "A serene beach at sunset with waves gently crashing on the shore, palm trees swaying in the breeze, and seagulls flying across the orange sky",
"first_frame_url": "https://demo.com/example2.png",
"last_frame_url": "https://demo.com/example3.png",
"reference_image_urls": [
"https://demo.com/example1.png"
],
"reference_video_urls": [
"https://demo.com/example1.mp4"
],
"reference_audio_urls": [
"https://demo.com/example1.mp3"
],
"return_last_frame": false,
"generate_audio": false,
"resolution": "720p",
"aspect_ratio": "16:9",
"duration": 15,
"web_search": false
}
}
Response
Successful Response
number
Response status code.
string
Response message. Contains the error description when the request fails.Example:
successobject
required
The task data object containing task id.
string
required
The unique identifier for this task.Example:
task_123456Query Task Status
After submitting a task, use the unified query endpoint to check the task progress and retrieve the generated results.Get Task Details
Check task status, monitor generation progress, and retrieve results.
Error Response
{
"code": 500,
"msg": "Server Error - An unexpected error occurred while processing the request",
"data": null
}
Response Codes
| Code | Meaning |
|---|---|
200 | Success — the request was successfully processed. |
401 | Unauthorized — authentication credentials are missing or invalid. |
402 | Insufficient Credits — the account does not have enough credits. |
404 | Not Found — the requested resource or interface does not exist. |
408 | Upstream service issue — no result has been returned for over 10 minutes. |
422 | Validation Error — request parameters failed validation. |
429 | Rate Limited — request frequency limit has been exceeded. |
433 | Request Limit — sub-key usage exceeded the limit. |
455 | Service Unavailable — system is undergoing maintenance. |
500 | Server Error — an unexpected error occurred while processing the request. |
501 | Generation Failed — content generation failed. |
505 | Feature Disabled — the requested feature is disabled. |
