AI Video APIAI Video API


Seedance 2.0 Fast

Seedance 2.0 Fast is the faster, more affordable variant of Seedance 2.0. It supports the same multi-modal capabilities — text, image, video, and audio references as input.

Model

Model NameDurationResolutionAspect Ratios
doubao-seedance-2.0-fast4-15s480p, 720p16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive

Pricing

Formula-based billing with different rates depending on whether video references are used.

  • Without video: output_duration × per_second
  • With video: (input_video_duration + output_duration) × per_second
ResolutionWithout Video ReferenceWith Video Reference
480p16 credits/s ($0.08/s)10 credits/s ($0.05/s)
720p35 credits/s ($0.175/s)22 credits/s ($0.11/s)

When using video references, input video duration is automatically detected. The total billable duration = input video duration + output video duration.

Examples:

  • 720p, 5s, text-only: 35 × 5 = 175 credits ($0.875)
  • 720p, 10s output, 5s input video: 22 × (5 + 10) = 330 credits ($1.65)
  • 480p, 5s, text-only: 16 × 5 = 80 credits ($0.40)
  • 480p, 15s output, 5s input video: 10 × (5 + 15) = 200 credits ($1.00)

Create Task

POST https://api.aivideoapi.ai/v1/videos/generations

Request Body

FieldTypeRequiredDescription
modelstringYesMust be doubao-seedance-2.0-fast
inputobjectYesGeneration parameters, see below
callback_urlstringNoURL to receive task completion/failure notifications

Input Object

FieldTypeRequiredDescription
promptstringYesText description (Chinese/English, recommended under 500 chars)
generation_typestringNoGeneration mode: omni_reference (default) or first_and_last_frames. See Generation Type
image_urlsstring[] | object[]NoReference image URLs (up to 9 for omni_reference, 1-2 for first_and_last_frames). See Image URLs Format
video_urlsstring[]NoReference video URLs (up to 3, total duration max 15s). Ignored in first_and_last_frames mode
audio_urlsstring[]NoReference audio URLs (up to 3, total duration max 15s). Ignored in first_and_last_frames mode
durationintegerNoVideo duration in seconds: 4-15 (default: 5). See Duration
aspect_ratiostringNoAspect ratio. See Aspect Ratio (default: adaptive)
resolutionstringNo480p or 720p (default: 720p)
generate_audiobooleanNoGenerate synchronized audio (default: true)
watermarkbooleanNoAdd watermark (default: false)
web_searchbooleanNoEnable web search for real-time information (default: false)

Generation Type

ValueDescription
omni_reference(Default) Omni mode. Supports images, videos, and audio as reference inputs.
first_and_last_framesFirst and last frame mode. Provide 1-2 images: the first image is used as the first frame, the second (optional) as the last frame. video_urls and audio_urls are ignored. Pricing uses the "Without Video Reference" rate.

Image URLs Format

image_urls supports both string array and object array format:

String array:

"image_urls": [
  "https://example.com/photo1.jpg",
  "https://example.com/photo2.jpg"
]

Object array:

"image_urls": [
  { "url": "https://example.com/photo1.jpg" },
  { "url": "https://example.com/photo2.jpg" }
]
FieldTypeRequiredDescription
urlstringYesImage URL

About real person images: All images are automatically processed through our content moderation system. If an image contains celebrities, public figures, or other sensitive content, the task will fail and credits will be automatically refunded. Each image takes an additional 2-3 seconds to process.

Supported Input Combinations

  • Text only
  • Text (optional) + Image(s)
  • Text (optional) + Video(s)
  • Text (optional) + Image(s) + Audio
  • Text (optional) + Image(s) + Video(s)
  • Text (optional) + Video(s) + Audio
  • Text (optional) + Image(s) + Video(s) + Audio

Audio cannot be used alone. It must be combined with at least one image or video.

Example: Text-to-Video

curl -X POST https://api.aivideoapi.ai/v1/videos/generations \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "callback_url": "https://your-server.com/webhook",
    "input": {
      "prompt": "A drone shot flying over mountains at sunset, cinematic lighting",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "480p",
      "generate_audio": true
    }
  }'

