Seedance 1 API

ReachAPI exposes the Seedance 1 family through the public model IDs seedance-1-0-pro and seedance-1-0-pro-fast.

This page describes how to call Seedance 1 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-1-0-pro, seedance-1-0-pro-fast
  • Execution mode: asynchronous task
  • All requests must now send explicit input.content
  • ReachAPI no longer assembles input.content from legacy convenience fields such as prompt or image_url

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

Header details:

HeaderRequiredDescription
AuthorizationYesPlatform API key in the format Bearer sk-xxxxxx
Content-TypeYesMust be application/json

3. Model Capability Summary

ModelDurationResolutionAspect ratioinput.contentNotes
seedance-1-0-pro2-12s480p, 720p, 1080p21:9, 16:9, 4:3, 1:1, 3:4, 9:16RequiredSupports text, first-frame image, last-frame image
seedance-1-0-pro-fast2-12s480p, 720p, 1080p21:9, 16:9, 4:3, 1:1, 3:4, 9:16RequiredSupports text and first-frame image only

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.

ModelToken priceNotes
seedance-1-0-pro$2.50 / 1M tokensApplies to successful video generation
seedance-1-0-pro-fast$1.00 / 1M tokensApplies to successful video generation

4. Create Task

Request body example:

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

4.1 Top-Level Parameters

FieldTypeRequiredDescription
modelstringYesMust be seedance-1-0-pro or seedance-1-0-pro-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 content input. Must be a non-empty array
duration_secondsintegerNoOutput duration. Must be between 2 and 12
resolutionstringYesOutput resolution. Supported values: 480p, 720p, 1080p
aspect_ratiostringNoOutput aspect ratio. Supported values: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16

5. input.content Structure

Supported type values:

  • text
  • image_url

Supported role values:

  • first_frame
  • last_frame

Field details:

FieldTypeRequiredDescription
content[].typestringYesMust be text or image_url
content[].textstringRequired for type = textText prompt
content[].rolestringConditionally requiredMust be first_frame or last_frame. A single first-frame image may omit role and will be treated as first_frame
content[].image_url.urlstringRequired for type = image_urlImage URL, Base64 image, or uploaded asset ID

Content constraints:

  • content must contain at least 1 item
  • Maximum 1 text
  • Maximum 2 image_url
  • Maximum 1 first_frame
  • Maximum 1 last_frame
  • last_frame requires first_frame
  • seedance-1-0-pro-fast does not support last_frame

6. Legacy Fields No Longer Supported

The following legacy fields are no longer used for automatic content assembly and now return 400:

  • input.prompt
  • input.image_url
  • input.image_urls
  • input.last_image_url
  • input.video_urls
  • input.audio_urls

The following fields are also unsupported in the current Reach Seedance gateway:

  • input.negative_prompt
  • input.parameters
  • input.instances
  • input.service_tier
  • input.execution_expires_after
  • input.safety_identifier
  • input.seed
  • 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-1-0-pro",
    "input": {
      "content": [
        {
          "type": "text",
          "text": "A paper boat floating through a neon-lit rainy street at night"
        }
      ],
      "duration_seconds": 4,
      "resolution": "720p",
      "aspect_ratio": "16:9"
    }
  }'

7.2 First-Frame Image-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-1-0-pro-fast",
    "input": {
      "content": [
        {
          "type": "text",
          "text": "A product shot transitions into a dramatic rotating hero reveal"
        },
        {
          "type": "image_url",
          "role": "first_frame",
          "image_url": {
            "url": "https://cdn.example.com/product.png"
          }
        }
      ],
      "duration_seconds": 3,
      "resolution": "720p",
      "aspect_ratio": "1:1"
    }
  }'

7.3 First-Frame and Last-Frame Guided 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-1-0-pro",
    "input": {
      "content": [
        {
          "type": "text",
          "text": "The character slowly turns toward the camera and smiles"
        },
        {
          "type": "image_url",
          "role": "first_frame",
          "image_url": {
            "url": "https://cdn.example.com/first-frame.png"
          }
        },
        {
          "type": "image_url",
          "role": "last_frame",
          "image_url": {
            "url": "https://cdn.example.com/last-frame.png"
          }
        }
      ],
      "duration_seconds": 5,
      "resolution": "1080p",
      "aspect_ratio": "9:16"
    }
  }'

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

Failed response example:

{
  "code": 400,
  "msg": "Field `input.content` is required",
  "status": "failed",
  "task_id": "task_xxx",
  "data": [],
  "error_code": "RJ_INVALID_REQUEST_BODY",
  "cost": {
    "spend": 0
  }
}

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.

Callback constraints:

  • Only https URLs are supported
  • Maximum length: 2048
  • localhost, .local, and obvious private-network targets are rejected
  • Single delivery timeout: 10s
  • Up to 2 retries after failure, for a maximum of 3 delivery attempts

11. Constraints and Notes

  • input.content is required
  • resolution is required
  • duration_seconds must be between 2 and 12
  • seedance-1-0-pro-fast does not support last_frame
  • Input asset values must be non-empty and server-accessible when URLs are used

On this page