Skip to content

Seedance Video

Seedance Video uses the official-compatible video task API. Create a task first, then poll the task endpoint for status and the final video URL.

Endpoints

CapabilityMethodPath
Unified create video taskPOST/v1/video/generations
Unified retrieve video taskGET/v1/video/generations/{task_id}
Official-compatible create video taskPOST/api/v3/contents/generations/tasks
Official-compatible retrieve video taskGET/api/v3/contents/generations/tasks/{task_id}
Moderate imagesPOST/v1/images/moderations

Supported Models

ModelNotes
doubao-seedance-2.0Seedance 2.0 standard model

The actual model availability depends on account permissions and platform configuration.

Unified Video API

Use the unified video API when you want the same request flow as other video models. Create a task first, then poll the unified retrieve endpoint for status and the final video URL.

http
POST /v1/video/generations
GET /v1/video/generations/{task_id}

Parameters

ParameterRequiredDescription
modelYesSeedance model name. Use doubao-seedance-2.0
promptYesVideo generation prompt
secondsNoDuration as a string, such as "5"; duration is also accepted
imagesNoImage URL array for reference images or first-frame input
imageNoSingle image URL, equivalent to a one-item images array
input_referenceNoSingle reference media URL, equivalent to single-image input
metadataNoSeedance-specific options passed through to the task request

Common metadata fields:

FieldDescription
resolutionOutput resolution, such as 720p or 1080p; pass it only when the selected model supports it
ratioAspect ratio, such as 16:9, 9:16, or 1:1
durationVideo duration in seconds
seedRandom seed
camera_fixedWhether to keep the camera fixed
watermarkWhether to add a watermark
generate_audioWhether to generate audio
contentOfficial-compatible content array. Use it when you need roles such as first_frame, last_frame, or reference_image

Text-to-Video Example

bash
curl -X POST https://cubicspaces.cloud/v1/video/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "doubao-seedance-2.0",
    "prompt": "A cinematic aerial shot of a futuristic cubic city at sunrise",
    "seconds": "5",
    "metadata": {
      "resolution": "1080p",
      "ratio": "16:9",
      "watermark": false,
      "generate_audio": true
    }
  }'

Reference Image / First Frame Example

bash
curl -X POST https://cubicspaces.cloud/v1/video/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "doubao-seedance-2.0",
    "prompt": "Use image 1 as the subject reference. Make the product rotate slowly on a clean studio background while preserving its appearance.",
    "seconds": "5",
    "metadata": {
      "resolution": "720p",
      "ratio": "1:1",
      "camera_fixed": true,
      "watermark": false,
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "asset://reviewed-image-asset-id"
          },
          "role": "reference_image"
        }
      ]
    }
  }'

A successful unified create request returns a standard video task object:

json
{
  "id": "video_xxx",
  "task_id": "video_xxx",
  "object": "video",
  "model": "doubao-seedance-2.0",
  "status": "queued",
  "progress": 0,
  "created_at": 1770000000
}

Retrieve the task:

bash
curl https://cubicspaces.cloud/v1/video/generations/video_xxx \
  -H "Authorization: Bearer YOUR_API_KEY"

When the task is completed, read the video URL from metadata.url.

Official-Compatible API

http
POST /api/v3/contents/generations/tasks
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Parameters

ParameterRequiredDescription
modelYesSeedance model name
contentYesMultimodal content array. It usually contains one text item and optional image, video, or audio assets
content[].typeYesContent type, such as text, image_url, video_url, or audio_url
content[].textNoText prompt, used when type is text
content[].image_url.urlNoImage URL. It can be a public image URL or an approved asset://<asset ID>
content[].video_url.urlNoVideo URL. It can be a public video URL or an approved asset://<asset ID>
content[].roleNoAsset role, such as reference_image, first_frame, or last_frame
durationNoVideo duration in seconds
ratioNoAspect ratio, such as 16:9, 9:16, or 1:1
seedNoRandom seed
camera_fixedNoWhether to keep the camera fixed
watermarkNoWhether to add a watermark
generate_audioNoWhether to generate audio

