Seedance API

Інтегруйте генерацію відео у свій продукт за допомогою Seedance 2.5 або Seedance 2.0, асинхронних завдань, вебхуків та тарифікації з урахуванням кредитів.

Базовий URL
https://api.seevio.ai
На цій сторінці

Вступ

API дозволяє програмно надсилати завдання на генерацію відео для моделей Seedance 2.5 та Seedance 2.0. Рекомендованою моделлю є Seedance 2.5, яка підтримує режими текст-у-відео, зображення-у-відео за першим або першим і останнім кадром, а також мультимодальне відео за референсом. Генерація є асинхронною: ви створюєте завдання, миттєво отримуєте ID завдання, а потім забираєте готове відео шляхом опитування ендпоінту завдання або через вебхук.

Асинхронні завдання

Опитування (polling) чудово підходить для розробки та простих інтеграцій.

Підтримка вебхуків

Вебхуки є рекомендованим варіантом для продакшену, оскільки вони дозволяють уникнути занадто частого опитування та сповіщають ваш сервіс, коли завдання досягає кінцевого стану.

Облік кредитів

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

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

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

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Використовуйте ключі sk_live_ для робочого (production) трафіку.

sk_test_

Використовуйте ключі sk_test_ для тестування інтеграції в пісочниці за тими ж правилами API.

401

Якщо ключ відсутній, недійсний або відкликаний, повертається помилка invalid_api_key з кодом HTTP 401.

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

Спочатку надішліть завдання. Після того як завдання буде прийнято, оберіть один із методів отримання результату: опитуйте ендпоінт статусу завдання або отримайте кінцевий результат через вебхук.

Надіслати завдання

Створіть асинхронне завдання на генерацію відео та миттєво отримайте його ID.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
Спосіб отримання: Опитування

Запитуйте ендпоінт статусу завдання, якщо ваша інтеграція передбачає періодичне опитування.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Спосіб отримання: Вебхук

Передайте callback_url під час надсилання завдання, щоб отримати зворотний виклик про успішне завершення або помилку та оновити запис у своїй системі.

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

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Створити завдання генерації

Створіть завдання генерації відео за допомогою запиту POST /v1/videos/generations. Тіло запиту містить назву моделі на верхньому рівні, необов'язковий параметр callback_url та об'єкт input із промптом і налаштуваннями генерації.

POST
/v1/videos/generations
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'

Режими генерації

Параметр generation_type визначає, які медіафайли приймаються та як модель їх інтерпретує.

Можливості Seedance 2.5
seedance-2-5

Вкажіть модель seedance-2-5, щоб генерувати відео з роздільною здатністю 480p або 720p тривалістю від 4 до 30 секунд.

  • Текст-у-відео з адаптивним співвідношенням сторін або фіксованими форматами: 16:9, 9:16, 1:1, 4:3, 3:4, 21:9
  • Зображення-у-відео з одного початкового кадру або з двох кадрів (першого й останнього); співвідношення сторін має бути адаптивним (adaptive)
  • Відео за референсом із використанням до 30 зображень, 10 відео та 10 аудіофайлів (загалом не більше 50 матеріалів)
  • Кожне референсне відео чи аудіо має тривати 2–30 секунд; сумарна тривалість усіх відео та всіх аудіо окремо не повинна перевищувати 30 секунд
  • Підтримуються референси лише з аудіо та параметр return_last_frame; параметр seed не підтримується
РежимОбов'язкові медіаНеобов'язкові медіаПримітки
text-to-videopromptduration, aspect_ratio, resolution, seedТільки текстовий промпт. Параметри image_urls, video_urls та audio_urls не потрібні.
image-to-videoprompt + масив image_urls (1-2 посилання на зображення)duration, aspect_ratio, resolution, seedПараметр image_urls має бути масивом. Вкажіть 1 URL зображення для першого кадру або 2 URL для першого й останнього кадрів. Відео та аудіо ігноруються.
reference-to-videoprompt + принаймні один референс (зображення, відео або аудіо)зображення, відео та аудіо в межах лімітів на матеріалиSeedance 2.5 підтримує референси, які складаються лише з аудіо. Для Seedance 2.0 додайте щонайменше одне зображення або відео, якщо передаєте аудіо.
text-to-video

