Skip to main content
POST
/
seedance
/
api
/
v3
/
contents
/
generations
/
tasks
Create a Seedance 2.0 video generation task
curl --request POST \
  --url https://api.apiyi.com/seedance/api/v3/contents/generations/tasks \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "model": "doubao-seedance-2-0-fast-260128",
  "content": [
    {
      "type": "text",
      "text": "Drone shot flying over an autumn valley, golden forests and a winding river, cinematic"
    }
  ]
}
'
{
  "id": "cgt-20260606160057-6bbjd"
}
Use the Playground on the right: set Authorization to Bearer sk-your-api-key (the Token must have the SeeDance2 group enabled), fill in model / content, and send. A successful submission returns a task id; polling and download flows are covered in the code samples below.
About the Playground “no response received” error: this is an async task endpoint, and clicking Send in the browser may show that message — the browser’s cross-origin safety check blocked the response, but the task was actually submitted successfully (verify via the query endpoint below or the console logs). The Playground can also only create a task; it cannot poll or download the video. To run the full create → poll → download flow, copy and run the code samples below (cURL / Python / Node.js).
This is the task-creation endpoint for Seedance 2.0. Text-to-video, first/first+last frame, and multi-modal reference all share it — the content array selects the mode. For model selection, pricing, the resolution/pixel table, and FAQ, see the Seedance 2.0 Overview.
  • The path prefix is /seedance/api/v3do not drop the /api segment, and do not use /v1/videos
  • The Token must have the SeeDance2 group enabled, otherwise you get “no available channel for this model”
  • generate_audio defaults to true (output has sound) — pass false explicitly for silent video
  • Python requests needs the "Accept-Encoding": "identity" header, or it raises a gzip decoding error
  • The success status is succeeded (not completed); the video URL lives at content.video_url and expires in 24 hours

Code Examples

curl -X POST "https://api.apiyi.com/seedance/api/v3/contents/generations/tasks" \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-0-fast-260128",
    "content": [
      {"type": "text", "text": "Drone shot flying over an autumn valley, golden forests and a winding river, cinematic"}
    ],
    "resolution": "720p",
    "ratio": "16:9",
    "duration": 5,
    "generate_audio": false
  }'
# Returns {"id":"cgt-2026xxxx-xxxxx"} — poll the query endpoint with this id

Parameter Reference

ParameterTypeRequiredDefaultNotes
modelstringdoubao-seedance-2-0-260128 (standard, 1080p) / doubao-seedance-2-0-fast-260128 (fast, up to 720p). Plain ID, no ep- prefix
contentarrayInput array — see “Generation modes” below
resolutionstring720p480p / 720p / 1080p (no 1080p on fast)
ratiostringadaptive16:9 / 4:3 / 1:1 / 3:4 / 9:16 / 21:9 / adaptive; every ratio in a tier costs the same
durationint5Whole seconds 4-15; -1 lets the model choose (billed by actual output)
generate_audiobooltrueSynchronized audio (voice/SFX/music, mono)
watermarkboolfalseAdds an AI-generated watermark
seedint-1[-1, 2^32-1]; same seed gives similar (not identical) results
return_last_frameboolfalseReturns a watermark-free last-frame png for clip chaining
execution_expires_afterint172800Task expiry threshold in seconds, range [3600, 259200]
Seedance 2.0 does not support frames, camera_fixed, or service_tier (online inference only) — those are Seedance 1.x parameters and will be ignored or rejected.

Generation modes (content combinations)

Modecontent itemsrole values
Text-to-video1 text
First frameoptional text + 1 image_urlfirst_frame or omitted
First + last frameoptional text + 2 image_urlrequired: first_frame / last_frame
Multi-modal referencetext + 1-9 image_url (+ optional video_url / audio_url)reference_image / reference_video / reference_audio
The three image modes are mutually exclusive. Images accept public URLs, Base64 (data:image/png;base64,...), and asset IDs (asset://...). Inputs containing real human faces are rejected. Audio must be sent together with at least one image or video.

Response Format

Creation returns only the task ID (not the video):
{ "id": "cgt-20260606160057-6bbjd" }
Poll GET /seedance/api/v3/contents/generations/tasks/{id}. A successful task looks like this (real sample from our tests):
{
  "id": "cgt-20260606160057-6bbjd",
  "model": "doubao-seedance-2-0-fast-260128",
  "status": "succeeded",
  "content": {
    "video_url": "https://ark-acg-cn-beijing.tos-cn-beijing.volces.com/....mp4?X-Tos-Expires=86400&..."
  },
  "usage": { "completion_tokens": 108900, "total_tokens": 108900 },
  "created_at": 1780732857,
  "updated_at": 1780732991,
  "seed": 97151,
  "resolution": "720p",
  "ratio": "16:9",
  "duration": 5,
  "framespersecond": 24,
  "generate_audio": true,
  "draft": false
}
  • The video URL is at content.video_url, not top-level; it is a signed link that expires in 24 hours — download immediately
  • State machine: queued → running → succeeded / failed / expired; success is succeeded
  • Download the link with a plain GET — do not send the Authorization header to the signed URL
usage.completion_tokens is the billed token count and follows tokens ≈ duration × width × height × 24 / 1024 (within 0.1% in our tests). With duration: -1 or ratio: adaptive, the actual length and ratio are reported in the response’s duration / ratio fields.

Authorizations

Authorization
string
header
required

API key from the APIYI console (Token must have the SeeDance2 group enabled)

Body

application/json
model
enum<string>
required

Model ID (plain ID, no ep- prefix). Standard supports 1080p; fast caps at 720p but generates faster — both bill at the same rate on APIYI

Available options:
doubao-seedance-2-0-260128,
doubao-seedance-2-0-fast-260128
Example:

"doubao-seedance-2-0-fast-260128"

content
object[]
required

Input array. Text-to-video: a single text item. Image-to-video: add image_url items (role: first_frame / last_frame). Multi-modal reference: 1-9 image_url items (role: reference_image) plus optional video_url / audio_url. The three image modes are mutually exclusive

resolution
enum<string>
default:720p

Resolution tier (defines pixel area — every ratio in a tier costs the same). 1080p is not available on the fast model

Available options:
480p,
720p,
1080p
ratio
enum<string>
default:adaptive

Aspect ratio. adaptive auto-fits the input (recommended for image-to-video to avoid cropping); the actual ratio is returned in the task's ratio field

Available options:
16:9,
4:3,
1:1,
3:4,
9:16,
21:9,
adaptive
duration
integer
default:5

Video length in whole seconds, 4-15; or -1 to let the model choose (billed by actual output). Cost scales linearly with duration

Example:

5

generate_audio
boolean
default:true

Generate synchronized audio (voice, SFX, background music; mono). Note it DEFAULTS TO TRUE — pass false explicitly for silent video

watermark
boolean
default:false

Add an AI-generated watermark in the bottom-right corner

seed
integer
default:-1

Random seed, [-1, 2^32-1]. The same seed produces similar (not identical) results; -1 means random

return_last_frame
boolean
default:false

Return the last frame as a watermark-free png (same dimensions as the video) — chain it as the first frame of the next task to produce continuous multi-clip videos

execution_expires_after
integer
default:172800

Task expiry threshold in seconds; tasks exceeding it are marked expired. Range [3600, 259200]

Response

Task created. Returns the task ID for polling

Creation response. Poll GET /seedance/api/v3/contents/generations/tasks/{id}; on success the video URL is at content.video_url (expires in ~24 h) and billed tokens at usage.completion_tokens

id
string

Video generation task ID (kept for 7 days)

Example:

"cgt-20260606160057-6bbjd"