Seedance API
Інтегруйте генерацію відео у свій продукт за допомогою Seedance 2.5 або Seedance 2.0, асинхронних завдань, вебхуків та тарифікації з урахуванням кредитів.
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_ для робочого (production) трафіку.
Використовуйте ключі sk_test_ для тестування інтеграції в пісочниці за тими ж правилами API.
Якщо ключ відсутній, недійсний або відкликаний, повертається помилка 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 із промптом і налаштуваннями генерації.
/v1/videos/generationscurl 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, щоб генерувати відео з роздільною здатністю 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-video | prompt | duration, aspect_ratio, resolution, seed | Тільки текстовий промпт. Параметри image_urls, video_urls та audio_urls не потрібні. |
image-to-video | prompt + масив image_urls (1-2 посилання на зображення) | duration, aspect_ratio, resolution, seed | Параметр image_urls має бути масивом. Вкажіть 1 URL зображення для першого кадру або 2 URL для першого й останнього кадрів. Відео та аудіо ігноруються. |
reference-to-video | prompt + принаймні один референс (зображення, відео або аудіо) | зображення, відео та аудіо в межах лімітів на матеріали | 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 секунд на групу відео/аудіо
Підтримувані комбінації вхідних даних
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-video | text-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 | Ні | 5 | Seedance 2.5: 4-30 секунд. Seedance 2.0: 4-15 секунд. | усі | 5 |
input.aspect_ratioСпіввідношення сторін вихідного відео. Значення adaptive дозволяє сервісу автоматично підібрати оптимальний формат. Режим зображення-у-відео в Seedance 2.5 підтримує лише варіант adaptive. | string | Ні | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | усі | 16:9 |
input.resolutionРівень роздільної здатності вихідного відео. | string | Ні | 720p | Seedance 2.5: 480p | 720p. Seedance 2.0: 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Чи повертати URL останнього кадру, коли він доступний. | boolean | Ні | false | true | 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_request | 400 | Параметри запиту відсутні або недійсні. | Ні, виправте параметри запиту. |
invalid_api_key | 401 | API-ключ відсутній, недійсний або відкликаний. | Ні, використовуйте дійсний ключ. |
insufficient_credits | 402 | Недостатньо кредитів. Завдання не прийнято до обробки. | Після поповнення балансу. |
forbidden | 403 | У API-ключа недостатньо прав (відсутній потрібний scope). | Ні. |
not_found | 404 | Завдання не існує або не належить власнику цього API-ключа. | Ні. |
rate_limited | 429 | Перевищено ліміт частоти запитів. | Так, орієнтуйтеся на Retry-After. |
internal_error | 500 | Внутрішня помилка сервера. | Так, повторіть спробу пізніше. |
Ліміти запитів
Ліміти запитів застосовуються до кожного API-ключа за принципом рухомого вікна. Для генерації стандартний ліміт становить 100 запитів на хвилину; для запитів статусу діють лояльніші правила. Відповіді зі статусом HTTP 429 містять заголовок Retry-After.
Генерація
100/хв
Запити статусу
Більш лояльні ліміти
Заголовок 429
Retry-After
Оплата та кредити
API працює за схемою: резервування під час надсилання, списання в разі успіху та повернення коштів у разі помилки. На сторінках використання в панелі керування доступні історія витрат кредитів API, логи завдань та статистика використання за часом.
Зарезервовано
Кредити перевіряються та резервуються в момент прийняття завдання до черги.
Списано
Успішно завершені завдання списують кошти з раніше створеного резерву.
Повернено
Якщо завдання завершилося помилкою або таймаутом, зарезервовані кредити автоматично повертаються на баланс.
Аналіз використання в панелі керування
Переглядайте логи API, хронологію виконання завдань, історію балансу та метрики використання за часовими інтервалами.