seedance-1-5-pro-251215 (Image To Video)
POST
/
api
/
v3
/
contents
/
generations
/
tasks
seedance-1-5-pro-251215 (Image To Video)
curl --request POST \
--url https://gptproto.com/api/v3/contents/generations/tasksimport requests
url = "https://gptproto.com/api/v3/contents/generations/tasks"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://gptproto.com/api/v3/contents/generations/tasks', 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://gptproto.com/api/v3/contents/generations/tasks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://gptproto.com/api/v3/contents/generations/tasks"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://gptproto.com/api/v3/contents/generations/tasks")
.asString();require 'uri'
require 'net/http'
url = URI("https://gptproto.com/api/v3/contents/generations/tasks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyAuthentication
- Sign up for a GPTProto account at https://gptproto.com
- Navigate to the API Keys section in your dashboard
- Generate a new API key (sk-xxxxx)
- Copy and securely store your API key For authentication details, please refer to the Authentication section.
Initiate Request
curl --location 'https://gptproto.com/api/v3/contents/generations/tasks' \
--header 'Authorization: GPTPROTO_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "A girl holding a fox, gentle breeze blowing through her hair, golden sunset light, cinematic, shallow depth of field"
},
{
"type": "image_url",
"image_url": {
"url": "https://tos.gptproto.com/resource/cat.png"
}
}
],
"generate_audio": true
}'
const axios = require('axios');
let data = JSON.stringify({
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "A girl holding a fox, gentle breeze blowing through her hair, golden sunset light, cinematic, shallow depth of field"
},
{
"type": "image_url",
"image_url": {
"url": "https://tos.gptproto.com/resource/cat.png"
}
}
],
"generate_audio": true
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://gptproto.com/api/v3/contents/generations/tasks',
headers: {
'Authorization': 'GPTPROTO_API_KEY',
'Content-Type': 'application/json'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
import requests
import json
url = "https://gptproto.com/api/v3/contents/generations/tasks"
payload = json.dumps({
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "A girl holding a fox, gentle breeze blowing through her hair, golden sunset light, cinematic, shallow depth of field"
},
{
"type": "image_url",
"image_url": {
"url": "https://tos.gptproto.com/resource/cat.png"
}
}
],
"generate_audio": True
})
headers = {
'Authorization': 'GPTPROTO_API_KEY',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://gptproto.com/api/v3/contents/generations/tasks"
method := "POST"
payload := strings.NewReader(`{
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "A girl holding a fox, gentle breeze blowing through her hair, golden sunset light, cinematic, shallow depth of field"
},
{
"type": "image_url",
"image_url": {
"url": "https://tos.gptproto.com/resource/cat.png"
}
}
],
"generate_audio": true
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Authorization", "GPTPROTO_API_KEY")
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
Query Result
curl -X GET "https://gptproto.com/api/v3/contents/generations/tasks/{id}" \
-H "Authorization: GPTPROTO_API_KEY" \
-H "Content-Type: application/json"
import requests
import json
url = "https://gptproto.com/api/v3/contents/generations/tasks/{id}"
headers = {
"Authorization: GPTPROTO_API_KEY",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
result = response.json()
print(json.dumps(result, indent=2))
const url = "https://gptproto.com/api/v3/contents/generations/tasks/{id}";
const headers = {
"Authorization: GPTPROTO_API_KEY",
"Content-Type": "application/json"
};
fetch(url, {
method: "GET",
headers: headers
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://gptproto.com/api/v3/contents/generations/tasks/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "GPTPROTO_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()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
Response
{
"id": "cgt-20251225195352-123",
"model": "doubao-seedance-1-5-pro-251215",
"status": "succeeded",
"content": {
"video_url": "https://example.com/video.mp4"
},
"usage": {
"completion_tokens": 260100,
"total_tokens": 260100
},
"seed": "16108",
"resolution": "720p",
"duration": 12,
"ratio": "16:9",
"created_at": "1766663633",
"updated_at": "1766663715",
"framespersecond": 24
}
| Status | Description |
|---|---|
queued | Queued |
running | Running |
succeeded | Succeeded |
failed | Failed |
expired | Expired |
Parameters
Core Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
model | string | ✅ Yes | - | - | The ID of the model you want to call. You need to enable model service and query the Model ID. You can also call the model through Endpoint ID to get advanced capabilities such as rate limiting, billing type (prepaid/postpaid), running status query, monitoring, and security. |
content | array | ✅ Yes | - | - | Information input to the model for video generation, supporting text and image information. |
>content.type | string | ✅ Yes | - | textimage_url | Type of input content. Use text for text input, image_url for image input (supports image URL or Base64 encoding). |
>content.text | string | ✅ Yes (if type is text) | - | - | Text content input to the model, describing the expected video to be generated. |
>content.image_url | object | ✅ Yes (if type is image_url) | - | - | Image object input to the model. |
>>content.image_url.url | string | ✅ Yes (if image_url is used) | - | - | Image information, which can be an image URL or Base64 encoded image. |
>content.role | string | ❌ No | - | first_framelast_framereference_image | Position or purpose of the image. Different roles correspond to different video generation scenarios. See Video Generation Scenarios for details. |
generate_audio | boolean | ❌ No | true | - | Whether to include synchronized sound with the video. Only supported by Seedance 1.5 pro. |
Advanced Parameters
Note: Different models may support different parameter options. For more details, please refer to the Model Field Compatibility table.
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
resolution | string | ❌ No | 720p/1080p | 480p720p1080p | Video resolution. Default values vary by model. |
ratio | string | ❌ No | 16:9/adaptive | 16:94:31:13:49:1621:9adaptive | Aspect ratio of the generated video. |
duration | integer | ❌ No | 5 | [2, 12] | Duration of the generated video in seconds. |
frames | integer | ❌ No | - | [29, 289] (25+4n) | Number of frames of the generated video. |
framespersecond | integer | ❌ No | 24 | 24 | Frame rate of the video in frames per second. |
seed | integer | ❌ No | -1 | [-1, 2^32-1] | Seed integer for controlling randomness. |
camerafixed | boolean | ❌ No | false | - | Whether to fix the camera. |
watermark | boolean | ❌ No | false | - | Whether to include watermark in the generated video. |
Video Generation Scenarios
First frame video generation, first and last frame video generation, and reference image video generation are three mutually exclusive scenarios and cannot be mixed.Note: Reference scenarios are only supported by Seedance 2.0.
{
"content": [
{
"type": "text",
"text": "Multiple shots. A detective enters a dimly lit room. He examines the clues on the table and picks up an item. The camera shifts to him deep in thought. --ratio 16:9"
}
]
}
{
"content": [
{
"type": "text",
"text": "A girl holding a fox opens her eyes and looks gently at the camera. The fox is held affectionately. The camera slowly pulls back as the girl's hair is blown by the wind. Wind sounds can be heard. --ratio adaptive --dur 5"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_foxrgirl.png"
}
}
],
}
{
"model": "doubao-seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "The girl in the picture says 'cheese' to the camera with 360-degree surrounding camera movement"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_first_frame.jpeg"
},
"role": "first_frame"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seepro_last_frame.jpeg"
},
"role": "last_frame"
}
],
"generate_audio": true
}
{
"content": [
{
"type": "text",
"text": "[Image 1] A boy wearing glasses and a blue T-shirt with [Image 2] a corgi puppy, sitting on [Image 3] a lawn, in 3D cartoon style"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_1.png"
},
"role": "reference_image"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_2.png"
},
"role": "reference_image"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/seelite_ref_3.png"
},
"role": "reference_image"
}
]
}
Aspect Ratio & Resolution
Note: 1080p is not supported in reference image scene for Seedance 1.0 lite. 1080p is not supported for Seedance 2.0 fast.
| Resolution | Aspect Ratio | Width x Height Seedance 1.0 | Width x Height Seedance 1.5 pro Seedance 2.0 & 2.0 fast |
|---|---|---|---|
| 480p | 16:9 | 864×480 | 864×496 |
| 480p | 4:3 | 736×544 | 752×560 |
| 480p | 1:1 | 640×640 | 640×640 |
| 480p | 3:4 | 544×736 | 560×752 |
| 480p | 9:16 | 480×864 | 496×864 |
| 480p | 21:9 | 960×416 | 992×432 |
| 720p | 16:9 | 1248×704 | 1280×720 |
| 720p | 4:3 | 1120×832 | 1112×834 |
| 720p | 1:1 | 960×960 | 960×960 |
| 720p | 3:4 | 832×1120 | 834×1112 |
| 720p | 9:16 | 704×1248 | 720×1280 |
| 720p | 21:9 | 1504×640 | 1470×630 |
| 1080p | 16:9 | 1920×1088 | 1920×1088 |
| 1080p | 4:3 | 1664×1248 | 1664×1248 |
| 1080p | 1:1 | 1440×1440 | 1440×1440 |
| 1080p | 3:4 | 1248×1664 | 1248×1664 |
| 1080p | 9:16 | 1088×1920 | 1088×1920 |
| 1080p | 21:9 | 2176×928 | 2176×928 |
Error Codes
Common Error Codes
| Error Code | Error Name | Description |
|---|---|---|
| 401 | Unauthorized | API key is missing or invalid |
| 403 | Forbidden | Your API key doesn’t have permission to access this resource, or insufficient balance for the requested operation |
| 429 | Too Many Requests | You’ve exceeded your rate limit |
| 500 | Internal server error | An internal server error occurred |
| 503 | Content policy violation | Content blocked due to safety concerns (actual status code is 400) |
⌘I