Використовуйте режим текст-у-відео, коли текстовий промпт є єдиним джерелом для генерації.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
image-to-video

Використовуйте режим зображення-у-відео, коли масив input.image_urls містить 1-2 посилання на зображення: одне посилання задає перший кадр, а два — перший та останній кадри. Референси відео та аудіо в цьому режимі ігноруються.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "input": {
      "prompt": "the subject turns toward camera, soft studio motion",
      "generation_type": "image-to-video",
      "image_urls": ["https://your.cdn.com/first-frame.jpg"],
      "duration": 5,
      "resolution": "720p"
    }
  }'
reference-to-video

Використовуйте режим відео за референсом для точнішого керування за допомогою референсних зображень, відео та аудіо. Seedance 2.5 дозволяє використовувати лише аудіо як референс; для Seedance 2.0 за наявності аудіо обов'язково потрібне принаймні одне зображення або відео.

Ліміти на матеріали

  • Seedance 2.5: до 30 референсних зображень
  • Seedance 2.5: до 10 референсних відео, кожне тривалістю 2–30 секунд, загальна тривалість <= 30 секунд
  • Seedance 2.5: до 10 референсних аудіофайлів, кожен тривалістю 2–30 секунд, загальна тривалість <= 30 секунд
  • Seedance 2.5: максимум 50 матеріалів сумарно для всіх типів
  • Версії Seedance 2.0 зберігають свої ліміти: 9 зображень, 3 відео, 3 аудіо та до 15 секунд на групу відео/аудіо

Підтримувані комбінації вхідних даних

Текст + Зображення
Текст + Відео
Текст + Аудіо (Seedance 2.5)
Текст + Зображення + Відео
Текст + Зображення + Аудіо
Текст + Відео + Аудіо
Текст + Зображення + Відео + Аудіо
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "input": {
      "prompt": "use the product from image 1 and the camera motion from the reference video",
      "generation_type": "reference-to-video",
      "image_urls": ["https://your.cdn.com/product.jpg"],
      "video_urls": ["https://your.cdn.com/camera-motion.mp4"],
      "audio_urls": [],
      "duration": 8,
      "resolution": "720p"
    }
  }'

Параметри запиту

Назви параметрів, значення enum, шляхи ендпоінтів та приклади є частиною специфікації API. Описи нижче пояснюють логіку роботи кожного поля.

Заголовки

ЗаголовокОбов'язковоОписПриклад
AuthorizationТакТокен API (Bearer) для автентифікації запиту.Bearer sk_live_xxx
Content-TypeТакУсі запити на запис використовують формат JSON.application/json

Поля верхнього рівня

ПолеТипОбов'язковоЗа замовчуваннямДіапазон / EnumРежимиПриклад
model

Версія моделі для генерації. Використовуйте seedance-2-5 для Seedance 2.5, seedance-2-0 для Seedance 2.0, seedance-2-0-fast для Seedance 2.0 Fast або seedance-2-0-mini для Seedance 2.0 Mini.

stringТак-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-miniусіseedance-2-5
callback_url

Ендпоінт HTTPS, який отримує зворотні виклики про завершення або помилку завдання.

stringНі-URL-адреса HTTPS, крім приватних мережусіhttps://your-domain.com/hook
input

Налаштування генерації та посилання на медіаматеріали.

objectТак--усі-

input.* поля

ПолеТипОбов'язковоЗа замовчуваннямДіапазон / EnumРежимиПриклад
input.prompt

Текстовий промпт з описом відео, яке потрібно створити.

stringТак-непорожній текстусіa cat surfing
input.generation_type

Режим генерації. За замовчуванням: text-to-video.

