Seedance 2 API

ReachAPI exposes the Seedance 2 family through the public model IDs seedance-2 and seedance-2-fast.

This page describes how to call Seedance 2 models on ReachAPI, including request fields, constraints, and examples.

Important:

  • Create task: POST /v1/vids/create
  • Query task: GET /v1/tasks/{task_id}
  • Model IDs: seedance-2, seedance-2-fast
  • Execution mode: asynchronous task
  • All requests must now send explicit input.content

1. API Overview

  • HTTP method: POST
  • Request path: /v1/vids/create
  • Content-Type: application/json
  • Result delivery:
    • The submission response returns task acceptance information
    • The final result is obtained by polling /v1/tasks/{task_id} or by callback_url

2. Authentication and Headers

Example headers:

Authorization: Bearer YOUR_REACH_API_KEY
Content-Type: application/json

3. Model Capability Summary

ModelDurationResolutionAspect ratioinput.contentNotes
seedance-24-15s480p, 720p, 1080p21:9, 16:9, 4:3, 1:1, 3:4, 9:16, adaptiveRequiredSupports text, image, video, audio reference, editing, and extension
seedance-2-fast4-15s480p, 720p21:9, 16:9, 4:3, 1:1, 3:4, 9:16, adaptiveRequiredSame fields as seedance-2, but 1080p is not currently supported

Notes:

  • duration_seconds = -1 is supported and allows the model to choose the duration automatically

Billing and Usage

Seedance video tasks are billed by returned token usage, not by video seconds. Estimated price = token unit price × token consumption. The final bill uses usage.output_tokens in the ReachAPI task response, mapped from BytePlus usage.completion_tokens.

ModelVideo inputResolutionToken price
seedance-2No480p / 720p$7.00 / 1M tokens
seedance-2No1080p$7.70 / 1M tokens
seedance-2Yes480p / 720p$4.30 / 1M tokens
seedance-2Yes1080p$4.70 / 1M tokens
seedance-2-fastNo480p / 720p$5.60 / 1M tokens
seedance-2-fastYes480p / 720p$3.30 / 1M tokens
seedance-2-fastAny1080pNot supported

4. Create Task

Request body example:

{
  "model": "seedance-2",
  "callback_url": "https://your-domain.com/callback",
  "input": {
    "content": [
      {
        "type": "text",
        "text": "A cinematic drone shot passing over a coastline at sunrise"
      }
    ],
    "duration_seconds": 6,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }
}

4.1 Top-Level Parameters

FieldTypeRequiredDescription
modelstringYesMust be seedance-2 or seedance-2-fast
callback_urlstringNoHTTPS callback URL for terminal task states. Maximum length 2048. Localhost, local network, and private network targets are rejected
inputobjectYesVideo generation parameters

4.2 input Parameters

FieldTypeRequiredDescription
contentarray<object>YesExplicit multimodal input. Must be a non-empty array
duration_secondsintegerNoOutput duration. Use 4-15 or -1 for automatic duration selection
resolutionstringYesOutput resolution. seedance-2: 480p, 720p, 1080p; seedance-2-fast: 480p, 720p
aspect_ratiostringNoOutput aspect ratio. Supported values: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16, adaptive
generate_audiobooleanNoRequests generated audio
seedintegerNoRandom seed. Supported range: -1 to 4294967295. Use -1 for a random result
safety_identifierstringNoEnd-user safety identifier. Must be an ASCII string up to 64 characters
watermarkbooleanNoPasses watermark preference to the underlying model
return_last_framebooleanNoRequests the last frame image
edit_modestringNoControls edit behavior in supported scenarios
extend_modestringNoControls extension behavior in supported scenarios

5. input.content Structure

Supported type values:

  • text
  • image_url
  • video_url
  • audio_url

Supported role values:

  • first_frame
  • last_frame
  • reference_image
  • reference_video
  • reference_audio

Field details:

FieldTypeRequiredDescription
content[].typestringYesMust be text, image_url, video_url, or audio_url
content[].rolestringNoIf provided, it must be one of the supported roles above. Non-text items should usually provide a role explicitly
content[].textstringRequired for type = textText prompt
content[].image_url.urlstringRequired for type = image_urlImage URL or uploaded asset ID
content[].video_url.urlstringRequired for type = video_urlVideo URL or uploaded asset ID. Video Base64 is not currently supported
content[].audio_url.urlstringRequired for type = audio_urlAudio URL or uploaded asset ID

