curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-mini",
"client_business_id": "order_20260616_001",
"prompt": "Keep the character from image 1, follow the camera motion of video 1, and match the rhythm of audio 1 for a short indoor product clip.",
"duration": 10,
"aspect_ratio": "16:9",
"image_with_roles": [
{"url": "https://example.com/ref-image-1.jpg", "role": "reference_image"}
],
"video_with_roles": [
{"url": "https://example.com/ref-video-1.mp4", "role": "reference_video"}
],
"audio_with_roles": [
{"url": "https://example.com/ref-audio-1.mp3", "role": "reference_audio"}
],
"resolution": "480p"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2",
"prompt": "Slowly push from the bouquet by the window toward the dining table, keeping a warm and soft look.",
"duration": 5,
"aspect_ratio": "16:9",
"image_with_roles": [
{"url": "https://example.com/first-frame.png", "role": "first_frame"},
{"url": "https://example.com/last-frame.png", "role": "last_frame"}
],
"resolution": "720p",
"generate_audio": false
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json",
},
json={
"model": "seedance-2-mini",
"prompt": "Keep the same character and use the reference image and video rhythm to create a short indoor ad clip",
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "720p",
"image_with_roles": [
{"url": "https://example.com/ref.png", "role": "reference_image"}
],
"video_with_roles": [
{"url": "https://example.com/ref.mp4", "role": "reference_video"}
],
},
)
print(response.json())
{
"id": "tsk_vid_xxx",
"client_business_id": "order_20260616_001",
"object": "generation.task",
"model": "seedance-2-mini",
"status": "in_progress",
"progress": 10,
"created_at": 1781577600
}
seedance-2
seedance-2 비디오 생성
Generate videos with seedance-2, seedance-2-fast, and seedance-2-mini
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": "seedance-2-mini",
"client_business_id": "order_20260616_001",
"prompt": "Keep the character from image 1, follow the camera motion of video 1, and match the rhythm of audio 1 for a short indoor product clip.",
"duration": 10,
"aspect_ratio": "16:9",
"image_with_roles": [
{"url": "https://example.com/ref-image-1.jpg", "role": "reference_image"}
],
"video_with_roles": [
{"url": "https://example.com/ref-video-1.mp4", "role": "reference_video"}
],
"audio_with_roles": [
{"url": "https://example.com/ref-audio-1.mp3", "role": "reference_audio"}
],
"resolution": "480p"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2",
"prompt": "Slowly push from the bouquet by the window toward the dining table, keeping a warm and soft look.",
"duration": 5,
"aspect_ratio": "16:9",
"image_with_roles": [
{"url": "https://example.com/first-frame.png", "role": "first_frame"},
{"url": "https://example.com/last-frame.png", "role": "last_frame"}
],
"resolution": "720p",
"generate_audio": false
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json",
},
json={
"model": "seedance-2-mini",
"prompt": "Keep the same character and use the reference image and video rhythm to create a short indoor ad clip",
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "720p",
"image_with_roles": [
{"url": "https://example.com/ref.png", "role": "reference_image"}
],
"video_with_roles": [
{"url": "https://example.com/ref.mp4", "role": "reference_video"}
],
},
)
print(response.json())
{
"id": "tsk_vid_xxx",
"client_business_id": "order_20260616_001",
"object": "generation.task",
"model": "seedance-2-mini",
"status": "in_progress",
"progress": 10,
"created_at": 1781577600
}
중국 본토 사용자 안내: 중국 본토 사용자는
https://toapis.cn 를 API 엔드포인트(Base URL)로 사용해 주세요. 본 문서의 예시에서 https://toapis.com 을 https://toapis.cn 로 바꿔 주세요.- Supports
seedance-2,seedance-2-fast, andseedance-2-mini - Supports text-to-video, first-frame / first-last-frame image-to-video, and multimodal reference-to-video;
seedance-2-minialso supports frame roles and the audio generation switch - Supports combined image, video, and audio references;
seedance-2-miniallows up to9images,3videos, and3audios - Async task workflow: the submit API returns
generation.task, and the completed result is fetched from the task status API
Authorizations
string
필수
All requests require Bearer Token authentication.Get your API Key from the API Key Management Page.
Authorization: Bearer YOUR_API_KEY
Body
string
기본값:"seedance-2"
필수
Video generation model name.Available models:
seedance-2- Standard version for higher quality output and the broader Seedance 2 workflowseedance-2-fast- Faster version for previews and lower-latency iterationseedance-2-mini- Lightweight version for lower-cost drafts and multimodal reference workflows, currently fixed to1result per request
string
Video prompt.We recommend clearly describing the scene, camera motion, subject action, style, and audio mood.
string
Your business-side ID, such as an order number or internal job ID. Once submitted, it is stored with the task and can be used later for status lookup:
GET /v1/videos/generations/{client_business_id}.metadata.client_business_id is also accepted, but the top-level field is recommended.boolean
기본값:false
선택 사항이며 기본값은
false입니다. 미디어 입력이 있는 요청에 사용합니다. true이면 기존 규칙으로 채널을 선택합니다. 소재 라이브러리를 지원하는 채널은 소재 준비와 심사를 자동 처리하고 필요한 심사가 모두 통과한 뒤 생성을 제출합니다. 다른 채널은 비공개 소재 심사를 건너뛰고 기존 미디어 처리를 유지합니다. HTTP는 먼저 동영상 작업을 반환합니다. 심사할 이미지는 URL과 Base64, 동영상과 오디오는 HTTP(S)를 지원하며 모델의 기존 형식 제한도 적용됩니다. 새 모드의 asset://는 HTTP 400을 반환합니다. 생략하거나 false로 설정하면 기존 동작을 유지합니다.예시, 입력 우선순위, 재사용 규칙은 요청 시 소재 심사를 참고하세요.integer
기본값:0
Video duration in seconds.Rules:
seedance-2:4-15seedance-2-fast:4-15seedance-2-mini:4-150: auto duration (seedance-2/seedance-2-fastonly)-1: auto duration (seedance-2/seedance-2-fastonly)
string
Video aspect ratio.Options:
21:916:94:31:13:49:16adaptive
adaptive lets the upstream choose an appropriate ratio from the input media.string[]
Compatibility image URL array.We recommend using
image_with_roles instead so you can explicitly mark first_frame, last_frame, or reference_image.- Do not use
image_urlstogether withimage_with_roles. - For new integrations, use
image_with_rolesto explicitly mark how each image should be used.
array
Image list with explicit roles.Supported patterns:
seedance-2/seedance-2-fast/seedance-2-minifirst_framefor first-frame image-to-videofirst_frame+last_framefor first-last-frame video generationreference_imagefor multimodal reference generation
표시 Field details
표시 Field details
- Maximum
1first_frame - Maximum
1last_frame - Maximum
9reference_image - Frame mode and reference mode cannot be mixed
seedance-2-minialso supportsfirst_frame,last_frame, andreference_image
array
array
Audio list with roles.Only
Limits:
reference_audio is currently supported in multimodal reference mode.표시 Field details
표시 Field details
seedance-2-mini: up to3reference audios
audio_with_roles cannot be used alone. At least one visual input is required.string
기본값:"720p"
Video resolution.Options:
seedance-2:480p,720p,1080p,4kseedance-2-fast:480p,720pseedance-2-mini:480p,720p
boolean
기본값:true
Whether to generate synced audio.
seedance-2-mini also supports this field.boolean
기본값:false
생성된 동영상의 마지막 프레임 이미지를 반환할지 여부입니다.
true로 설정하면 완료된 작업 응답의 result.data[0].last_frame_url에서 이미지 URL을 확인할 수 있습니다.array
모델이 호출할 수 있는 도구입니다. Seedance 2 시리즈는 현재 웹 검색을 지원합니다.실제 검색 횟수는
[{ "type": "web_search" }]
usage.tool_usage.web_search에 반환되며, 0은 검색을 실행하지 않았음을 의미합니다.tools는 텍스트-투-비디오 요청에서만 지원되며 이미지, 동영상 또는 오디오 입력과 함께 사용할 수 없습니다.integer
Random seed for generation control.
string
호출자 추적 필드이며 Webhook 설정과 무관합니다.
Use Uploaded Assets
If you already uploaded private assets and obtained a usableasset_id, you do not need to send the original media URL again. Use:
asset://<ASSET_ID>
- Images:
first_frame,last_frame,reference_image - Videos:
reference_video - Audios:
reference_audio
active status.
Related guides:
Input Combinations
Typical supported combinations:- Text only: text-to-video
- Text + first frame: first-frame image-to-video
- Text + first frame + last frame: first-last-frame generation
- Text + reference images: multimodal reference generation
- Text + reference video: video-reference generation
- Text + reference images + reference audio: multimodal reference generation
- Text + reference images + reference video + reference audio: multimodal reference generation
seedance-2-mini also supports first-frame and first-last-frame workflows. Use image_with_roles with explicit first_frame / last_frame roles.Capabilities
| Item | seedance-2 | seedance-2-fast | seedance-2-mini |
|---|---|---|---|
| Positioning | Higher quality and longer runs | Faster generation and lower latency | Lower-cost drafts and multimodal reference |
| Duration | 4-15 seconds, auto duration supported | 4-15 seconds, auto duration supported | 4-15 seconds |
| Resolution | 480p / 720p / 1080p / 4k | 480p / 720p | 480p / 720p |
| Image roles | first_frame / last_frame / reference_image | first_frame / last_frame / reference_image | first_frame / last_frame / reference_image |
| Video roles | reference_video | reference_video | reference_video |
| Audio roles | reference_audio | reference_audio | reference_audio |
| Frame mode | Supported | Supported | Supported |
| Reference image limit | 9 | 9 | 9 |
| Reference video limit | Depends on the routed channel | Depends on the routed channel | 3 |
| Reference audio limit | Depends on the routed channel | Depends on the routed channel | 3 |
| Synced audio field | generate_audio | generate_audio | generate_audio |
| ToAPIs callback | callback_url (trace_id 선택) | callback_url (trace_id 선택) | callback_url (trace_id 선택) |
seedance-2-mini is currently fixed to 1 output per request and does not expose count / n. Express frame control through image_with_roles using first_frame / last_frame.응답
string
Task ID for status queries.
string
Your business-side ID. Returned only when
client_business_id was provided in the request.string
Object type, always
generation.task.string
모델 name used for this request.
string
Task status:
queued, in_progress, completed, or failed.integer
Task progress percentage (
0-100).integer
Task creation timestamp.
The submit API returns the base task object. After completion, use Get Video Task 상태 to fetch
completed_at, expires_at, and result.type = "video" with result.data[].url and result.data[].format. return_last_frame을 사용하면 result.data[0].last_frame_url, web_search를 사용하면 usage.tool_usage.web_search도 반환됩니다.curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2-mini",
"client_business_id": "order_20260616_001",
"prompt": "Keep the character from image 1, follow the camera motion of video 1, and match the rhythm of audio 1 for a short indoor product clip.",
"duration": 10,
"aspect_ratio": "16:9",
"image_with_roles": [
{"url": "https://example.com/ref-image-1.jpg", "role": "reference_image"}
],
"video_with_roles": [
{"url": "https://example.com/ref-video-1.mp4", "role": "reference_video"}
],
"audio_with_roles": [
{"url": "https://example.com/ref-audio-1.mp3", "role": "reference_audio"}
],
"resolution": "480p"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2",
"prompt": "Slowly push from the bouquet by the window toward the dining table, keeping a warm and soft look.",
"duration": 5,
"aspect_ratio": "16:9",
"image_with_roles": [
{"url": "https://example.com/first-frame.png", "role": "first_frame"},
{"url": "https://example.com/last-frame.png", "role": "last_frame"}
],
"resolution": "720p",
"generate_audio": false
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json",
},
json={
"model": "seedance-2-mini",
"prompt": "Keep the same character and use the reference image and video rhythm to create a short indoor ad clip",
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "720p",
"image_with_roles": [
{"url": "https://example.com/ref.png", "role": "reference_image"}
],
"video_with_roles": [
{"url": "https://example.com/ref.mp4", "role": "reference_video"}
],
},
)
print(response.json())
{
"id": "tsk_vid_xxx",
"client_business_id": "order_20260616_001",
"object": "generation.task",
"model": "seedance-2-mini",
"status": "in_progress",
"progress": 10,
"created_at": 1781577600
}