Seedance 2.5 API
ReachAPI exposes ByteDance Seedance 2.5 through the public model ID seedance-2-5 and the unified asynchronous video task API.
- Create task:
POST /v1/vids/create - Query task:
GET /v1/tasks/{task_id} - Execution: asynchronous; poll the task endpoint or provide
callback_url - Model ID:
seedance-2-5
Authentication
Authorization: Bearer YOUR_REACH_API_KEY
Content-Type: application/jsonCapabilities and pricing
| Duration | Resolution | Aspect ratio | Input modes |
|---|---|---|---|
Integer from 4 to 30, or -1 for automatic selection | 480p, 720p | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16, adaptive | Text, images, videos, audio, and audio-only input |
input.content is required and must be a non-empty array. Legacy fields such as prompt, image_url, and video_urls are not converted automatically.
| Video input | Price |
|---|---|
No video_url in input.content | $10.70 / 1M output tokens |
Contains video_url in input.content | $6.40 / 1M output tokens |
Billing uses returned output token usage, not video duration. ReachAPI maps BytePlus usage.completion_tokens to usage.output_tokens and settles the successful task from that value.
Create a task
curl -X POST "https://direct.reachapi.ai/v1/vids/create" \
-H "Authorization: Bearer YOUR_R..._KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"input": {
"content": [
{
"type": "text",
"text": "A cinematic train journey through a mountain valley at sunrise"
}
],
"duration_seconds": 12,
"resolution": "720p",
"aspect_ratio": "16:9",
"watermark": false
}
}'{
"model": "seedance-2-5",
"callback_url": "https://your-domain.com/callback",
"input": {
"content": [
{
"type": "text",
"text": "A cinematic train journey through a mountain valley at sunrise"
}
],
"duration_seconds": 12,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"watermark": false
}
}Top-level parameters
| Field | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Must be seedance-2-5 |
callback_url | string | No | HTTPS URL for terminal task states; maximum 2048 characters; private-network targets are rejected |
input | object | Yes | Video generation parameters |
input parameters
| Field | Type | Required | Description |
|---|---|---|---|
content | array of object | Yes | Non-empty explicit multimodal input |
resolution | string | Yes | 480p or 720p |
duration_seconds | integer | No | Integer from 4 through 30, or -1 for automatic duration selection |
aspect_ratio | string | Conditional | One of the supported ratios; must be adaptive for first/last-frame generation |
generate_audio | boolean | No | Requests generated audio |
watermark | boolean | No | Passes the watermark preference to the model |
return_last_frame | boolean | No | Requests the final frame image from the model |
output_format | string | No | mp4 or mov |
priority | integer | No | Scheduling priority from 0 through 9 |
safety_identifier | string | No | ASCII end-user safety identifier, up to 64 characters |
Seedance 2.5 does not support seed, edit_mode, or extend_mode. Express editing and continuation with reference content plus a text prompt.
input.content
| Type | Role | Limit | Description |
|---|---|---|---|
text | None | 1 | Prompt or editing instruction |
image_url | first_frame | 1 | Starting frame; a role-less image is also treated as the first frame |
image_url | last_frame | 1 | Ending frame; requires a first frame |
image_url | reference_image | 30 total images | Subject, scene, or style reference |
video_url | reference_video | 10 | Motion, editing, or continuation reference |
audio_url | reference_audio | 10 | Audio reference; audio-only input is supported |
URLs are nested under image_url.url, video_url.url, or audio_url.url. Every client media URL must be a publicly reachable https:// URL. HTTP, Base64, data: URLs, bare Base64, and client-supplied asset:// values are rejected.
First/last-frame inputs cannot be mixed with reference_image, reference_video, or reference_audio. A last frame requires a first frame, and every first/last-frame request must explicitly set aspect_ratio to adaptive.
Request examples
Audio-only input with MOV output
{
"model": "seedance-2-5",
"input": {
"content": [
{
"type": "audio_url",
"role": "reference_audio",
"audio_url": { "url": "https://cdn.example.com/music.mp3" }
}
],
"duration_seconds": 20,
"resolution": "720p",
"aspect_ratio": "adaptive",
"generate_audio": true,
"output_format": "mov",
"priority": 5
}
}Reference-video editing or continuation
{
"model": "seedance-2-5",
"input": {
"content": [
{
"type": "text",
"text": "Continue this scene into a rainy night and preserve the camera movement"
},
{
"type": "video_url",
"role": "reference_video",
"video_url": { "url": "https://cdn.example.com/source.mp4" }
}
],
"duration_seconds": 10,
"resolution": "480p",
"aspect_ratio": "16:9"
}
}Do not add edit_mode or extend_mode; the content and prompt define the operation.
Responses, polling, and callbacks
Submission response:
{
"code": 200,
"msg": "",
"status": "queued",
"task_id": "task_xxx",
"data": []
}Poll GET /v1/tasks/task_xxx until status is success or failed.
{
"code": 200,
"msg": "",
"status": "success",
"task_id": "task_xxx",
"data": [{ "url": "https://cdn.example.com/generated/video.mov" }],
"usage": {
"input_tokens": 0,
"output_tokens": 102960,
"total_tokens": 102960
},
"cost": { "spend": 1.101672 }
}Successful video results include data[].url. When callback_url is provided, ReachAPI sends the same terminal response structure to it with POST.
Human-subject media handling
BytePlus may require human or private-portrait reference media to be stored in its Asset Library. If the first submission returns that class of error, ReachAPI uploads the original HTTPS media to the current provider's asset library, rewrites it internally, and retries once. Clients still submit the original HTTPS URLs and must not submit asset:// values.
Constraints and errors
input.contentandresolutionare required- Duration must be
4-30or-1;1080pis not supported - At most 1 text item, 30 images, 10 videos, and 10 audio files
video_urlrequiresreference_video;audio_urlrequiresreference_audio- Unknown input fields, unsupported legacy fields, and invalid media URLs return
400 401indicates an invalid API key,402insufficient credits,422a safety rejection, and429rate limiting