Seedance 2.0 Video API
Create async KIE Bytedance Seedance 2.0 video tasks through Xenodia and poll them with the normalized task API.
Use POST /v1/videos/generations for public Seedance 2.0 video generation on Xenodia.
Video generation is task-only. Submit a request, store the task ID, then poll Task Retrieval.
Endpoint
POST https://api.xenodia.xyz/v1/videos/generationsPOST /v1/video/generations is also registered as a compatibility alias. Prefer the plural /v1/videos/generations path in new integrations.
Text-to-video request
{
"model": "seedance-2-fast",
"prompt": "A cinematic beach at sunset, gentle waves, palm trees, and orange sky.",
"resolution": "720p",
"aspect_ratio": "16:9",
"duration": 5,
"generate_audio": false
}First and last frame request
{
"model": "seedance-2",
"prompt": "Animate a product reveal from the first frame into the final packaging frame.",
"first_frame_url": "https://example.com/first.png",
"last_frame_url": "https://example.com/last.png",
"resolution": "1080p",
"aspect_ratio": "16:9",
"duration": 8
}Multimodal reference request
{
"model": "seedance-2-fast",
"prompt": "Use the references to create a fast, polished launch video.",
"reference_image_urls": ["https://example.com/style.png"],
"reference_video_urls": ["https://example.com/motion.mp4"],
"reference_audio_urls": ["https://example.com/music.mp3"],
"resolution": "720p",
"aspect_ratio": "9:16",
"duration": 10,
"web_search": false,
"nsfw_checker": false
}Supported public models
| Model | Upstream model |
|---|---|
seedance-2 | bytedance/seedance-2 |
seedance-2-fast | bytedance/seedance-2-fast |
Input modes
| Mode | Fields |
|---|---|
| Text-to-video | prompt only. |
| First frame image-to-video | first_frame_url. |
| First and last frame image-to-video | first_frame_url and last_frame_url. |
| Multimodal reference-to-video | Any of reference_image_urls, reference_video_urls, or reference_audio_urls. |
first_frame_url / last_frame_url cannot be combined with the multimodal reference arrays. Use public URLs or KIE asset://... IDs for media references.
Parameters
| Field | Notes |
|---|---|
model | seedance-2 or seedance-2-fast. |
prompt | Required text prompt. Minimum 3 characters, maximum 20000 characters. |
first_frame_url | Optional first frame image URL or asset://... ID. |
last_frame_url | Optional last frame image URL or asset://... ID. Requires first_frame_url. |
reference_image_urls | Optional image URL or asset://... ID array. Maximum 9. |
reference_video_urls | Optional video URL or asset://... ID array. Maximum 3. Presence selects the with_video pricing tier. |
reference_audio_urls | Optional audio URL or asset://... ID array. Maximum 3. |
return_last_frame | Optional boolean. Deprecated upstream parameter, passed through when provided. |
generate_audio | Optional boolean. Passed through when provided. |
resolution | 480p, 720p, or 1080p. Defaults to 720p. Selects the resolution pricing tier. |
aspect_ratio | 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, or adaptive. Defaults to 16:9. |
duration | Integer seconds from 4 to 15. Defaults to 5. Multiplies the selected per-second price tier. |
web_search | Optional boolean. Passed through when provided. |
nsfw_checker | Optional boolean. Passed through when provided. |
callBackUrl | Optional upstream callback URL. Polling through Xenodia task retrieval remains supported. |
Pricing
Seedance 2.0 is not token priced. Xenodia bills by generated seconds:
actual cost = per-second tier price * duration * channel marginThe per-second tier is selected by:
| Dimension | Values |
|---|---|
resolution | 480p, 720p, 1080p |
| video input | no_video when reference_video_urls is empty; with_video when it is present |
Query /v1/models before building price-sensitive UI. The model capability payload exposes capabilities.pricing.mode = "per_second_resolution_video_input" and one tier for each resolution/input combination.
Response
The response returns a Xenodia media task envelope. Poll the task until it reaches success or fail.
{
"task_id": "task_123",
"object": "task",
"model": "seedance-2-fast",
"type": "video",
"state": "waiting",
"created_at": 1760000000,
"poll_url": "/v1/tasks/task_123",
"recommended_poll_interval_ms": 5000
}When polling succeeds, the task result contains generated video URLs:
{
"task_id": "task_123",
"state": "success",
"result": {
"created": 1760000100,
"data": [
{
"url": "https://cdn.example.com/seedance.mp4"
}
],
"resolution": "720p"
},
"progress": 100,
"poll_url": "/v1/tasks/task_123"
}Common error statuses are 400 for invalid model-specific parameter combinations, 401 for missing or invalid keys, 402 for billing boundaries, and 502 for upstream task creation failures.