stringНіtext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

Публічно доступні посилання на зображення. Для режиму зображення-у-відео надішліть 1 зображення для першого кадру або 2 для першого та остання кадру. Для генерації за референсом Seedance 2.5 приймає до 30 зображень, а Seedance 2.0 — до 9.

string[]Умовно[]Зображення-у-відео: 1 або 2 зображення. Відео за референсом: до 30 для Seedance 2.5; до 9 для Seedance 2.0.зображення-у-відео / відео за референсом["https://.../a.jpg"]
input.video_urls

Публічно доступні референсні відео (тільки для режиму генерації за референсом). Seedance 2.5 приймає до 10 відео, кожне від 2 до 30 секунд, загальною тривалістю <= 30 секунд. Seedance 2.0 приймає до 3 відео із загальною тривалістю <= 15 секунд.

string[]Ні[]Seedance 2.5: до 10 відео, кожне по 2-30 сек., сумарно <= 30 сек. Seedance 2.0: до 3 відео, сумарно <= 15 сек.відео за референсом[]
input.audio_urls

Публічно доступні референсні аудіофайли (тільки для режиму генерації за референсом). Seedance 2.5 приймає до 10 аудіофайлів, кожен від 2 до 30 секунд, загальною тривалістю <= 30 секунд, і дозволяє використовувати тільки аудіо як референс. Seedance 2.0 приймає до 3 файлів із загальною тривалістю <= 15 секунд.

string[]Ні[]Seedance 2.5: до 10 аудіофайлів, кожен по 2-30 сек., сумарно <= 30 сек. Seedance 2.0: до 3 аудіофайлів, сумарно <= 15 сек.відео за референсом[]
input.duration

Тривалість вихідного відео в секундах.

intНі5Seedance 2.5: 4-30 секунд. Seedance 2.0: 4-15 секунд.усі5
input.aspect_ratio

Співвідношення сторін вихідного відео. Значення adaptive дозволяє сервісу автоматично підібрати оптимальний формат. Режим зображення-у-відео в Seedance 2.5 підтримує лише варіант adaptive.

stringНіadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptiveусі16:9
input.resolution

Рівень роздільної здатності вихідного відео.

stringНі720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (залежно від версії).усі720p
input.generate_audio

Чи повинна модель генерувати аудіосупровід, якщо він підтримується.

booleanНіtruetrue | falseусіtrue
input.watermark

Чи додавати водяний знак на готове відео.

booleanНіfalsetrue | falseусіfalse
input.web_search

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

booleanНіfalsetrue | falseусіfalse
input.return_last_frame

Чи повертати URL останнього кадру, коли він доступний.

booleanНіfalsetrue | falseусіfalse
input.seed

Статичне зерно генерації для версій Seedance 2.0. Модель Seedance 2.5 не підтримує цей параметр, його слід опустити.

intНі-1-1 або від 0 до 4294967295усі-1

Вартість у кредитах залежить від роздільної здатності, тривалості, моделі та наявності відеореференсів у режимі генерації за референсом. Значення credits, яке повертається у відповіді на запит створення, є фактичною зарезервованою сумою для цього завдання.

Переглянути тарифи в кредитах

Відповідь

Це успішна відповідь від POST /v1/videos/generations. Вона означає, що завдання прийнято в чергу, а кредити зарезервовано. Використовуйте повернутий taskId для опитування GET /v1/tasks/:id або для співставлення з даними вебхука про успіх чи помилку.

Успішна відповідь POST /v1/videos/generations

{
  "taskId": "3f2aK9mR...",
  "credits": 100
}

Отримати статус завдання

Використовуйте GET /v1/tasks/:id для отримання поточного стану завдання. Опитуйте ендпоінт не частіше ніж раз на 10 секунд. Для робочих систем рекомендується використовувати вебхуки.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"

