EasyRouterEasyRouter
User GuideAPI DocsConnect Agent Tools
AI Model APIVideos

Seedance Video Generation (Dreamina)

Use EasyRouter's unified API to call Dreamina Seedance 2.0 video generation models. Supports text-to-video, image-to-video, and video input continuation.

Dreamina Seedance 2.0 is the next-generation video model family, supporting text-to-video, image-to-video, and video input continuation / editing. EasyRouter exposes it via the async task endpoint /v1/video/generations.

Seedance uses an async task-based API: submit a request, receive a task_id, poll for status, and download the video when ready.


1. Supported Models

ModelDescriptionCapabilities
dreamina-seedance-2-0Standard Seedance 2.0, quality-orientedText-to-video, image-to-video, video continuation
dreamina-seedance-2-0-fastFast variant of Seedance 2.0, lower latencyText-to-video, image-to-video, video continuation

Both models support video as input (continuation / editing) by passing a video_url in metadata.content.


2. Common Endpoints

2.1 Submit Task

POST /v1/video/generations

Request Headers

HeaderRequiredDescription
AuthorizationBearer sk-YourApiKey
Content-Typeapplication/json

Request Body Fields

FieldTypeRequiredDescription
modelstringSeedance model name (see table above)
promptstringText prompt
imagestringReference image for image-to-video (URL or base64 data URI)
imagesstring[]Multi-image references (URL or base64 data URI)
durationintDuration in seconds (typically 5 or 10, default 5)
secondsstringString form of duration (OpenAI Sora compatibility). Must be a numeric string like "5" or "10", not with units. Only used when top-level duration is 0 or not set.
metadataobjectContainer for Seedance-specific parameters (see Section 3)

Response

{
  "id": "task_xxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxx",
  "object": "video",
  "model": "dreamina-seedance-2-0",
  "status": "queued",
  "progress": 0,
  "created_at": 1730000000
}

The id / task_id is a public ID generated by EasyRouter (prefixed with task_). It is not the same as the upstream task id.

2.2 Query Task Status

GET /v1/video/generations/{task_id}

The response is wrapped in {code, message, data}. On success, code is "success" and data contains the task detail object.

Response Example (completed)

{
  "code": "success",
  "message": "",
  "data": {
    "id": 6,
    "task_id": "task_jEctEHDF1vefS2L3HND2JnzXPslnAYby",
    "platform": "45",
    "user_id": 1,
    "group": "default",
    "channel_id": 12,
    "quota": 818125,
    "action": "generate",
    "status": "SUCCESS",
    "fail_reason": "",
    "result_url": "https://ark-acg-...volces.com/xxx.mp4?X-Tos-...",
    "submit_time": 1778236598,
    "start_time": 1778236601,
    "finish_time": 1778236698,
    "created_at": 1778236598,
    "updated_at": 1778236698,
    "progress": "100%",
    "properties": {
      "input": "",
      "upstream_model_name": "dreamina-seedance-2-0-260128",
      "origin_model_name": "dreamina-seedance-2-0"
    },
    "data": {
      "id": "cgt-20260508183637-m6gj8",
      "seed": 42,
      "draft": false,
      "model": "dreamina-seedance-2-0-260128",
      "ratio": "16:9",
      "usage": {
        "total_tokens": 108900,
        "completion_tokens": 108900
      },
      "status": "succeeded",
      "content": {
        "video_url": "https://ark-acg-...volces.com/xxx.mp4?X-Tos-..."
      },
      "duration": 5,
      "resolution": "720p",
      "service_tier": "default",
      "generate_audio": true,
      "framespersecond": 24,
      "execution_expires_after": 172800,
      "created_at": 1778236598,
      "updated_at": 1778236696
    }
  }
}

data Field Reference

FieldTypeDescription
idintInternal auto-increment task ID
task_idstringEasyRouter public task ID (prefixed with task_); use this for subsequent queries
platformstringUpstream platform code
user_idintUser ID
groupstringUser group
channel_idintChannel ID that actually served the request
quotaintRaw quota charged for this task
actionstringTask action, typically generate
statusstringTask status: SUBMITTED / QUEUED / IN_PROGRESS / SUCCESS / FAILURE
fail_reasonstringFailure reason (non-empty only when status = FAILURE)
result_urlstringVideo result URL (present on success, upstream temporary link)
progressstringProgress string like "100%"
submit_time / start_time / finish_timeint64Submit / start / finish Unix timestamps (seconds)
created_at / updated_atint64Record creation / last update timestamps
properties.upstream_model_namestringModel name actually sent to the upstream provider
properties.origin_model_namestringModel name requested by the client
dataobjectRaw upstream response (includes usage, content.video_url, resolution, framespersecond, etc.)

Status Enum

