Перейти до документації
На цій сторінці

Seedance 2.0

Генеруйте відео за допомогою Seedance 2.0, використовуючи текст, перший та останній кадри або мультимодальні референси. На цій сторінці описано повний робочий процес від запиту до результату для цієї моделі.

ID моделі в API: seedance-2-0

Генерація виконується асинхронно. Збережіть taskId, отриманий під час створення завдання, а потім перевіряйте його статус або налаштуйте отримання вебхуку.

Можливості

ФункціяДопустимі значення
Роздільна здатність відео480p · 720p · 1080p · 4k
Тривалість відео4–15 секунд
Співвідношення сторін16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Референсні зображенняДо 9 зображень
Референсні відеоДо 3 відео
Референсні аудіофайлиДо 3 аудіофайлів
Усі референси разомЗагалом до 12 допоміжних файлів
Загальна тривалість на групу відео/аудіо15 секунд
seed-1 до 4294967295

Тарифи та кредити

Оплата за генерацію відео здійснюється в кредитах відповідно до тарифікованої тривалості в секундах. Якщо вихідне відео не завантажувалося, тарифікується лише тривалість створеного відео. Якщо вихідне відео використовувалося, до тарифікованого часу також додається тривалість референсного відео.

У таблиці нижче наведено тарифи в кредитах за секунду, а не повну вартість завдання. Тариф залежить від моделі, роздільної здатності створеного відео, а також використання референсних відео в режимі «відео за референсом». Формули та приклади розрахунку повної вартості наведено під таблицею.

Роздільна здатність відеоБез референсного відеоЗ референсним відео
480p6 кред./с4 кред./с
720p12 кред./с8 кред./с
1080p30 кред./с20 кред./с
4k70 кред./с40 кред./с
  • Без референсного відео: тривалість готового відео в секундах × тариф без відео.
  • З референсним відео: (тривалість готового відео + фактична тривалість референсного відео в секундах) × тариф із відео. Сервер вимірює загальну тривалість референсного відео та округлює її в більшу сторону до цілих секунд перед списанням.
  • Використання лише зображень або аудіо як референсів тарифікується за тарифом без відео. Тариф із відео застосовується лише в режимі генерації за референсом, якщо вхідні дані містять референсні відео.

Приклади розрахунку вартості

Текст у відео (5 секунд, 720p): 5 × 12 = 60 кредитів.

Готове відео 5 секунд (720p) із референсним відео тривалістю 5 секунд: (5 + 5) × 8 = 80 кредитів.

Кредити резервуються під час надсилання запиту і списуються у разі успіху. Завдання, що завершилися помилкою або скасовані через таймаут, повертають кредити на баланс. Статус billing_status зі значенням refund_failed означає, що повернення не завершилося; перевірте логи API або зверніться до підтримки.

Автентифікація

Створіть ключ API у панелі керування. Повний ключ відображається лише один раз. Зберігайте його на своєму сервері та надсилайте як Bearer-токен у кожному запиті.

Базовий URL

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Задайте змінну середовища SEEVIO_API_KEY перед запуском цих прикладів. Приклади на JavaScript виконуються на вашому сервері за допомогою Node.js; приклади на Python використовують бібліотеку requests.

Швидкий старт

Надішліть цей мінімальний запит, збережіть отриманий taskId, а потім використайте приклад запиту статусу, наведений нижче. Значення credits у відповіді на створення — це зарезервована сума кредитів.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Приклад відповіді на запит створення завдання

Після успішного прийняття запиту API повертає таку відповідь у форматі JSON. Параметр taskId — це унікальний ідентифікатор завдання, який використовується для подальшої перевірки статусу; credits — це кількість кредитів, зарезервованих для виконання цього завдання. Ця відповідь лише підтверджує створення завдання, але не означає, що відео вже готове. Щоб отримати готовий відеоролик, потрібно періодично опитувати статус завдання або налаштувати Webhook.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 60
}

Створення завдання

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

Надішліть об’єкт JSON, що містить назву моделі (model) та вхідні дані (input), а також необов’язковий callback_url. Завжди вказуйте точний ID моделі, наведений на цій сторінці; якщо поле model пропущено, автоматично вибирається seedance-2-0.

Тіло запиту

ПолеТипОбов’язковоОпис та обмеження
model
stringТак

Ідентифікатор моделі. Щоб використовувати Seedance 2.0, установіть для цього поля значення seedance-2-0.

