Seedance 2.0 API
Встройте генерацию видео в ваш продукт с помощью асинхронного создания задач, опроса статуса, веб-хуков и оплаты на основе кредитов.
https://api.seedance2.aiНа этой странице
Введение
API позволяет программно отправлять задачи генерации видео Seedance 2.0. Генерация асинхронна: создайте задачу, немедленно получите идентификатор задачи, затем получите готовое видео, опрашивая конечную точку задачи или получая веб-хук.
Асинхронные задачи
Опрос хорошо работает для разработки и простых интеграций.
Поддержка веб-хуков
Веб-хуки рекомендуются для продакшена, потому что они избегают агрессивного опроса и уведомляют ваш сервис, когда задача достигает конечного состояния.
Учет кредитов
Кредиты резервируются при отправке. Успешные задачи оплачиваются из этого резерва; неудачные или истекшие по времени задачи автоматически возвращаются.
Аутентификация
Создайте ключ API на панели управления и отправляйте его как токен Bearer в каждом запросе. Полный ключ отображается только один раз при создании.
Authorization: Bearer sk_live_xxxxxxxxИспользуйте ключи sk_live_ для продакшен-трафика.
Используйте ключи sk_test_ для тестирования интеграции в песочнице с тем же API-контрактом.
Отсутствующие, недействительные или отозванные ключи возвращают invalid_api_key с HTTP 401.
Быстрый старт
Сначала отправьте задачу. После принятия задачи выберите один из методов получения результата: опросите конечную точку задачи или получите окончательный результат через веб-хук.
Создайте асинхронную видеозадачу и немедленно получите идентификатор задачи.
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"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,
"seed": -1
}
}'Получайте данные из конечной точки статуса задачи, если ваша интеграция предпочитает явный опрос.
curl https://api.seedance2.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, содержащий prompt и параметры генерации.
/v1/videos/generationscurl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"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,
"seed": -1
}
}'Режимы генерации
generation_type контролирует, какие медиавходы принимаются и как модель их интерпретирует.
| Режим | Обязательные медиа | Необязательные медиа | Примечания |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Только текстовая подсказка. image_urls, video_urls и audio_urls не нужны. |
image-to-video | prompt + массив image_urls (1-2 URL изображения) | duration, aspect_ratio, resolution, seed | image_urls должен быть массивом. Укажите 1 URL изображения для первого кадра или 2 URL изображения для первого и последнего кадров. Видео и аудио игнорируются. |
reference-to-video | prompt + хотя бы одно изображение или видео | изображения, видео и аудио в пределах ограничений по материалам | Аудио не может использоваться отдельно с текстом. Добавьте хотя бы одно изображение или видео, если предоставляется аудио. |
text-to-videoИспользуйте text-to-video, когда подсказка является единственным творческим входом.
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"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,
"seed": -1
}
}'image-to-videoИспользуйте image-to-video, когда input.image_urls представляет собой массив из 1-2 URL-адресов изображений: один URL задает первый кадр, а два URL задают первый и последний кадры. Ссылки на видео и аудио игнорируются в этом режиме.
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"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Используйте reference-to-video для более богатого направления с эталонными изображениями, видео и аудио. Аудио не может использоваться отдельно с текстом; включите хотя бы одно изображение или видео, если предоставляется аудио.
Ограничения материалов
- До 9 эталонных изображений
- До 3 эталонных видео, общая продолжительность <= 15 секунд
- До 3 эталонных аудио, общая продолжительность <= 15 секунд
- Максимум 12 материалов всех типов
Поддерживаемые комбинации входов
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"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": "1080p"
}
}'Параметры запроса
Имена параметров, значения перечислений, пути к конечным точкам и примеры являются частью контракта API. Описания ниже объясняют поведение каждого поля.
Заголовки
| Заголовок | Обязательно | Описание | Пример |
|---|---|---|---|
Authorization | Да | Ключ API Bearer, используемый для аутентификации запроса. | Bearer sk_live_xxx |
Content-Type | Да | Все запросы на запись используют JSON. | application/json |
Поля верхнего уровня
| Поле | Тип | Обязательно | По умолчанию | Диапазон / Перечисление | Режимы | Пример |
|---|---|---|---|---|---|---|
modelВариант модели, используемый для генерации. | string | Да | - | seedance-2-0 | seedance-2-0-fast | все | seedance-2-0 |
callback_urlКонечная точка HTTPS, которая получает обратные вызовы о завершении и сбое задачи. | string | Нет | - | HTTPS URL, без частных сетей | все | https://your-domain.com/hook |
inputНастройки генерации и ссылки на медиа. | object | Да | - | - | все | - |
input.* поля
| Поле | Тип | Обязательно | По умолчанию | Диапазон / Перечисление | Режимы | Пример |
|---|---|---|---|---|---|---|
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Публично доступные URL-адреса изображений. Для image-to-video отправьте 1 изображение для первого кадра или 2 изображения для первого и последнего кадров. Для reference-to-video отправьте до 9 изображений в качестве визуальных ссылок. | string[] | Условно | [] | Image-to-video: 1 или 2 изображения. Reference-to-video: до 9 изображений. (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsПублично доступные эталонные видео только для reference-to-video. Вы можете отправить до 3 видеофайлов, и их общее время воспроизведения должно составлять 15 секунд или меньше. | string[] | Нет | [] | До 3 видео. Общая продолжительность видео должна составлять 15 секунд или меньше. | reference-to-video | [] |
input.audio_urlsПублично доступные эталонные аудиофайлы только для reference-to-video. Вы можете отправить до 3 аудиофайлов, и их общее время воспроизведения должно составлять 15 секунд или меньше. | string[] | Нет | [] | До 3 аудиофайлов. Общая продолжительность аудио должна составлять 15 секунд или меньше. | reference-to-video | [] |
input.durationДлительность выходного видео в секундах. | int | Нет | 5 | 4-15 секунд | все | 5 |
input.aspect_ratioСоотношение сторон выходного видео. adaptive позволяет сервису определить наилучшее соотношение. | string | Нет | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | все | 16:9 |
input.resolutionУровень разрешения выходного видео. | string | Нет | 720p | 480p | 720p | 1080p | все | 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Детерминированное зерно. Используйте -1 для случайного зерна. | int | Нет | -1 | -1 или 0-4294967295 | все | -1 |
Кредиты зависят от разрешения, продолжительности, модели и того, включает ли reference-to-video ссылки на видео. Значение кредитов, возвращаемое ответом создания, является фактически зарезервированной суммой для этой задачи.
Посмотреть стоимость кредитовОтвет
Это ответ об успешном выполнении POST /v1/videos/generations. Это означает, что задача принята и кредиты зарезервированы. Используйте возвращенный taskId для опроса GET /v1/tasks/:id или для сопоставления обратного вызова о завершении или сбое.
Ответ об успешном выполнении POST /v1/videos/generations
{
"taskId": "3f2aK9mR...",
"credits": 60
}Получить статус задачи
Используйте GET /v1/tasks/:id для получения текущего состояния задачи. Опрашивайте не чаще одного раза в 10 секунд. Для производственных систем предпочтительны веб-хуки.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Ответ завершенной задачи
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "charged",
"credits": 60,
"failed_reason": null,
"data": {
"results": ["https://cdn.seedance2.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-0",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}| Значение | Значение |
|---|---|
status=queued | Принята и ожидает отправки или обработки. |
status=generating | Провайдер обрабатывает генерацию. |
status=completed | Видео завершено и data.results содержит URL результата. |
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 раз. Повторные попытки используют тот же идентификатор задачи, поэтому удаляйте дубликаты по идентификатору. Возвращайте ответ 200, как только вы надежно записали данные обратного вызова.
Обратный вызов о завершении задачи
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"data": {
"results": ["https://cdn.seedance2.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-0",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 60
}
}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 });
}Проверьте формат данных обратного вызова, удалите дубликаты по идентификатору, обновите свою запись задачи и быстро ответьте.
callback_url должен быть HTTPS и не должен указывать на частные, обратные или локальные сетевые диапазоны.
Ошибки
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": 60,
"available": 12
}
}| Код | HTTP | Значение | Повторить? |
|---|---|---|---|
invalid_request | 400 | Отсутствующие или неверные параметры. | Нет, исправьте запрос. |
invalid_api_key | 401 | Ключ API отсутствует, недействителен или отозван. | Нет, используйте действительный ключ. |
insufficient_credits | 402 | Недостаточно кредитов. Задача не принимается или не оплачивается. | После пополнения. |
forbidden | 403 | Ключу API не хватает необходимой области действия. | Нет. |
not_found | 404 | Задача не существует или не принадлежит владельцу ключа. | Нет. |
rate_limited | 429 | Превышена скорость запросов. | Да, следуйте Retry-After. |
internal_error | 500 | Ошибка сервера. | Да, повторите позже. |
Ограничения скорости запросов
Ограничения скорости запросов применяются к каждому ключу API с использованием скользящего окна. Генерация по умолчанию составляет 60 запросов в минуту; запросы состояния более лояльны. Ответы HTTP 429 включают Retry-After.
Генерация
60/min
Запросы состояния
Более лояльно
Заголовок 429
Retry-After
Оплата и кредиты
API использует резервирование при отправке, списание при успехе и возврат при сбое. Страницы использования панели управления показывают историю кредитов API, журналы задач и статистику использования по времени.
Зарезервировано
Кредиты проверяются и резервируются при принятии задачи.
Списано
Завершенные задачи урегулируют существующую резервацию.
Возвращено
Неудачные или истекшие по времени задачи автоматически возвращают зарезервированные кредиты.
Просмотр использования на панели управления
Просмотр журналов API, временных шкал задач, истории кредитов и метрик использования по времени.