CyHUB
РусскийGet an API key

Seedance 2.0 Fast API

Seedance 2.0 Fast video by ByteDance with sound: from a description, from the first and last frames or from references, up to 15 seconds. A fast version, 480p or 720p. References can be photos, videos and audio. Your own video can be edited with a description, and on Channel 2 also extended forward or backward. Two channels: the usual one and a usually cheaper one.

Developer: ByteDanceModel key in the API: seedance

For AI assistants:Download .mdAll documentation .mdOpen as text

Connect in three steps

  1. Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
  2. Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
  3. Run a task and collect the resultPOST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.

Ready-to-use code

Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.

cURL
curl -X POST "https://api.cyhub.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance",
  "settings": {
    "mode": "text_to_video",
    "prompt": "Бумажный кораблик плывёт по весеннему ручью, крупный план",
    "model": "seedance_2_fast",
    "quality": "480p",
    "duration": 5,
    "aspect_ratio": "9:16",
    "channel": "channel_2"
  }
}'

curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import time

import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

body = {
    "model": "seedance",
    "settings": {
        "mode": "text_to_video",
        "prompt": "Бумажный кораблик плывёт по весеннему ручью, крупный план",
        "model": "seedance_2_fast",
        "quality": "480p",
        "duration": 5,
        "aspect_ratio": "9:16",
        "channel": "channel_2",
    },
}

response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
    time.sleep(5)
    task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])
Node.js
const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };

const body = {
  "model": "seedance",
  "settings": {
    "mode": "text_to_video",
    "prompt": "Бумажный кораблик плывёт по весеннему ручью, крупный план",
    "model": "seedance_2_fast",
    "quality": "480p",
    "duration": 5,
    "aspect_ratio": "9:16",
    "channel": "channel_2"
  }
};

async function main() {
  let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
  if (!response.ok) throw new Error(await response.text());
  let task = await response.json();
  while (task.status === "queued" || task.status === "running") {
    await new Promise((resolve) => setTimeout(resolve, 5000));
    response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
    task = await response.json();
  }
  console.log(task.status, task.result);
}

main();
Get a key

Price before the run

Prices as of 15.10.2026: from 32 ₽. POST /v1/price shows the exact price of your settings.

ModePrice
From a descriptionfrom 32 ₽
From framesfrom 33 ₽
From referencesfrom 32 ₽
Video edit with a 4 s filefrom 39 ₽
Video extension with a 2 s filefrom 34 ₽

Send the same settings to POST /v1/price: the response shows the price of the run without charging you.

cURL
curl -X POST "https://api.cyhub.ai/v1/price" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance",
  "settings": {
    "mode": "text_to_video",
    "prompt": "Бумажный кораблик плывёт по весеннему ручью, крупный план",
    "model": "seedance_2_fast",
    "quality": "480p",
    "duration": 5,
    "aspect_ratio": "9:16",
    "channel": "channel_2"
  }
}'
  • amount_minor: the price of the run in minor units (kopecks for rubles)
  • currency: the wallet currency
  • available_minor: how much your balance has for new tasks right now

Modes

Each mode has its own parameters and examples. The mode is set by the mode field.

From a description

A video from text alone, no files are sent.

Value of the mode field: text_to_video

This page is about Seedance 2.0 Fast: send model = seedance_2_fast. Without the model field the task runs on seedance_2_5.

Price in this mode from 32 ₽.

Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

promptRequired

What happens in the video: 3 to 20,000 characters, several languages are supported.

Type: StringMinimum characters: 1Maximum characters: 20000
modelOptional

Version. 2.5 is the newest and makes clips up to 30 seconds, Pro 2.0 is the only one with 4K, Fast 2.0 is fast, Mini 2.0 is the cheapest.

Type: StringAllowed values: seedance_2_fastDefault: "seedance_2_5"
qualityOptional

Video quality; the price depends on it. 1080p is available in 2.5 and Pro 2.0, 4K only in Pro 2.0. A draft is always 480p, this field does not apply to it.

Type: StringAllowed values: 480p720pDefault: "720p"
durationOptional

Video length in seconds: 4 to 30 in version 2.5, up to 15 in the 2.0 family. The price is per second.

Type: IntegerMinimum: 4Maximum: 30Default: 5
generate_audioOptional

Generate sound together with the video.

Type: BooleanDefault: true
channelOptional