callback_url
stringНі

Публічна адреса HTTPS для отримання POST-запитів про завершення роботи або помилку. Приватні мережі та localhost не підтримуються.

Приклад: https://example.com/webhooks/seevio
input
objectТак

Налаштування генерації. Має містити непусті вказівки (prompt).

Вхідні параметри

Поле image_urls є обов’язковим для image-to-video. Для reference-to-video потрібен принаймні один референс серед image_urls, video_urls або audio_urls.

Укажіть image_urls, video_urls та audio_urls у вигляді масивів рядків URL (string[]). Кожна надана URL-адреса має бути загальнодоступною через протокол HTTPS, включно з медіафайлами, які ігноруються у вибраному режимі.

ПолеТипОбов’язковоЗа замовчуваннямОпис та обмеження
input.prompt
stringТак

Для кожного режиму обов’язково потрібно вказати промпт. Він має містити щонайбільше 10000 символів (без урахування пробілів на початку й у кінці) і не може складатися лише з пробілів.

Приклад: A cat surfing at sunset
input.generation_type
stringНіtext-to-video

text-to-video використовує лише текстовий prompt; image-to-video — 1–2 зображення; reference-to-video — референси зображень, відео та/або аудіо.

Допустимі значення
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Залежно від умов[]

image-to-video: 1 зображення для першого кадру або 2 впорядковані зображення для першого та останнього кадрів. reference-to-video: до 9 зображень. Ігнорується в text-to-video.

Приклад: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Залежно від умов[]

Передається лише в режимі reference-to-video; сумарно до 3 відео та 15 секунд. Ігнорується в інших режимах.

Приклад: ["https://example.com/source.mp4"]
input.audio_urls
string[]Залежно від умов[]

Передається лише в режимі reference-to-video; сумарно до 3 аудіофайлів та 15 секунд. Ігнорується в інших режимах. Для цієї моделі аудіо не можна використовувати як єдине опорне джерело. Разом з audio_urls необхідно також надати принаймні одне опорне зображення в image_urls або один опорний відеоролик у video_urls.

Приклад: ["https://example.com/music.mp3"]
input.duration
integerНі5

Ціле число тривалості готового відео від 4 до 15 секунд.

Допустимі значення
4–15
Приклад: 5
input.aspect_ratio
stringНіadaptive

Співвідношення сторін готового відео. Значення adaptive дозволяє моделі визначити його самостійно.

Допустимі значення
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Приклад: adaptive
input.resolution
stringНі720p

Використовуйте одну з підтримуваних роздільних здатностей готового відео, наведених тут.

Допустимі значення
480p | 720p | 1080p | 4k
Приклад: 720p
input.generate_audio
booleanНіtrue

Запит на генерацію синхронізованого аудіо.

Допустимі значення
true | false
Приклад: true
input.watermark
booleanНіfalse

Запит на накладання водяного знака ШІ на згенероване відео.

Допустимі значення
true | false
Приклад: false
input.web_search
booleanНіfalse

Дозволити вебпошук, якщо модель підтримує цю функцію.

Допустимі значення
true | false
Приклад: false
input.return_last_frame
booleanНіfalse

Запит на отримання фінального кадру. Результат запиту міститиме data.last_frame_url, коли кадр буде готовий; в іншому випадку значення буде null.

Допустимі значення
true | false
Приклад: true
input.seed
integerНі-1

Ціле число від -1 до 4294967295. Значення -1 вибирає випадковий seed.

Допустимі значення
-1 до 4294967295
Приклад: 42

Логічні поля мають містити JSON-значення true або false, а не рядки чи числа.

Відповідь на створення

HTTP 200 повертає taskId (рядок) та credits (число). Це підтверджує створення завдання, але не його завершення. Значення нижче відповідає 5-секундному відео 720p зі швидкого старту.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 60
}

Режими генерації та приклади

Замініть адреси медіафайлів example.com на власні загальнодоступні HTTPS-файли. Приклади URL-адрес наведено лише для ілюстрації структури запиту, вони не є тестовими файлами для завантаження.

Текст у відео

Генерація з текстової підказки. Посилання на медіафайли в цьому режимі не обробляються.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Перший кадр

Передайте одне зображення як перший кадр, а потім опишіть рух у текстовому prompt.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Перший та останній кадри