Example: Image + Video + Audio References

curl -X POST https://api.aivideoapi.ai/v1/videos/generations \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "callback_url": "https://your-server.com/webhook",
    "input": {
      "prompt": "Use the person image as the main character, follow the camera movement in the videos, with audio as background music",
      "image_urls": [
        { "url": "https://example.com/person.jpg" },
        { "url": "https://example.com/background.jpg" }
      ],
      "video_urls": ["https://example.com/reference1.mp4", "https://example.com/reference2.mp4"],
      "audio_urls": ["https://example.com/bgm.mp3", "https://example.com/sfx.wav"],
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "480p"
    }
  }'

Example: First and Last Frames

Use generation_type: "first_and_last_frames" to control the start and end of the video. Provide 1 image (first frame only) or 2 images (first and last frame).

curl -X POST https://api.aivideoapi.ai/v1/videos/generations \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "callback_url": "https://your-server.com/webhook",
    "input": {
      "prompt": "A person walks from the park to the city center",
      "generation_type": "first_and_last_frames",
      "image_urls": [
        { "url": "https://example.com/start-frame.jpg" },
        { "url": "https://example.com/end-frame.jpg" }
      ],
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "480p"
    }
  }'

In first_and_last_frames mode, video_urls and audio_urls are ignored. Pricing uses the "Without Video Reference" rate.

Example: Web Search Enabled

When web_search is enabled, the model can look up real-time information to enhance video generation.

curl -X POST https://api.aivideoapi.ai/v1/videos/generations \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0-fast",
    "callback_url": "https://your-server.com/webhook",
    "input": {
      "prompt": "Generate a short news clip about the latest SpaceX rocket launch",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "480p",
      "web_search": true
    }
  }'

Response

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "cbf6b69d-4f03-4817-8ed7-94c0292184a8"
  }
}

Query Task

curl https://api.aivideoapi.ai/v1/tasks/{taskId} \
  -H "Authorization: Bearer sk-your-api-key"

Status transitions: pending -> processing -> completed or failed.

Processing

{
  "id": "e717a5ee-2ed4-47f4-8cc3-53394f1abb35",
  "status": "processing",
  "model": "doubao-seedance-2.0-fast",
  "created_at": 1774706165,
  "progress": null
}

Completed

{
  "id": "7d89c51e-9430-410e-909e-df347131ebaa",
  "status": "completed",
  "model": "doubao-seedance-2.0-fast",
  "created_at": 1774790227,
  "completed_at": 1774796529,
  "output": {
    "urls": [
      "https://ark-acg-cn-beijing.tos-cn-beijing.volces.com/doubao-seedance-2-0/...mp4?X-Tos-Algorithm=..."
    ],
    "metadata": {
      "seed": 41485,
      "ratio": "16:9",
      "duration": 5,
      "resolution": "480p",
      "generate_audio": true,
      "framespersecond": 24
    }
  }
}

Video URLs expire in 24 hours. Download promptly after generation completes.

Failed

{
  "id": "57c8772c-f834-46f3-9b7d-81f92e104050",
  "status": "failed",
  "model": "doubao-seedance-2.0-fast",
  "created_at": 1774793758,
  "error": {
    "code": "upstream_error",
    "message": "The request failed because the input text may contain sensitive information. Request id: 0217747937596950e290995bd2535df6af5f05331d9ca5663eeee"
  }
}

When a task fails, pre-charged credits are automatically refunded.

Callback

Pass callback_url when creating the task. The system will automatically send a POST request to your URL when the task completes or fails.

On Task Completed

{
  "id": "7d89c51e-9430-410e-909e-df347131ebaa",
  "status": "completed",
  "model": "doubao-seedance-2.0-fast",
  "created_at": 1774790227,
  "completed_at": 1774796529,
  "output": {
    "urls": [
      "https://ark-acg-cn-beijing.tos-cn-beijing.volces.com/doubao-seedance-2-0/...mp4?X-Tos-Algorithm=..."
    ],
    "metadata": {
      "seed": 41485,
      "ratio": "16:9",
      "duration": 5,
      "resolution": "480p",
      "generate_audio": true,
      "framespersecond": 24
    }
  }
}