Content constraints:

  • content must contain at least 1 item
  • Maximum 9 images
  • Maximum 3 videos
  • Maximum 3 audio files
  • text and audio can appear together only when at least one reference_image or reference_video is also present
  • Audio-only input is not supported
  • text + audio by itself is not supported
  • first_frame / last_frame cannot be mixed with reference_image / reference_video / reference_audio in the same request

Supported Seedance 2 input combinations:

  • text
  • optional text + image_url
  • optional text + video_url
  • optional text + image_url + audio_url
  • optional text + image_url + video_url
  • optional text + video_url + audio_url
  • optional text + image_url + video_url + audio_url

6. Legacy Fields No Longer Supported

The following fields now return 400:

  • input.prompt
  • input.image_url
  • input.image_urls
  • input.last_image_url
  • input.video_urls
  • input.audio_urls
  • input.negative_prompt
  • input.parameters
  • input.instances
  • input.service_tier
  • input.execution_expires_after
  • input.frames
  • input.camera_fixed
  • input.draft
  • input.content[].draft_task
  • Any undocumented custom fields

7. Request Examples

7.1 Text-to-Video

curl -X POST "https://direct.reachapi.ai/v1/vids/create" \
  -H "Authorization: Bearer YOUR_REACH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "input": {
      "content": [
        {
          "type": "text",
          "text": "A stylized travel film scene with dynamic camera movement"
        }
      ],
      "duration_seconds": 8,
      "resolution": "1080p",
      "aspect_ratio": "adaptive",
      "watermark": false
    }
  }'

7.2 Explicit Multimodal Reference Input

curl -X POST "https://direct.reachapi.ai/v1/vids/create" \
  -H "Authorization: Bearer YOUR_REACH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "input": {
      "content": [
        {
          "type": "text",
          "text": "A stylized travel film scene with dynamic camera movement"
        },
        {
          "type": "image_url",
          "role": "reference_image",
          "image_url": {
            "url": "https://cdn.example.com/scene-start.png"
          }
        },
        {
          "type": "video_url",
          "role": "reference_video",
          "video_url": {
            "url": "https://cdn.example.com/reference-motion.mp4"
          }
        }
      ],
      "duration_seconds": 8,
      "resolution": "1080p",
      "aspect_ratio": "adaptive",
      "watermark": false
    }
  }'

7.3 Reference Video Extension

curl -X POST "https://direct.reachapi.ai/v1/vids/create" \
  -H "Authorization: Bearer YOUR_REACH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-fast",
    "input": {
      "content": [
        {
          "type": "text",
          "text": "Extend this clip into a faster action sequence"
        },
        {
          "type": "video_url",
          "role": "reference_video",
          "video_url": {
            "url": "https://cdn.example.com/reference-1.mp4"
          }
        }
      ],
      "duration_seconds": 6,
      "resolution": "480p",
      "aspect_ratio": "16:9",
      "extend_mode": "continue"
    }
  }'

8. Create Task Response

Example response:

{
  "code": 200,
  "msg": "",
  "status": "queued",
  "task_id": "task_xxx",
  "data": []
}

9. Query Task Status

Request example:

curl -X GET "https://direct.reachapi.ai/v1/tasks/task_xxx" \
  -H "Authorization: Bearer YOUR_REACH_API_KEY"

Successful response example:

{
  "code": 200,
  "msg": "",
  "status": "success",
  "task_id": "task_xxx",
  "data": [
    {
      "url": "https://cdn.example.com/generated/video-1.mp4"
    }
  ],
  "usage": {
    "input_tokens": 0,
    "output_tokens": 102960,
    "total_tokens": 102960
  },
  "cost": {
    "spend": 0.12
  }
}

Notes:

  • data contains video result items
  • ReachAPI guarantees data[].url for successful video outputs

10. Callback Delivery

If callback_url is provided when the task is created, the gateway sends a POST request to that URL when the task reaches a terminal state. The callback body uses the same JSON structure as the task query response.

11. Constraints and Notes

  • input.content is required
  • resolution is required
  • duration_seconds must be -1 or within 4-15
  • seedance-2-fast does not currently support 1080p
  • aspect_ratio supports adaptive
  • Input asset values must be non-empty and server-accessible when URLs are used

On this page