Seeddance API
API reference

Create a video task

Starts a Seedance video task and returns its ID. Use `GET /v1/tasks/{task_id}` to check the status. If you retry this request, the API may create a second task.

POST/v1/videos/generations
AuthorizationBearer <token>

Create a Seeddance API key in Settings. Send it only from a trusted server.

In: header

modelstring

A public Seedance model ID.

Value in"seedance-1.0-pro-fast" | "seedance-1.5-pro" | "seedance-2.0" | "seedance-2.0-fast" | "seedance-2.0-mini" | "seedance-2.5"
promptstring

Describe the video you want to create. Each model has its own prompt length limit.

Length1 <= length
duration?integer

The video length in seconds. The supported range depends on the model.

Range2 <= value <= 30
quality?string

The output resolution. Available options depend on the model and account plan. Seedance 2.0 Mini supports up to 720p.

Value in"480p" | "720p" | "1080p"
aspect_ratio?string

The output aspect ratio. Only supported models accept adaptive.

Value in"16:9" | "9:16" | "1:1" | "4:3" | "3:4" | "21:9" | "adaptive"
generate_audio?boolean

Set to true to generate synchronized audio when the model supports it.

image_urls?array<string>

Public HTTPS JPEG, PNG, or WebP URLs. Seedance 2.5 accepts up to 30 images; each must be 300 to 6000 px per side, use a 0.4 to 2.5 aspect ratio, and be at most 30 MB. With no video or audio input, one image selects image to video, two images select first and last frame mode, and three or more images select reference mode.

video_urls?array<string>

Public HTTPS MP4 or MOV reference URLs. Seedance 2.5 accepts up to 10 videos, 2 to 30 seconds each and 30 seconds total, at 24 to 60 FPS. Each video may be at most 200 MB, 300 to 6000 px per side, 0.4 to 2.5 aspect ratio, and 409,600 to 8,295,044 frame pixels.

audio_urls?array<string>

Public HTTPS MP3 or WAV reference URLs for Seedance 2.5. Send up to 10 files, 2 to 30 seconds each and 30 seconds total, with a maximum size of 15 MB per file.

output_format?string

The Seedance 2.5 output container. Defaults to mp4.

Value in"mp4" | "mov"
content_filter?boolean

Controls the optional Seedance 2.5 content filter. Defaults to true. Setting it to false applies the provider 1.1x rate.

web_search?boolean

Allows web search for Seedance 2.5 text-to-video requests. Defaults to false.

reference_mode?boolean

Set to true to treat one or two images as references instead of first and last frames. Supported by Seedance 2.0 and 2.5 models and requires at least one media URL.

Response Body

curl -X POST "https://www.seeddance.io/v1/videos/generations" \  -H "Authorization: Bearer sk_sd_example" \  -H "Content-Type: application/json" \  -d '{    "model": "seedance-2.0-fast",    "prompt": "A paper boat crossing a rain-soaked neon street",    "duration": 5,    "quality": "720p"  }'
{
  "task_id": "vid_01JZK7R7KCYQ3T9F33A7K0J6XB",
  "status": "pending",
  "created_at": "2026-07-22T08:30:00.000Z"
}
{
  "error": {
    "code": "invalid_request",
    "message": "Request body must contain valid JSON.",
    "param": null,
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "invalid_api_key",
    "message": "The API key is invalid, expired, or revoked.",
    "param": null,
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "insufficient_credits",
    "message": "This request requires 25 credits, but only 10 are available.",
    "param": null,
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "plan_upgrade_required",
    "message": "The requested model or quality requires a higher plan.",
    "param": "model",
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "Content-Type must be application/json.",
    "param": "content-type",
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "Unsupported model.",
    "param": "model",
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "API rate limit exceeded. Try again later.",
    "param": null,
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "internal_error",
    "message": "The request could not be completed.",
    "param": null,
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "provider_error",
    "message": "The video provider could not start this task. Try again later.",
    "param": null,
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}
{
  "error": {
    "code": "service_unavailable",
    "message": "Video generation is temporarily unavailable.",
    "param": null,
    "request_id": "req_2YgM6pg5oM2WkKpQ"
  }
}