Xenodia Docs
API Reference

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/generations

POST /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

ModelUpstream model
seedance-2bytedance/seedance-2
seedance-2-fastbytedance/seedance-2-fast

Input modes

ModeFields
Text-to-videoprompt only.
First frame image-to-videofirst_frame_url.
First and last frame image-to-videofirst_frame_url and last_frame_url.
Multimodal reference-to-videoAny 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

FieldNotes
modelseedance-2 or seedance-2-fast.
promptRequired text prompt. Minimum 3 characters, maximum 20000 characters.
first_frame_urlOptional first frame image URL or asset://... ID.
last_frame_urlOptional last frame image URL or asset://... ID. Requires first_frame_url.
reference_image_urlsOptional image URL or asset://... ID array. Maximum 9.
reference_video_urlsOptional video URL or asset://... ID array. Maximum 3. Presence selects the with_video pricing tier.
reference_audio_urlsOptional audio URL or asset://... ID array. Maximum 3.
return_last_frameOptional boolean. Deprecated upstream parameter, passed through when provided.
generate_audioOptional boolean. Passed through when provided.
resolution480p, 720p, or 1080p. Defaults to 720p. Selects the resolution pricing tier.
aspect_ratio1:1, 4:3, 3:4, 16:9, 9:16, 21:9, or adaptive. Defaults to 16:9.
durationInteger seconds from 4 to 15. Defaults to 5. Multiplies the selected per-second price tier.
web_searchOptional boolean. Passed through when provided.
nsfw_checkerOptional boolean. Passed through when provided.
callBackUrlOptional 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 margin

The per-second tier is selected by:

DimensionValues
resolution480p, 720p, 1080p
video inputno_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.

On this page