Відповідь для завершеного завдання

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": ["https://cdn.seevio.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Відповідь для завдання, що завершилося помилкою

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}
ЗначенняЗначення статусу
status=queuedПрийнято й очікує на відправку або обробку.
status=generatingПровайдер виконує генерацію відео.
status=completedВідео успішно згенеровано, data.results містить посилання на результат.
status=failedГенерація завершилася помилкою або перевищено ліміт часу.
billing_status=reservedКредити зарезервовано на час виконання завдання.
billing_status=chargedЗавдання успішно виконано, зарезервовані кредити списано.
billing_status=refundedЗавдання завершилося помилкою або таймаутом, кредити повернуто.
billing_status=refund_failedПомилка транзакції повернення, потрібне ручне втручання.

Після настання часу video_expires_at об'єкт data.results буде порожнім. Завантажте та збережіть файл до закінчення цього терміну.

Вебхуки

Якщо вказано callback_url, Seedance викличе ваш ендпоінт після завершення завдання або у разі помилки, надіславши JSON-дані з кінцевим результатом. Якщо ваш сервер повертає статус, відмінний від 2xx, або не відповідає протягом 15 секунд, спроба повторюється до 5 разів. Повторні виклики містять той самий task id, тому виконуйте дедуплікацію за цим ідентифікатором. Повертайте відповідь зі статусом 200 одразу після успішного збереження даних зворотного виклику.

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

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "data": {
    "results": ["https://cdn.seevio.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Зворотний виклик про помилку завдання

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 100
  }
}
export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Перевірте структуру даних зворотного виклику, виконайте дедуплікацію за id, оновіть статус у себе в системі та швидко поверніть відповідь.

Параметр callback_url має використовувати протокол HTTPS і не повинен вказувати на приватні, локальні (loopback або link-local) мережеві діапазони.

Помилки

Запити POST /v1/videos/generations та GET /v1/tasks/:id повертають помилку в такому форматі, якщо не вдалося виконати сам запит до API (наприклад, недійсні параметри, некоректний API-ключ, недостатньо кредитів, перевищено ліміт запитів або завдання не знайдено). Деякі помилки містять додаткові поля, такі як required, available або retry_after, залежно від ситуації.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 100,
    "available": 12
  }
}
КодHTTPОписПовторити спробу?
invalid_request400Параметри запиту відсутні або недійсні.Ні, виправте параметри запиту.
invalid_api_key401API-ключ відсутній, недійсний або відкликаний.Ні, використовуйте дійсний ключ.
insufficient_credits402Недостатньо кредитів. Завдання не прийнято до обробки.Після поповнення балансу.
forbidden403У API-ключа недостатньо прав (відсутній потрібний scope).Ні.
not_found404Завдання не існує або не належить власнику цього API-ключа.Ні.
rate_limited429Перевищено ліміт частоти запитів.Так, орієнтуйтеся на Retry-After.
internal_error500Внутрішня помилка сервера.Так, повторіть спробу пізніше.

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

Ліміти запитів застосовуються до кожного API-ключа за принципом рухомого вікна. Для генерації стандартний ліміт становить 100 запитів на хвилину; для запитів статусу діють лояльніші правила. Відповіді зі статусом HTTP 429 містять заголовок Retry-After.

Генерація

100/хв

Запити статусу

Більш лояльні ліміти

Заголовок 429

Retry-After

Оплата та кредити

API працює за схемою: резервування під час надсилання, списання в разі успіху та повернення коштів у разі помилки. На сторінках використання в панелі керування доступні історія витрат кредитів API, логи завдань та статистика використання за часом.

Зарезервовано

Кредити перевіряються та резервуються в момент прийняття завдання до черги.

Списано

Успішно завершені завдання списують кошти з раніше створеного резерву.

Повернено

Якщо завдання завершилося помилкою або таймаутом, зарезервовані кредити автоматично повертаються на баланс.

Аналіз використання в панелі керування

Переглядайте логи API, хронологію виконання завдань, історію балансу та метрики використання за часовими інтервалами.

Логи API