Which channel the generation goes through: the model is the same, the price and the checks differ. Channel 1 is the usual one and accepts photos of people. Channel 2 is usually cheaper, but it rejects photos of real people and prohibited subjects, and it has no online search. With a video as input Channel 2 has a price floor that grows with the length of the clip, so with a short video it can cost more. A refusal of a channel is not charged.

Type: StringAllowed values: channel_1channel_2Default: "channel_1"
draftOptional

Draft: a low-cost 480p clip to check the scene, motion and sound before paying for high quality. It costs as much as a regular 480p clip, and quality does not apply to it. Only version 2.5 on Channel 2 has drafts: with another version or channel the task is not accepted. If you like the draft, it can be rebuilt once in 1080p with the upscale_draft mode within 7 days after it was made: the scene, motion and sound stay the same, and the rebuild costs as much as a regular 1080p clip.

Type: BooleanDefault: false
aspect_ratioOptional

Aspect ratio. adaptive is available only in version 2.5: the model picks the shape itself from the description.

Type: StringAllowed values: 16:99:161:14:33:421:9Default: "16:9"
web_searchOptional

Online search: the model pulls up-to-date information from the internet. Channel 1 only.

Type: BooleanDefault: false

Parameters not listed here are not accepted: the response is 422 unknown_setting.

The API sets these settings itself, do not send them: files_as_is = true