Передайте два URL-посилання на зображення по порядку: спочатку перший кадр, потім останній. Цей приклад також запитує останній кадр готового відео.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg",
      "https://example.com/last-frame.jpg"
    ],
    "aspect_ratio": "adaptive",
    "return_last_frame": true
  }
}'

Мультимодальні референси

Комбінуйте зображення, відео та аудіореференси. Текстовий prompt залишається обов’язковим. Вхідне референсне відео змінює формулу розрахунку вартості.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/camera.mp4"
    ],
    "audio_urls": [
      "https://example.com/ambience.mp3"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Запит статусу завдання

GET https://api.seevio.ai/v1/tasks/{taskId}

Замініть ID з прикладу на taskId, отриманий під час створення. Запити повертають лише ті завдання, які належать користувачеві ключа API; до невідомих або недоступних ID повертається помилка HTTP 404.

Для початку опитуйте статус кожні 10–20 секунд, за умов помилки HTTP 429 збільшуйте інтервал і зупиняйтеся, коли статус зміниться на completed або failed. Для продакшену краще використовувати вебхуки. Кожен приклад коду нижче виконує один запит.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
СтатусОпис та обмеження
queuedПрийнято й очікує на запуск.
generatingГенерація триває.
completedУспішно завершено. Завантажте файли з data.results до закінчення терміну дії.
failedПомилка виконання. Перевірте failed_reason та billing_status.
ПолеТипОпис та обмеження
idstring
Ідентифікатор завдання. Це taskId з відповіді на створення.
created_atnumber
Час створення завдання в секундах Unix.
modelstring
Публічний ID моделі, використаний для цього завдання.
billing_statusstring
Статус оплати: reserved, charged, refunded або refund_failed.
creditsnumber
Кредити, зарезервовані для цього завдання. Це значення зберігається після повернення коштів; перевіряйте billing_status для визначення остаточного статусу розрахунку.
failed_reasonstring | null
Причина помилки для неуспішних завдань; в інших випадках — null. Відповіді на запити для неуспішних завдань не містять об’єкта data.
dataobject
Міститься у запитах успішних завдань. Передає результат та деталі обробки.
data.resultsstring[]
Масив URL-адрес готових відео. Порожній до завершення або після закінчення терміну зберігання відео.
data.video_expires_atstring | null
Термін дії посилання на відео у форматі ISO 8601 або null, якщо воно ще не готове. Збережіть результат до настання цього часу.
data.last_frame_urlstring | null
URL-адреса останнього кадру, якщо він був запрошений і готовий; в іншому випадку — null.
data.processing_timenumber | null
Час обробки провайдером у секундах (якщо доступно), інакше — null.

Завершене завдання: відповідь на запит із результатами відео

Коли запит повертає статус status=completed, це означає, що генерацію відео завершено. Отримайте URL-адреси відео з масиву data.results і завантажте їх до настання часу, вказаного у data.video_expires_at. Значення billing_status=charged вказує на те, що зарезервовані кредити було списано.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "completed",
  "billing_status": "charged",
  "credits": 60,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Помилка виконання завдання: відповідь на запит із деталями збою та оплати

Коли запит повертає статус status=failed, це означає, що генерація завершилася помилкою. Причину збою вказано в полі failed_reason, а результат повернення коштів — у billing_status. У цьому прикладі статус refunded означає, що кредити було повернено. У полі credits залишається початкова зарезервована сума, а об'єкт data у відповіді відсутній.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "failed",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}

Вебхуки

Вкажіть callback_url у запиті на створення, щоб отримувати POST-запит JSON після успішного виконання або помилки завдання. Поверніть відповідь 2xx протягом 15 секунд. У разі невдалої доставки запити повторюються; налаштуйте ідемпотентну обробку повторних запитів за ID завдання.

Ваша кінцева точка зворотного виклику (callback endpoint) має приймати запити POST із тілом запиту у форматі JSON (Content-Type: application/json).

Створення завдання з вебхуком

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Дані вебхуку відрізняються від відповіді на запит статусу: вони не містять billing_status та credits; деталі помилки передаються в data.failed_reason та data.credits_refunded. Значення created_at у вебхуці — це час створення події в секундах Unix.

Завдання виконано: дані успішного зворотного виклику

У разі успішної генерації зворотний виклик містить status=completed. Використовуйте id для ідентифікації завдання, а дані з data.results — для отримання посилань на відео. Завантажте та збережіть результати до настання часу, вказаного в data.video_expires_at.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "completed",
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Помилка завдання: дані зворотного виклику про збій

Якщо генерація завершилася збоєм, зворотний виклик містить status=failed. Використовуйте id для ідентифікації завдання, data.failed_reason для отримання причини збою та data.credits_refunded для перевірки кількості повернених кредитів.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-0",
  "status": "failed",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}