Request Example

bash
curl -X POST https://cubicspaces.cloud/api/v3/contents/generations/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "doubao-seedance-2.0",
    "content": [
      {
        "type": "text",
        "text": "Use image 1 to generate a 5-second product showcase video."
      },
      {
        "type": "image_url",
        "image_url": {
          "url": "asset://reviewed-image-asset-id"
        },
        "role": "reference_image",
        "duration": 5
      }
    ],
    "ratio": "16:9",
    "duration": 5,
    "generate_audio": true
  }'

A successful create request returns an official-compatible task object. id is the task ID. The response may keep additional task-service fields such as service_tier or execution_expires_after:

json
{
  "id": "task_xxx",
  "model": "doubao-seedance-2.0",
  "status": "running",
  "created_at": 1770000000,
  "updated_at": 1770000000,
  "service_tier": "default",
  "execution_expires_after": 172800
}

Moderate Images

When Seedance uses real-person or library-managed image assets, submit public image URLs to the image moderation endpoint first. After approval and ingestion, use the returned items[].asset_url as content[].image_url.url.

http
POST /v1/images/moderations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

/v1/assets/moderations uses the same moderation handler.

Request Parameters

ParameterRequiredDescription
modelYesUsed to route the request to a Seedance channel. Use doubao-seedance-2.0
imagesNoImage URL array
image_urlsNoImage URL array, equivalent to images
image_urlNoSingle image URL
asset_typeNoAsset type, defaults to Image; keep the default for image moderation

At least one of images, image_urls, or image_url is required. Images must be public http or https URLs. base64 and inline binary content are not supported.

Moderation Limits

  • Submit at most 50 URLs per request. One image per request is recommended because multiple assets may take longer to process.
  • Use one asset type per batch. For image moderation, use asset_type: "Image".
  • Image URLs need supported file extensions: .jpeg, .jpg, .png, .webp, .bmp, .tiff, .tif, .gif, .heic, .heif.
  • Each image should have an aspect ratio between 0.4 and 2.5, width and height between 300 and 6000 px, and file size below 30 MB.
  • This endpoint is a synchronous wrapper. The platform waits for moderation and returns a normalized result; if processing is delayed, it polls briefly before returning a timeout error.

Request Example

bash
curl -X POST https://cubicspaces.cloud/v1/images/moderations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "doubao-seedance-2.0",
    "images": [
      "https://example.com/product.png"
    ]
  }'

Response Example

json
{
  "code": "success",
  "message": "",
  "data": {
    "object": "asset_moderation",
    "status": "approved",
    "review_batch_id": "review-batch-id",
    "task_id": "moderation-task-id",
    "items": [
      {
        "source_url": "https://example.com/product.png",
        "asset_url": "asset://reviewed-image-asset-id",
        "submit_review_status": 1,
        "passed": true
      }
    ]
  }
}

When passed is true and submit_review_status is 1, the image is approved. asset_url is usually in the asset://<asset ID> form. Put it in content, and set a role such as reference_image, first_frame, or last_frame.

In prompts, refer to assets with the “asset type + index” format, such as “image 1” or “video 1”. The index starts from 1 within assets of the same type in the content array. Do not refer to assets by Asset ID in the prompt.

Asset codes from the legacy asset system cannot be used directly with Seedance 2.0. Use the asset_url returned by the current moderation endpoint, or build asset://<asset ID> from the new approved asset ID.

Text-to-Video Example

bash
curl -X POST https://cubicspaces.cloud/api/v3/contents/generations/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "doubao-seedance-2.0",
    "content": [
      {
        "type": "text",
        "text": "A cinematic aerial shot of a futuristic cubic city at sunrise"
      }
    ],
    "duration": 5,
    "ratio": "16:9",
    "watermark": false
  }'