Input

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    Cheaper, through Channel 2

    JSON
    {
      "model": "seedance",
      "settings": {
        "mode": "text_to_video",
        "prompt": "Бумажный кораблик плывёт по весеннему ручью, крупный план",
        "model": "seedance_2_fast",
        "quality": "480p",
        "duration": 5,
        "aspect_ratio": "9:16",
        "channel": "channel_2"
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • MP4 video.
    • Generation usually takes a few minutes, longer for long clips and high quality.
    • With draft: true you get a 480p draft. Such a task has a draft field: until when it can be rebuilt in 1080p, whether it can be rebuilt now and a ready request for the rebuild.
    KindFormatsHow manyNote
    videomp41

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    From frames

    The first frame, or the first and the last one: the model animates them by the description.

    Value of the mode field: image_to_video

    This page is about Seedance 2.0 Fast: send model = seedance_2_fast. Without the model field the task runs on seedance_2_5.

    Price in this mode from 33 ₽.

    Parameters

    Model parameters go inside settings. Omitted optional fields take their default values.

    promptRequired

    What happens in the video: 3 to 20,000 characters, several languages are supported.

    Type: StringMinimum characters: 1Maximum characters: 20000
    modelOptional

    Version. 2.5 is the newest and makes clips up to 30 seconds, Pro 2.0 is the only one with 4K, Fast 2.0 is fast, Mini 2.0 is the cheapest.

    Type: StringAllowed values: seedance_2_fastDefault: "seedance_2_5"
    qualityOptional

    Video quality; the price depends on it. 1080p is available in 2.5 and Pro 2.0, 4K only in Pro 2.0. A draft is always 480p, this field does not apply to it.

    Type: StringAllowed values: 480p720pDefault: "720p"
    durationOptional

    Video length in seconds: 4 to 30 in version 2.5, up to 15 in the 2.0 family. The price is per second.

    Type: IntegerMinimum: 4Maximum: 30Default: 5
    generate_audioOptional

    Generate sound together with the video.

    Type: BooleanDefault: true
    channelOptional

    Which channel the generation goes through: the model is the same, the price and the checks differ. Channel 1 is the usual one and accepts photos of people. Channel 2 is usually cheaper, but it rejects photos of real people and prohibited subjects, and it has no online search. With a video as input Channel 2 has a price floor that grows with the length of the clip, so with a short video it can cost more. A refusal of a channel is not charged.

    Type: StringAllowed values: channel_1channel_2Default: "channel_1"
    draftOptional

    Draft: a low-cost 480p clip to check the scene, motion and sound before paying for high quality. It costs as much as a regular 480p clip, and quality does not apply to it. Only version 2.5 on Channel 2 has drafts: with another version or channel the task is not accepted. If you like the draft, it can be rebuilt once in 1080p with the upscale_draft mode within 7 days after it was made: the scene, motion and sound stay the same, and the rebuild costs as much as a regular 1080p clip.

    Type: BooleanDefault: false
    image_urlsRequired

    One URL: the first frame. Two URLs: the first and the last frames.

    Type: List (String, uri)Maximum items: 2
    aspect_ratioOptional

    Aspect ratio; it only works in the 2.0 family on Channel 1. In version 2.5, and in every version on Channel 2, the first frame sets the video size and the chosen value is ignored: version 2.5 has a single choice here, adaptive.

    Type: StringAllowed values: 16:99:161:14:33:421:9Default: "16:9"

    Parameters not listed here are not accepted: the response is 422 unknown_setting.

    The API sets these settings itself, do not send them: files_as_is = true

    Input

    • Pictures are URLs of JPEG, PNG, WEBP, BMP, TIFF, GIF files up to 30 MB each, sides from 300 to 6,000 pixels.
    • On Channel 2 the frame sets the video size in every version.
    FieldAcceptsFormatsFilesFile size up to
    image_urlsImagesjpeg, jpg, png, webp, bmp, tiff, gif230 MB
    How to send files

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    Animate a frame

    JSON
    {
      "model": "seedance",
      "settings": {
        "mode": "image_to_video",
        "prompt": "Девушка поворачивается к камере и улыбается, волосы развеваются на ветру",
        "image_urls": [
          "https://example.com/first-frame.jpg"
        ],
        "duration": 5,
        "model": "seedance_2_fast"
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • MP4 video.
    • Generation usually takes a few minutes, longer for long clips and high quality.
    • With draft: true you get a 480p draft. Such a task has a draft field: until when it can be rebuilt in 1080p, whether it can be rebuilt now and a ready request for the rebuild.
    KindFormatsHow manyNote
    videomp41

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    From references

    Characters, style, motion and sound from your photos, videos and audio in a new clip. At least one photo or video is needed.

    Value of the mode field: multimodal

    This page is about Seedance 2.0 Fast: send model = seedance_2_fast. Without the model field the task runs on seedance_2_5.

    Price in this mode from 32 ₽.

    Parameters

    Model parameters go inside settings. Omitted optional fields take their default values.

    promptRequired

    What happens in the video: 3 to 20,000 characters, several languages are supported.

    Type: StringMinimum characters: 1Maximum characters: 20000
    modelOptional

    Version. 2.5 is the newest and makes clips up to 30 seconds, Pro 2.0 is the only one with 4K, Fast 2.0 is fast, Mini 2.0 is the cheapest.

    Type: StringAllowed values: seedance_2_fastDefault: "seedance_2_5"
    qualityOptional

    Video quality; the price depends on it. 1080p is available in 2.5 and Pro 2.0, 4K only in Pro 2.0. A draft is always 480p, this field does not apply to it.

    Type: StringAllowed values: 480p720pDefault: "720p"
    durationOptional

    Video length in seconds: 4 to 30 in version 2.5, up to 15 in the 2.0 family. The price is per second.

    Type: IntegerMinimum: 4Maximum: 30Default: 5
    generate_audioOptional

    Generate sound together with the video.

    Type: BooleanDefault: true
    channelOptional

    Which channel the generation goes through: the model is the same, the price and the checks differ. Channel 1 is the usual one and accepts photos of people. Channel 2 is usually cheaper, but it rejects photos of real people and prohibited subjects, and it has no online search. With a video as input Channel 2 has a price floor that grows with the length of the clip, so with a short video it can cost more. A refusal of a channel is not charged.

    Type: StringAllowed values: channel_1channel_2Default: "channel_1"
    draftOptional

    Draft: a low-cost 480p clip to check the scene, motion and sound before paying for high quality. It costs as much as a regular 480p clip, and quality does not apply to it. Only version 2.5 on Channel 2 has drafts: with another version or channel the task is not accepted. If you like the draft, it can be rebuilt once in 1080p with the upscale_draft mode within 7 days after it was made: the scene, motion and sound stay the same, and the rebuild costs as much as a regular 1080p clip.

    Type: BooleanDefault: false
    aspect_ratioOptional

    Aspect ratio. adaptive is available only in version 2.5: the model picks the shape itself from the description and the references. On Channel 2 with reference videos this happens in every version, and the chosen value is ignored.

    Type: StringAllowed values: 16:99:161:14:33:421:9Default: "16:9"
    image_urlsOptional

    Photo reference URLs: up to 30 in version 2.5, up to 9 in the 2.0 family.

    Type: List (String, uri)Maximum items: 30
    video_urlsOptional

    Video reference URLs: up to 10 in version 2.5, up to 3 in the 2.0 family. Each video goes to the model whole, and its seconds are added to the price.

    Type: List (String, uri)Maximum items: 10
    audio_urlsOptional

    Audio reference URLs: up to 10 in version 2.5, up to 3 in the 2.0 family. Audio only together with a photo or a video.

    Type: List (String, uri)Maximum items: 10

    Parameters not listed here are not accepted: the response is 422 unknown_setting.

    The API sets these settings itself, do not send them: files_as_is = true

    Input

    • Pictures are URLs of JPEG, PNG, WEBP, BMP, TIFF, GIF files up to 30 MB each, sides from 300 to 6,000 pixels.
    • Videos are URLs of MP4, MOV files: in version 2.5 up to 200 MB each and no longer than 30 seconds together, in the 2.0 family up to 50 MB and no longer than 15 seconds together. Each one at least 2 seconds, 24 to 60 frames per second and at least 407,696 pixels per frame (for example 640×640 or 480×854).
    • Audio files are URLs of WAV, MP3 files up to 15 MB each: in version 2.5 from 2 to 30 seconds and no longer than 30 all together, in the 2.0 family from 2 to 15 seconds and no longer than 15 all together.
    • The 2.0 family takes no more than 12 files of all kinds together.
    • Files go to the model as they are and whole. The seconds of all reference videos are added to the video length in the price, a part of a second of each video counts as a whole one. On Channel 2 the price with a video is not below a floor that grows with the length of the clip.
    • We learn the video length for the price by downloading the video from its URL, so the URL must point straight at the file, without redirects, and serve it quickly. Otherwise the price cannot be calculated and the task is not accepted.
    • The description can refer to the files in the order of the URLs of each kind: @image1, @video1, @audio1 and so on.
    • On Channel 2 with reference videos the model picks the shape itself in every version.
    • To change or extend the video itself, use the video_edit and video_extend modes. Here a video is only a reference, but in version 2.5 on Channel 1 the model may take a description of an edit for an edit and refuse: then choose video_edit.
    FieldAcceptsFormatsFilesFile size up to
    image_urlsImagesjpeg, jpg, png, webp, bmp, tiff, gif3030 MB
    video_urlsVideomp4, mov10200 MB
    audio_urlsAudiowav, mp31015 MB
    How to send files

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    A character and a camera move

    JSON
    {
      "model": "seedance",
      "settings": {
        "mode": "multimodal",
        "prompt": "Девушка с @image1 идёт по ночному городу под дождём, камера движется как в @video1",
        "image_urls": [
          "https://example.com/girl.png"
        ],
        "video_urls": [
          "https://example.com/camera-move.mp4"
        ],
        "duration": 8,
        "model": "seedance_2_fast"
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • MP4 video.
    • Generation usually takes a few minutes, longer for long clips and high quality.
    • With draft: true you get a 480p draft. Such a task has a draft field: until when it can be rebuilt in 1080p, whether it can be rebuilt now and a ready request for the rebuild.
    KindFormatsHow manyNote
    videomp41

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    Video edit

    The model changes your video by the description: replace an object or a character, the background, the style. The rest stays as it was, with the length and shape of the video.

    Value of the mode field: video_edit

    This page is about Seedance 2.0 Fast: send model = seedance_2_fast. Without the model field the task runs on seedance_2_5.

    Price in this mode from 39 ₽, with a 4 s file.

    Parameters

    Model parameters go inside settings. Omitted optional fields take their default values.

    promptRequired

    What to change in the video: 3 to 20,000 characters, several languages are supported. The rest of the video stays as it was.

    Type: StringMinimum characters: 1Maximum characters: 20000
    modelOptional

    Version. 2.5 is the newest and makes clips up to 30 seconds, Pro 2.0 is the only one with 4K, Fast 2.0 is fast, Mini 2.0 is the cheapest.

    Type: StringAllowed values: seedance_2_fastDefault: "seedance_2_5"
    qualityOptional

    Video quality; the price depends on it. 1080p is available in 2.5 and Pro 2.0, 4K only in Pro 2.0. A draft is always 480p, this field does not apply to it.

    Type: StringAllowed values: 480p720pDefault: "720p"
    durationOptional

    Does not apply: the clip comes out as long as your video.

    Type: IntegerMinimum: 4Maximum: 30Default: 5
    generate_audioOptional

    Generate sound together with the video.

    Type: BooleanDefault: true
    channelOptional

    Which channel the generation goes through: the model is the same, the price and the checks differ. Channel 1 is the usual one and accepts photos of people. Channel 2 is usually cheaper, but it rejects photos of real people and prohibited subjects, and it has no online search. With a video as input Channel 2 has a price floor that grows with the length of the clip, so with a short video it can cost more. A refusal of a channel is not charged.

    Type: StringAllowed values: channel_1channel_2Default: "channel_1"
    draftOptional

    Video editing and extension have no draft: leave it false.

    Type: BooleanDefault: false
    video_urlsRequired

    The URL of the video to change. 4 to 30 seconds in version 2.5, up to 15 in the 2.0 family. It is @video1 in the description.

    Type: List (String, uri)Maximum items: 1
    image_urlsOptional

    Photo reference URLs: up to 30 in version 2.5, up to 9 in the 2.0 family.

    Type: List (String, uri)Maximum items: 30
    audio_urlsOptional

    Audio reference URLs: up to 10 in version 2.5, up to 3 in the 2.0 family. Audio only together with a photo or a video.

    Type: List (String, uri)Maximum items: 10

    Parameters not listed here are not accepted: the response is 422 unknown_setting.

    The API sets these settings itself, do not send them: files_as_is = true

    Input

    • The video is a URL of a file (MP4, MOV): in version 2.5 up to 200 MB and no longer than 30 seconds, in the 2.0 family up to 50 MB and no longer than 15 seconds. At least 4 seconds, 24 to 60 frames per second and at least 407,696 pixels per frame (for example 640×640 or 480×854).
    • Pictures are URLs of JPEG, PNG, WEBP, BMP, TIFF, GIF files up to 30 MB each, sides from 300 to 6,000 pixels.
    • Audio files are URLs of WAV, MP3 files up to 15 MB each: in version 2.5 from 2 to 30 seconds and no longer than 30 all together, in the 2.0 family from 2 to 15 seconds and no longer than 15 all together.
    • The 2.0 family takes no more than 12 files of all kinds together.
    • The video goes to the model as is and whole: to use another piece, trim the file beforehand. The price follows the length of the video: the new clip has as many seconds, and the input video adds as many again, a part of a second counts as a whole one.
    • We learn the video length for the price by downloading the video from its URL, so the URL must point straight at the file, without redirects, and serve it quickly. Otherwise the price cannot be calculated and the task is not accepted.
    • In the description your video is @video1, and photos and audio go in the order of their URLs: @image1, @audio1 and so on.
    FieldAcceptsFormatsFilesFile size up to
    video_urlsVideomp4, mov1200 MB
    image_urlsImagesjpeg, jpg, png, webp, bmp, tiff, gif3030 MB
    audio_urlsAudiowav, mp31015 MB
    How to send files

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    Replace an object in a video

    JSON
    {
      "model": "seedance",
      "settings": {
        "mode": "video_edit",
        "prompt": "Замени красный кораблик в @video1 на жёлтую резиновую уточку",
        "video_urls": [
          "https://example.com/boat.mp4"
        ],
        "model": "seedance_2_fast"
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • MP4 video.
    • Generation usually takes a few minutes, longer for long clips and high quality.
    • A clip of the same length and shape as your video. In version 2.5 the length matches the video exactly, in the 2.0 family it is rounded up to a whole second.
    KindFormatsHow manyNote
    videomp41

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    Video extension

    The model continues your video with a new part of the chosen length, after the video or before it. Two clips come back: the new part and the same part joined with your video.

    Value of the mode field: video_extend

    This page is about Seedance 2.0 Fast: send model = seedance_2_fast. Without the model field the task runs on seedance_2_5.

    Price in this mode from 34 ₽, with a 2 s file.

    Parameters

    Model parameters go inside settings. Omitted optional fields take their default values.

    promptRequired

    What happens in the new part: 3 to 20,000 characters, several languages are supported. Also write that the video should be extended, and in which direction.

    Type: StringMinimum characters: 1Maximum characters: 20000
    modelOptional

    Version. 2.5 is the newest and makes clips up to 30 seconds, Pro 2.0 is the only one with 4K, Fast 2.0 is fast, Mini 2.0 is the cheapest.

    Type: StringAllowed values: seedance_2_fastDefault: "seedance_2_5"
    qualityOptional

    Video quality; the price depends on it. 1080p is available in 2.5 and Pro 2.0, 4K only in Pro 2.0. A draft is always 480p, this field does not apply to it.

    Type: StringAllowed values: 480p720pDefault: "720p"
    durationOptional

    Length of the new part in seconds: 4 to 30 in version 2.5, up to 15 in the 2.0 family. The price is per second, and the seconds of your video are added to it.

    Type: IntegerMinimum: 4Maximum: 30Default: 5
    generate_audioOptional

    Generate sound together with the video.

    Type: BooleanDefault: true
    channelOptional

    Which channel the generation goes through: the model is the same, the price and the checks differ. Channel 1 is the usual one and accepts photos of people. Channel 2 is usually cheaper, but it rejects photos of real people and prohibited subjects, and it has no online search. With a video as input Channel 2 has a price floor that grows with the length of the clip, so with a short video it can cost more. A refusal of a channel is not charged.

    Type: StringAllowed values: channel_1channel_2Default: "channel_1"
    draftOptional

    Video editing and extension have no draft: leave it false.

    Type: BooleanDefault: false
    video_urlsRequired

    The URL of the video to extend. 2 to 30 seconds in version 2.5, up to 15 in the 2.0 family. It is @video1 in the description.

    Type: List (String, uri)Maximum items: 1
    extend_directionOptional

    Which side of your video to join the new part to: forward after the video, backward before it. The model takes the direction from the description, so state it there too.

    Type: StringAllowed values: forwardbackwardDefault: "forward"
    image_urlsOptional

    Photo reference URLs: up to 30 in version 2.5, up to 9 in the 2.0 family.

    Type: List (String, uri)Maximum items: 30
    audio_urlsOptional

    Audio reference URLs: up to 10 in version 2.5, up to 3 in the 2.0 family. Audio only together with a photo or a video.

    Type: List (String, uri)Maximum items: 10

    Parameters not listed here are not accepted: the response is 422 unknown_setting.

    The API sets these settings itself, do not send them: files_as_is = true

    Input

    • The video is a URL of a file (MP4, MOV): in version 2.5 up to 200 MB and no longer than 30 seconds, in the 2.0 family up to 50 MB and no longer than 15 seconds. At least 2 seconds, 24 to 60 frames per second and at least 407,696 pixels per frame (for example 640×640 or 480×854).
    • Pictures are URLs of JPEG, PNG, WEBP, BMP, TIFF, GIF files up to 30 MB each, sides from 300 to 6,000 pixels.
    • Audio files are URLs of WAV, MP3 files up to 15 MB each: in version 2.5 from 2 to 30 seconds and no longer than 30 all together, in the 2.0 family from 2 to 15 seconds and no longer than 15 all together.
    • The 2.0 family takes no more than 12 files of all kinds together.
    • The model takes the direction from the description: write that the video should be extended and what happens next, or for an extension backward write "extend backward" and what happened before the start. extend_direction only sets which side of your video we join the new part to.
    • On Channel 1 only version 2.5 can extend a video: for the 2.0 family choose Channel 2.
    • The video goes to the model as is and whole: to use another piece, trim the file beforehand. The seconds of your video are added to the length of the new part in the price, a part of a second counts as a whole one. On Channel 2 the price is not below a floor that grows with the length of the part.
    • We learn the video length for the price by downloading the video from its URL, so the URL must point straight at the file, without redirects, and serve it quickly. Otherwise the price cannot be calculated and the task is not accepted.
    • In the description your video is @video1, and photos and audio go in the order of their URLs: @image1, @audio1 and so on.
    FieldAcceptsFormatsFilesFile size up to
    video_urlsVideomp4, mov1200 MB
    image_urlsImagesjpeg, jpg, png, webp, bmp, tiff, gif3030 MB
    audio_urlsAudiowav, mp31015 MB
    How to send files

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    What happened next

    JSON
    {
      "model": "seedance",
      "settings": {
        "mode": "video_extend",
        "prompt": "Продли @video1: кораблик проплывает под мостиком и скрывается за поворотом",
        "video_urls": [
          "https://example.com/boat.mp4"
        ],
        "duration": 5,
        "channel": "channel_2",
        "model": "seedance_2_fast"
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • MP4 video.
    • Generation usually takes a few minutes, longer for long clips and high quality.
    • The new part comes first, then the same part joined with your video on the extend_direction side. The joined clip has the frame size of the new part, the sound of your video is kept.
    • If joining fails, only the new part comes, with an explanation in texts. The price is the same: the part is ready.
    KindFormatsHow manyNote
    videomp41The new part.
    videomp40 or 1Your video and the new part as one clip. Absent if joining fails.

    result.texts: An explanation if joining fails.

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [
          "Text of the result, for example lyrics"
        ],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          },
          {
            "index": 1,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/1"
          }
        ]
      }
    }
    How to read the result and download files

    See also

    Try Seedance 2.0 Fast through the API

    One key opens every CyHUB model. Payment in rubles, and you see the price before the run.

    Get an API key