On Task Failed

{
  "id": "57c8772c-f834-46f3-9b7d-81f92e104050",
  "status": "failed",
  "model": "doubao-seedance-2.0-fast",
  "created_at": 1774793758,
  "error": {
    "code": "upstream_error",
    "message": "The request failed because the input text may contain sensitive information. Request id: 0217747937596950e290995bd2535df6af5f05331d9ca5663eeee"
  }
}

When a task fails, pre-charged credits are automatically refunded.

Parameters

Duration

Integer, unit: seconds. Default: 5.

  • Range: 4-15
  • Duration affects billing — see Pricing

Aspect Ratio

Default: adaptive.

Supported values: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive

When set to adaptive, the model auto-selects the best ratio based on the input:

  • Text-to-video: intelligently chosen based on the prompt
  • Image-to-video (first frame / first+last frame): matched to the uploaded image's aspect ratio
  • Multi-modal reference: if the intent is first-frame / edit / extend, matched to that image or video; otherwise matched to the first media file (priority: video > image)

The actual ratio used is returned in the task response metadata.ratio field.

Input Requirements

Images

  • Formats: JPEG, PNG, WebP, BMP, TIFF, GIF
  • Aspect ratio (w/h): 0.4 ~ 2.5
  • Dimensions: 300 ~ 6000 px per side
  • Max size: 30 MB per image

Videos

  • Formats: MP4, MOV
  • Resolution: 480p, 720p
  • Duration: 2-15s per video, up to 3 reference videos, total duration max 15s
  • Aspect ratio (w/h): 0.4 ~ 2.5
  • Dimensions: 300 ~ 6000 px per side
  • Pixel count (w × h): 409,600 ~ 927,408 (e.g., 640×640=409,600 meets minimum; 834×1112=927,408 meets maximum)
  • Max size: 50 MB per video
  • FPS: 24 ~ 60

Audio

  • Formats: WAV, MP3
  • Duration: 2-15s per audio, total max 15s
  • Max size: 15 MB per audio

Resolution Reference

480p

Aspect RatioPixels
16:9864 x 496
4:3752 x 560
1:1640 x 640
3:4560 x 752
9:16496 x 864
21:9992 x 432

720p

Aspect RatioPixels
16:91280 x 720
4:31112 x 834
1:1960 x 960
3:4834 x 1112
9:16720 x 1280
21:91470 x 630

Error Codes

When a request fails, the API returns a JSON error response:

{
  "error": {
    "code": "insufficient_credits",
    "message": "Your credit balance is too low. Please top up.",
    "type": "billing_error"
  }
}

Error Reference

HTTP StatusCodeTypeDescription
400invalid_requestinvalid_request_errorMissing or invalid parameters
401invalid_api_keyauthentication_errorAPI key is invalid, disabled, or deleted
402insufficient_creditsbilling_errorCredit balance too low, please top up
403ip_not_allowedpermission_errorRequest IP not in the key's allowlist
404model_not_foundinvalid_request_errorModel does not exist or is inactive
404task_not_foundinvalid_request_errorTask ID does not exist
429rate_limit_exceededrate_limit_errorToo many requests, please slow down
429spend_limit_exceededbilling_errorKey spend limit reached (hourly/daily/total)
500internal_errorapi_errorUnexpected server error
503upstream_errorupstream_errorUpstream AI provider returned an error

Common Scenarios

invalid_request (400)

Returned when required fields are missing or invalid.

{
  "error": {
    "code": "invalid_request",
    "message": "'model' is required.",
    "type": "invalid_request_error"
  }
}

insufficient_credits (402)

Your balance is too low. Check your balance with GET /v1/credits and top up in Dashboard > Billing.

invalid_api_key (401)

Possible causes:

  • The key does not start with sk-
  • The key has been disabled or deleted
  • The user account has been banned

upstream_error (503)

The upstream AI provider returned an error. This may happen when:

  • The input contains sensitive or prohibited content
  • The provider is temporarily unavailable
  • The request parameters are not supported by the provider

Credits are automatically refunded when a task fails due to upstream errors.