Moderated Image-to-Video Example

bash
curl -X POST https://cubicspaces.cloud/api/v3/contents/generations/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "doubao-seedance-2.0",
    "content": [
      {
        "type": "text",
        "text": "Use image 1 as the subject reference. Make the product rotate slowly on a clean studio background while preserving its appearance."
      },
      {
        "type": "image_url",
        "image_url": {
          "url": "asset://reviewed-image-asset-id"
        },
        "role": "reference_image"
      }
    ],
    "duration": 5,
    "ratio": "1:1",
    "camera_fixed": true,
    "watermark": false
  }'

First And Last Frame Example

First and last frames use the first_frame and last_frame roles. Each asset can be either a public URL or an approved asset://<asset ID>.

json
{
  "model": "doubao-seedance-2.0",
  "content": [
    {
      "type": "text",
      "text": "Generate a smooth transition video from image 1 to image 2."
    },
    {
      "type": "image_url",
      "image_url": {
        "url": "asset://first-frame-asset-id"
      },
      "role": "first_frame"
    },
    {
      "type": "image_url",
      "image_url": {
        "url": "asset://last-frame-asset-id"
      },
      "role": "last_frame"
    }
  ],
  "duration": 8,
  "ratio": "16:9",
  "generate_audio": true
}

Video Reference Input

For Seedance 2.0 video reference input, pass a video_url item in content. Real-person or authorized assets can also use asset://<asset ID>.

json
{
  "model": "doubao-seedance-2.0",
  "content": [
    {
      "type": "text",
      "text": "Keep the character style and generate a new action sequence"
    },
    {
      "type": "video_url",
      "video_url": {
        "url": "https://example.com/reference.mp4"
      }
    }
  ],
  "duration": 5,
  "ratio": "16:9"
}

Response And Polling

Save id from the create response and use it to poll the task:

http
GET /api/v3/contents/generations/tasks/{task_id}
Authorization: Bearer YOUR_API_KEY

While the task is running, the response usually looks like:

json
{
  "id": "task_xxx",
  "model": "doubao-seedance-2.0",
  "status": "running",
  "created_at": 1770000000,
  "updated_at": 1770000030
}

When the task completes, the response returns status: "succeeded" and the final video URL in content.video_url:

json
{
  "id": "task_xxx",
  "model": "doubao-seedance-2.0",
  "status": "succeeded",
  "content": {
    "video_url": "https://example.com/generated-video.mp4"
  },
  "created_at": 1770000000,
  "updated_at": 1770000600
}

If the task fails, the response returns status: "failed" and the failure reason in error.message:

json
{
  "id": "task_xxx",
  "model": "doubao-seedance-2.0",
  "status": "failed",
  "error": {
    "code": "task_failed",
    "message": "The request failed because the output video may be related to policy restrictions."
  },
  "created_at": 1770000000,
  "updated_at": 1770000300
}

Dashboard Log Labels

Seedance video generation is an asynchronous task. In dashboard usage logs, refund-related records are split into two labels:

Log labelMeaning
Failure RefundThe task failed and the quota held for that task was returned
Pre-deduction ReturnThe task succeeded, then the platform settled the final task result and returned the unused held portion

Pre-deduction Return does not mean the video task failed. Use the task polling response fields status, error.message, and content.video_url to determine the actual generation result.

Status Values

StatusMeaning
queuedQueued
runningGenerating
succeededCompleted
failedFailed; inspect error.message

Notes

  • base64 images and inline binary assets are not supported. Upload reference or moderation images to public storage first, then pass the URL.
  • For moderated/ingested assets, use image_url / video_url / audio_url in content; the URL can be asset://<asset ID>.
  • In prompts, refer to assets as “image 1 / video 1 / audio 1”; do not use Asset IDs directly.
  • This documentation lists doubao-seedance-2.0; actual availability follows account permissions and platform configuration.
  • resolution is only supported by some models. Omit it unless the selected model supports it.