Seedance family
ByteDance’s video generation models, four in total, called through the OfoxAI video endpoint POST /v1/videos. Tasks run asynchronously: creating a task returns a task ID, which you then use to query the result.
Choosing a model
All four support text-to-video, image-to-video, and video reference, and can generate a synchronized audio track (generate_audio defaults to true). adaptive keeps the input image’s aspect ratio.
bytedance/seedance-2.530 s, 21:9bytedance/seedance-2.04Kbytedance/seedance-2.0-fast480p, 720pbytedance/seedance-2.0-mini480p, 720pThe table above matches the video_attributes returned by the Models API; if model capabilities change, the API response takes precedence. Billing is per second, and the actual charge is usage.video_cost in the task result. For prices, see the model page .
Pass resolution and duration explicitly. If omitted, 2.0 defaults to 1080p; cost is calculated by resolution tier and is higher than at 720p.
Examples
The examples below show only the request that creates the task. For the full flow of querying status and downloading the result after creation, see Video API · Quickstart.
Text to video
Send only prompt.
curl -X POST https://api.ofox.ai/v1/videos \
-H "Authorization: Bearer $OFOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-2.0-mini",
"prompt": "A fox running through the snow, the camera following it",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}'frame_imagesandinput_referencescannot be sent together; sending both returns400 references_conflict.- Images can be public URLs or strings starting with
data:image/...;base64,. - Pass
"generate_audio": falsewhen you do not need an audio track. - For the full field structure, see Create video task.
Real-person reference images
real_person: true at the top level of the request.ByteDance’s official Seedance API does not allow direct upload of reference images or videos containing real human faces. The official BytePlus Seedance 2.0 documentation requires authorized real-person portrait assets, and the Volcano Engine Ark real-person portrait library guide lists steps such as sending an invitation, identity verification and authorization, uploading assets, and receiving authorization to obtain an asset ID.
{
"model": "bytedance/seedance-2.0",
"prompt": "The person in the frame walks through a cinematic night market",
"duration": 5,
"resolution": "720p",
"real_person": true,
"input_references": [
{ "type": "image_url", "image_url": { "url": "https://example.com/person.jpg" } }
]
}- OfoxAI applies privacy preprocessing to reference images before submission. This can reduce false rejections by upstream anti-deepfake review, but cannot guarantee upstream acceptance; tasks rejected upstream are not charged.
real_personis a processing instruction, not proof of authorization. Only submit images you are legally entitled and authorized to use.- For how to adjust images that are still rejected and for preprocessing error codes, see Real-person reference images.
Pin a provider
To pin a provider, add this at the top level of the request:
"provider": { "type": "byteplus" }To generate not-for-all-audiences content, you must explicitly specify byteplus. Otherwise the request may be routed to volcengine and rejected by content moderation. Once a provider is specified, the request will not switch automatically if that provider is unavailable.
An invalid provider.type value returns 400 invalid_provider_type; a specified provider that does not serve the model returns 400 provider_type_unavailable. For general details, see Video provider routing.
Common errors
If a task is created successfully but fails during generation, the query result is status: "failed", with the reason in the error field; a timeout corresponds to error.code: "expired". For the full list of error codes, see Video API error codes.
Official docs
- BytePlus Seedance 2.0 video generation API
- Volcano Engine Ark documentation center
- OfoxAI · Create video task
FAQ
How do I make a first/last-frame video with Seedance?
Pass two images in frame_images, one with frame_type first_frame and one with last_frame. Sending only last_frame returns 400 last_frame requires a first_frame. frame_images cannot be sent together with input_references.
Does Seedance 2.0 support 4K?
Only bytedance/seedance-2.0 supports 4k. 2.5 goes up to 1080p, and Fast and Mini up to 720p. An unsupported resolution returns 400, and the error message lists the allowed values.
What is the maximum length Seedance can generate?
Seedance 2.5 generates 4 to 30 seconds per task; 2.0, 2.0 Fast, and 2.0 Mini generate 4 to 15 seconds. Values outside the range return 400 duration out of range.
Does Seedance support 21:9?
Only Seedance 2.5 supports 21:9. The 2.0 series supports only 16:9, 9:16, 1:1, and adaptive.
What should I do if a Seedance reference image with a real person returns an error?
Calling the official API directly requires identity verification in the asset library first. Through OfoxAI, add real_person: true at the top level of the request and pass the image directly; OfoxAI applies privacy preprocessing first. If the upstream still rejects it, you are not charged; adjust the image following the advice on the real-person reference images page and retry.
How many reference images can Seedance take at once?
input_references accepts up to 9 images, 3 audio clips (each no longer than 15 seconds), and 1 video. Exceeding this returns 400 too_many_references.
How long is the Seedance video URL valid after generation?
Prefer mirror_urls. If only unsigned_urls is returned, it is a temporary upstream address that may expire after 24 hours, so download and save it promptly.