Приклад обробника

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData.data;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Цей приклад для Next.js зчитує тіло зворотного виклику в JSON та безпосередньо обробляє успішно виконані й невдалі завдання. Додайте у свій додаток збереження даних та дедуплікацію за ID завдань; додавайте тривалі процеси в чергу, перш ніж підтверджувати отримання зворотного виклику.

Вимоги до медіафайлів та обмеження

  • Усі URL-адреси медіа та вебхуків мають бути публічними HTTPS-посиланнями. Уникайте localhost, приватних IP-адрес та файлів, що потребують файлів cookie чи авторизації. Посилання на референсні відео/аудіо мають вести безпосередньо на файли.
  • У режимі reference-to-video надайте хоча б один референс. Разом допускається не більше 9 зображень, 3 відео, 3 аудіофайлів та 12 матеріалів загалом. Загальна тривалість відео та аудіо не повинна перевищувати 15 секунд для кожної групи.
  • Режим text-to-video ігнорує всі медіареференси. Режим image-to-video обробляє лише зображення першого/останнього кадру та ігнорує відео та аудіо. Використовуйте reference-to-video для поєднання різних типів медіа.
  • Для моделей Seedance 2.0 використовуйте аудіо разом із щонайменше одним зображенням або відео для сумісності з моделлю. Приклади лише з аудіо доступні на сторінці Seedance 2.5.

Вимоги до зображень

  • Розмір кожного зображення не повинен перевищувати 30 МБ.
  • Підтримувані формати: jpeg, png, webp, bmp, tiff, gif.
  • Співвідношення сторін (ширина ÷ висота): від 0,4 до 2,5 включно.
  • Ширина й висота мають бути в межах від 300 до 6 000 пікселів включно.

Вимоги до відео

  • Підтримувані формати: mp4, mov.
  • Розмір кожного відео не повинен перевищувати 100 МБ.
  • Частота кадрів: від 24 до 60 кадрів/с включно.
  • Співвідношення сторін (ширина ÷ висота): від 0,4 до 2,5 включно.
  • Загальна кількість пікселів (ширина × висота): від 407 696 до 8 295 044 включно. Наприклад, 614 × 664 = 407 696 та 3 326 × 2 494 = 8 295 044. Це лише приклади кількості пікселів, а не жорсткі вимоги до ширини й висоти.

Вимоги до аудіо

  • Підтримувані формати: wav, mp3.
  • Розмір кожного аудіофайлу не повинен перевищувати 15 МБ.

Помилки

Помилки HTTP містять об’єкт error із кодом (code) та повідомленням (message). Завдання, успішно прийняте в роботу, все одно може завершитися помилкою згодом; опитуйте статус або обробляйте вебхук про помилку.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPПолеЩо робити
400invalid_request
Виправте структуру JSON, додайте prompt, перевірте ліміти параметрів або URL-адреси медіа перед повторною спробою.
401invalid_api_key
Перевірте Bearer-токен та переконайтеся, що ключ API активний.
402insufficient_credits
Поповніть баланс або зменште вартість завдання. Відповідь може містити необхідну та доступну кількість кредитів.
403forbidden
Перевірте обмеження на рівні облікового запису, описані в повідомленні про помилку.
404not_found
Перевірте ID завдання та переконайтеся, що ключ належить користувачеві, який створив це завдання.
429rate_limited
Зачекайте інтервал, указаний у Retry-After, перед повторним запитом.
500internal_error
Перевірте повідомлення про помилку та логи API. Повторюйте запити обережно: повторне надсилання запиту на створення може створити ще одне платне завдання.

Ліміти запитів

Створення завдань: за замовчуванням для кожного ключа API дозволено до 100 запитів на хвилину. Індивідуальні ліміти запитів наразі недоступні.

Запити щодо завдань: за замовчуванням для кожного ключа API дозволено до 120 запитів на хвилину. Запити на отримання інформації та запити на створення завдань враховуються окремо.

Помилка HTTP 429 містить заголовок Retry-After: 60 для створення завдань та Retry-After: 5 для запитів статусу. Використовуйте експоненційне збільшення інтервалів та уникайте занадто частого опитування.