byteplus/seedance-1-0-lite-i2v-250428 with the Comfy Router API. BytePlus provides the model; Router gives it the shared authentication and request route below.
Quick start
Create a key at platform.comfy.org/profile/api-keys and export it asCOMFY_API_KEY. The Python and TypeScript snippets use the Comfy SDKs (pip install comfy-sdk, npm install @comfyorg/sdk); the cURL snippet is the same call over raw HTTP.
Model ID: byteplus/seedance-1-0-lite-i2v-250428
Endpoint: POST https://api.comfy.org/v2/models/byteplus/seedance-1-0-lite-i2v-250428
Schema
Input
Router has not published an authored input schema for this model yet:
GET /v2/models/byteplus/seedance-1-0-lite-i2v-250428/openapi.json returns an open object with x-comfy-input-schema-authored: false. Router forwards the body to BytePlus unchanged, so BytePlus’s own API reference is authoritative for the request fields, and nothing is validated server side.Output
object
The output after the video generation task is completed, which contains the download URL of the output video and, when BytePlus returns one, the download URL of its last frame. Both
video_url and last_frame_url are RE-HOSTED onto Comfy storage; every other field here is BytePlus’s own. Nullable - BytePlus clears the URLs 24 hours after the task, and a succeeded document polled after that can carry content absent or null.string
Download URL for the last frame of the generated video, returned when the request set
return_last_frame. Do not infer the image format from this URL: BytePlus documents the last frame as PNG on the request side, Router re-hosts whatever bytes it is served and types them from the upstream Content-Type or a content sniff, and image/jpeg is only the last-resort fallback when both fail. Router re-hosts the last frame onto Comfy storage and rewrites this field, so it is normally a Comfy-signed URL valid for up to 24 hours - signed for 24 hours when minted and replayed from a 23-hour memo, so a later poll can hand back one with as little as an hour left. When the re-host could not be performed the field keeps BytePlus’s own URL instead, which BytePlus clears 24 hours after the task. Either way the link expires, so download the frame rather than storing the URL.string
Container format of the generated video (mp4 or mov), when BytePlus nests it inside
content. Seedance models more commonly return it as a TOP-LEVEL sibling of content - see the top-level output_format field - and Router reads whichever of the two is present.string
Download URL for the output video. Router re-hosts the video onto Comfy storage and rewrites this field, so it is normally a Comfy-signed URL valid for up to 24 hours - signed for 24 hours when minted and replayed from a 23-hour memo, so a later poll can hand back one with as little as an hour left. When the re-host could not be performed the field keeps BytePlus’s own URL instead, which BytePlus clears 24 hours after the task and caps at 100 downloads on some models. Either way the link expires, so download the video rather than storing the URL.
integer
The time when the task was created. The value is a UNIX timestamp in seconds.
number
The duration of the generated video in seconds. Declared as a number rather than an integer because BytePlus is not consistent about it - video tasks have been observed returning whole seconds and sibling BytePlus surfaces report fractional durations - so a client must not assume an integral value. BytePlus’s own field, returned on succeeded video tasks and forwarded unchanged.
object
The error information. If the task succeeds, null is returned. If the task fails, the error information is returned.
string
The error code
string
The error message
string
The ID of the video generation task
string
The name and version of the model used by the task
string
Container format of the generated video (mp4 or mov), returned at the TOP LEVEL as a sibling of
content - this is where the Seedance video task query returns it. BytePlus’s own field, forwarded unchanged.string
The resolution of the generated video, for example
1080p. BytePlus’s own field, returned on succeeded video tasks and forwarded unchanged.integer
The generation seed actually used for the task. BytePlus’s own field, returned on succeeded video tasks and forwarded unchanged.Format:
int64string
The state of the taskPossible values:
queued, running, cancelled, succeeded, failed, expiredinteger
The time when the task was last updated. The value is a UNIX timestamp in seconds.
object
The token usage for the request
integer
The number of tokens generated by the model
integer
For the video generation model, the number of input tokens is not calculated and defaults to 0. Therefore, total_tokens = completion_tokens.
Examples
Output
Before you ship
Save oneIdempotency-Key for each call and reuse it for retries. Router can hold the connection for up to 10 minutes. The SDKs handle authentication; raw HTTP clients send the headers themselves.
Use X-Comfy-Error-Type to classify a failure. A 422 means Router rejected the input before calling the provider. Download generated assets promptly because result URLs can expire.
Headers
Authentication, idempotency, request IDs, error buckets, retry pacing, spend limits.
Using the Router API
Find models, inspect schemas, and retry safely.
Limitations
What Router does not do today, and what to use instead.