curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand",
"duration": 5,
"aspect_ratio": "16:9",
"metadata": {
"resolution": "720p",
"audio": true
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "A cat chasing a snake through the grass while the camera tracks the motion",
"image_with_roles": [
{"url": "https://example.com/first.png", "role": "first_frame"}
],
"metadata": {
"resolution": "720p",
"audio": true
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "A girl spins beneath cherry blossoms and slowly comes to a stop at the end",
"image_with_roles": [
{"url": "https://example.com/first.png", "role": "first_frame"},
{"url": "https://example.com/last.png", "role": "last_frame"}
],
"duration": 5,
"aspect_ratio": "9:16",
"metadata": {
"resolution": "720p",
"audio": true
}
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "doubao-seedance-1-5-pro",
"prompt": "Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand",
"duration": 5,
"aspect_ratio": "16:9",
"metadata": {
"resolution": "720p",
"audio": True
}
}
)
task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")
const response = await fetch('https://toapis.com/v1/videos/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'doubao-seedance-1-5-pro',
prompt: 'Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand',
duration: 5,
aspect_ratio: '16:9',
metadata: {
resolution: '720p',
audio: true
}
})
});
const task = await response.json();
console.log(`Task ID: ${task.id}`);
console.log(`Status: ${task.status}`);
{
"id": "task_vid_xyz789ghi012",
"object": "generation.task",
"model": "doubao-seedance-1-5-pro",
"status": "queued",
"progress": 0,
"created_at": 1703884800,
"metadata": {}
}
doubao-seedance-1-5-pro
Doubao SeeDance 1.5 Pro 비디오 생성
Generate videos using ByteDance Doubao SeeDance 1.5 Pro model
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand",
"duration": 5,
"aspect_ratio": "16:9",
"metadata": {
"resolution": "720p",
"audio": true
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "A cat chasing a snake through the grass while the camera tracks the motion",
"image_with_roles": [
{"url": "https://example.com/first.png", "role": "first_frame"}
],
"metadata": {
"resolution": "720p",
"audio": true
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "A girl spins beneath cherry blossoms and slowly comes to a stop at the end",
"image_with_roles": [
{"url": "https://example.com/first.png", "role": "first_frame"},
{"url": "https://example.com/last.png", "role": "last_frame"}
],
"duration": 5,
"aspect_ratio": "9:16",
"metadata": {
"resolution": "720p",
"audio": true
}
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "doubao-seedance-1-5-pro",
"prompt": "Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand",
"duration": 5,
"aspect_ratio": "16:9",
"metadata": {
"resolution": "720p",
"audio": True
}
}
)
task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")
const response = await fetch('https://toapis.com/v1/videos/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'doubao-seedance-1-5-pro',
prompt: 'Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand',
duration: 5,
aspect_ratio: '16:9',
metadata: {
resolution: '720p',
audio: true
}
})
});
const task = await response.json();
console.log(`Task ID: ${task.id}`);
console.log(`Status: ${task.status}`);
{
"id": "task_vid_xyz789ghi012",
"object": "generation.task",
"model": "doubao-seedance-1-5-pro",
"status": "queued",
"progress": 0,
"created_at": 1703884800,
"metadata": {}
}
중국 본토 사용자 안내: 중국 본토 사용자는
https://toapis.cn 를 API 엔드포인트(Base URL)로 사용해 주세요. 본 문서의 예시에서 https://toapis.com 을 https://toapis.cn 로 바꿔 주세요.- ByteDance Doubao video generation model 1.5 Pro version
- Supports text-to-video generation
- Supports first frame / last frame control
- Does not support reference image mode
- Supports audio generation (1.5 Pro exclusive feature)
- Async task management, query results by task ID
Authorizations
string
필수
All endpoints require Bearer Token authenticationGet your API Key from the API Key Management PageAdd to request header:
Authorization: Bearer YOUR_API_KEY
Body
string
기본값:"doubao-seedance-1-5-pro"
필수
Video generation model nameAvailable models:
doubao-seedance-1-5-pro- 1.5 Pro version, supports audio generation and first/last frame control
string
필수
Video content descriptionDescribe scenes, actions, and style in detail for better generation resultsExample:
"Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand"integer
기본값:5
Video duration (seconds)Supported range:
4 ~ 12 secondsDefault: 5string
기본값:"16:9"
Video aspect ratioOptions:
16:9- Landscape9:16- Portrait1:1- Square4:3- Traditional ratio3:4- Vertical traditional ratio21:9- Ultra-wide
16:9Resolution and Aspect Ratio Combinations
| Resolution | Supported Aspect Ratios | Notes |
|---|---|---|
| 480p | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 | All supported |
| 720p | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 | All supported (default) |
| 1080p | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 | All supported |
string[]
Compatibility image URL array for first/last-frame image-to-video generationCompatibility rules:
- 1 image: treated as
first_frame - 2 images: treated as
first_frameandlast_frame - More than 2 images: only the first two are used
image_with_roles to explicitly specify first and last framesExample: ["https://example.com/first.png", "https://example.com/last.png"]image_urls and image_with_roles cannot be used togetherarray
Image array with roles for explicit first/last-frame control
Example:
표시 Field 설명
표시 Field 설명
[
{"url": "https://example.com/first.png", "role": "first_frame"},
{"url": "https://example.com/last.png", "role": "last_frame"}
]
image_urlsandimage_with_rolescannot be used together- Only one first frame and one last frame are supported
- 1.5 Pro does not support the
reference_imagerole. Use Seedance 2.0 if you need reference image control
object
Extended parameters
표시 Field 설명
표시 Field 설명
string
기본값:"720p"
Video resolutionOptions:
480p- Standard definition720p- High definition (default)1080p- Full HD
integer
Seed integer for controlling generation randomnessRange:
-1 ~ 2^32-1The same seed can produce similar results, but exact output is not guaranteedboolean
기본값:false
Whether to generate audioWhen set to
true, the video will include AI-generated accompanying audio1.5 Pro exclusive featureboolean
기본값:false
Whether to keep the camera fixedWhen set to
true, the camera position remains fixed throughout the videoDifferences from 1.0
| Feature | 1.0 fast/quality | 1.5 Pro |
|---|---|---|
| Default resolution | 1080p | 720p |
| Supported resolutions | 480p/720p/1080p | 480p/720p/1080p |
| Duration range | 2-12s | 4-12s |
| Audio generation | Not supported | Supported |
| Image control mode | reference single reference image | first_frame / last_frame frame mode |
소재 심사
요청에 이미지가 있으면 일부 채널은 생성 제출 전에 이미지를 자동으로 심사합니다. 추가 파라미터는 필요 없으며 기존 이미지 필드에 이미지 URL을 전달하면 됩니다.- 요청이 접수되면 즉시 동영상 작업을 반환합니다. 심사가 필요하면 작업은
queued상태를 유지하며, 요청의 모든 소재가 통과한 뒤에 생성을 제출합니다. 최초 심사에는 몇 분이 걸릴 수 있으며, 같은 사용자가 같은 채널에서 같은 URL을 다시 사용하면 심사 결과를 재사용합니다. - 소재 준비는 라운드당 기본 최대 20분입니다. 심사 거부 또는 준비 시간 초과 시 작업은
failed로 종료되며 사유는error.message에서 확인할 수 있습니다. 심사를 통과하지 못하면 동영상 생성 요금은 청구되지 않습니다. - 이미지는 공개 HTTP(S) URL이어야 하며 Base64와 로컬 경로는 지원하지 않습니다. 이미지는 20 MB 이하(일부 채널은 최대 30 MB)로 준비하세요. 모델의 기존 형식 제한은 그대로 적용됩니다.
- 심사를 진행하는 채널은 접수 시 이미지 URL을 검증합니다. URL에 인증 정보가 있거나 2048바이트를 넘으면 HTTP 400을 반환하며
error.code는invalid_private_assets입니다. - 소재는 URL로 식별합니다. 파일 내용이 바뀌면 새 URL을 사용하세요.
- 기존
asset://참조는 폐지되었으며 HTTP 400을 반환합니다.
응답
string
Unique task identifier for status queries
string
Object type, always
generation.taskstring
모델 name used
string
Task status
queued- Queued for processingin_progress- Processingcompleted- Successfully completedfailed- Failed
integer
Task progress percentage (0-100)
integer
Task creation timestamp (Unix timestamp)
object
Task metadata
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand",
"duration": 5,
"aspect_ratio": "16:9",
"metadata": {
"resolution": "720p",
"audio": true
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "A cat chasing a snake through the grass while the camera tracks the motion",
"image_with_roles": [
{"url": "https://example.com/first.png", "role": "first_frame"}
],
"metadata": {
"resolution": "720p",
"audio": true
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "doubao-seedance-1-5-pro",
"prompt": "A girl spins beneath cherry blossoms and slowly comes to a stop at the end",
"image_with_roles": [
{"url": "https://example.com/first.png", "role": "first_frame"},
{"url": "https://example.com/last.png", "role": "last_frame"}
],
"duration": 5,
"aspect_ratio": "9:16",
"metadata": {
"resolution": "720p",
"audio": true
}
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "doubao-seedance-1-5-pro",
"prompt": "Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand",
"duration": 5,
"aspect_ratio": "16:9",
"metadata": {
"resolution": "720p",
"audio": True
}
}
)
task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")
const response = await fetch('https://toapis.com/v1/videos/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'doubao-seedance-1-5-pro',
prompt: 'Sunset at the beach, golden sunlight on the sea, waves gently hitting the sand',
duration: 5,
aspect_ratio: '16:9',
metadata: {
resolution: '720p',
audio: true
}
})
});
const task = await response.json();
console.log(`Task ID: ${task.id}`);
console.log(`Status: ${task.status}`);
{
"id": "task_vid_xyz789ghi012",
"object": "generation.task",
"model": "doubao-seedance-1-5-pro",
"status": "queued",
"progress": 0,
"created_at": 1703884800,
"metadata": {}
}