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

Capabilities and pricing

DurationResolutionAspect ratioInput modes
Integer from 4 to 30, or -1 for automatic selection480p, 720p21:9, 16:9, 4:3, 1:1, 3:4, 9:16, adaptiveText, 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 inputPrice
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

FieldTypeRequiredDescription
modelstringYesMust be seedance-2-5
callback_urlstringNoHTTPS URL for terminal task states; maximum 2048 characters; private-network targets are rejected
inputobjectYesVideo generation parameters

input parameters

FieldTypeRequiredDescription
contentarray of objectYesNon-empty explicit multimodal input
resolutionstringYes480p or 720p
duration_secondsintegerNoInteger from 4 through 30, or -1 for automatic duration selection
aspect_ratiostringConditionalOne of the supported ratios; must be adaptive for first/last-frame generation
generate_audiobooleanNoRequests generated audio
watermarkbooleanNoPasses the watermark preference to the model
return_last_framebooleanNoRequests the final frame image from the model
output_formatstringNomp4 or mov
priorityintegerNoScheduling priority from 0 through 9
safety_identifierstringNoASCII 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

TypeRoleLimitDescription
textNone1Prompt or editing instruction
image_urlfirst_frame1Starting frame; a role-less image is also treated as the first frame
image_urllast_frame1Ending frame; requires a first frame
image_urlreference_image30 total imagesSubject, scene, or style reference
video_urlreference_video10Motion, editing, or continuation reference
audio_urlreference_audio10Audio 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.content and resolution are required
  • Duration must be 4-30 or -1; 1080p is not supported
  • At most 1 text item, 30 images, 10 videos, and 10 audio files
  • video_url requires reference_video; audio_url requires reference_audio
  • Unknown input fields, unsupported legacy fields, and invalid media URLs return 400
  • 401 indicates an invalid API key, 402 insufficient credits, 422 a safety rejection, and 429 rate limiting

On this page