StatusDescription
SUBMITTEDSubmitted
QUEUEDQueued on upstream
IN_PROGRESSGenerating
SUCCESSFinished, result_url contains the video URL
FAILUREFailed, fail_reason contains the failure reason

2.3 Download Video Content

GET /v1/videos/{task_id}/content

Returns raw video bytes (Content-Type: video/mp4). EasyRouter proxies the upstream URL.

Strongly recommended: use the /content proxy endpoint to download videos, not the raw result_url. The latter is an upstream temporary link with limited validity.


3. Seedance-Specific Parameters (metadata)

All Seedance-specific fields are passed via the metadata object and forwarded to the upstream API.

3.1 Resolution / Ratio / Duration

FieldTypeDescriptionExamples
resolutionstringResolution tier480p, 720p, 1080p
ratiostringAspect ratio16:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptive
durationintDuration in seconds. Note: the top-level duration (or seconds) takes precedence over metadata.duration.5, 10
framesintSpecify frame count (optional, mutex with duration)e.g. 121
seedintRandom seed0 ~ 2^31-1

3.2 Camera and Content Control

FieldTypeDescription
camera_fixedboolFixed camera (true = camera still)
watermarkboolAdd official watermark

3.3 Advanced Parameters

FieldTypeDescription
service_tierstringService tier affecting speed and quota (e.g., auto / default / priority)
execution_expires_afterintTask execution timeout (seconds)
generate_audioboolGenerate audio alongside video
draftboolDraft mode (faster, cheaper, slightly lower quality)
return_last_frameboolReturn the last frame as an image in the response
callback_urlstringWebhook URL for task completion notification

3.4 Multimodal Input (content array)

In addition to top-level image / images, you can pass a multimodal input array via metadata.content, which supports mixed image and video inputs:

{
  "model": "dreamina-seedance-2-0",
  "prompt": "Extend this video: make the cat walk out of frame",
  "metadata": {
    "content": [
      {
        "type": "video_url",
        "video_url": {
          "url": "https://example.com/cat.mp4"
        }
      }
    ],
    "resolution": "720p"
  }
}
typeUsage
image_url + image_url.urlImage reference (image-to-video)
video_url + video_url.urlVideo input (continuation / editing)

4. Full Examples

# Step 1: Submit the task
curl -X POST https://easyrouter.io/v1/video/generations \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0",
    "prompt": "A cat walking on the moon with a starry background",
    "duration": 5,
    "metadata": {
      "resolution": "720p",
      "ratio": "16:9",
      "seed": 42
    }
  }'

# Step 2: Poll for task status
curl https://easyrouter.io/v1/video/generations/task_abc123 \
  -H "Authorization: Bearer sk-YourApiKey"

# Step 3: Download the video
curl https://easyrouter.io/v1/videos/task_abc123/content \
  -H "Authorization: Bearer sk-YourApiKey" \
  -o cat_on_moon.mp4
curl -X POST https://easyrouter.io/v1/video/generations \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0",
    "prompt": "Make the cat jump",
    "image": "https://example.com/cat.jpg",
    "duration": 5,
    "metadata": {
      "resolution": "720p",
      "ratio": "16:9"
    }
  }'
# Video continuation / editing
curl -X POST https://easyrouter.io/v1/video/generations \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0",
    "prompt": "Extend this video: make the cat walk out of frame",
    "metadata": {
      "content": [
        {
          "type": "video_url",
          "video_url": {
            "url": "https://example.com/cat-original.mp4"
          }
        }
      ],
      "resolution": "720p",
      "duration": 5
    }
  }'
# Fast variant: speed-oriented, lower latency
curl -X POST https://easyrouter.io/v1/video/generations \
  -H "Authorization: Bearer sk-YourApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0-fast",
    "prompt": "Cyberpunk city street with neon lights on a rainy night",
    "duration": 5,
    "metadata": {
      "resolution": "720p",
      "ratio": "16:9",
      "camera_fixed": false,
      "generate_audio": true
    }
  }'

5. Error Handling

5.1 HTTP 400 Invalid Parameters

  • Model not allowed or unauthorized: model not allowed
  • Empty prompt: prompt is required
  • Invalid resolution / duration combination: returned by upstream with details

5.2 HTTP 401 / 403 Auth Errors

  • 401 Unauthorized: API Key invalid or expired
  • 403 Forbidden: API Key not authorized for this model (check token model whitelist)

5.3 HTTP 402 Insufficient Balance

Returns insufficient user quota.

5.4 Task failed Status

Common reasons:

ReasonSuggestion
Content moderation failedRevise prompt to avoid sensitive content
Image / video URL not accessibleUse publicly accessible URLs or switch to base64
Upstream timeoutRetry later, or switch to dreamina-seedance-2-0-fast

On failed status, EasyRouter automatically refunds the pre-charged amount.


6. FAQ