Seedance API

Интегрируйте генерацию видео в свой продукт с помощью моделей Seedance 2.5 и Seedance 2.0, асинхронных задач, вебхуков и тарификации на основе кредитов.

Базовый URL
https://api.seevio.ai
Содержание

Введение

API позволяет программно отправлять задачи на генерацию видео для моделей Seedance 2.5 и Seedance 2.0. Seedance 2.5 — рекомендуемая модель, поддерживающая генерацию текста в видео, изображения в видео (по первому кадру или по первому и последнему кадрам), а также мультимодальные референсы. Генерация выполняется асинхронно: вы создаете задачу, мгновенно получаете её ID, а затем забираете готовое видео через поллинг эндпоинта задачи или с помощью вебхука.

Асинхронные задачи

Поллинг (опрос статуса) отлично подходит для разработки и простых интеграций.

Поддержка вебхуков

Вебхуки рекомендуются для использования в продакшене, так как они избавляют от необходимости частого опроса и автоматически уведомляют ваш сервис, когда задача переходит в финальный статус.

Контроль баланса

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

Аутентификация

Создайте 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": "1080p",
      "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. Тело запроса должно содержать корневое поле model, необязательный 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": "1080p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'

Режимы генерации

Параметр generation_type определяет, какие медиафайлы принимаются на вход и как модель должна их интерпретировать.

Возможности Seedance 2.5
seedance-2-5

Задайте значение seedance-2-5 для параметра model, чтобы создавать видео с разрешением 480p, 720p или 1080p длительностью от 4 до 30 секунд.

  • Текст-в-видео с поддержкой соотношений сторон: адаптивное (adaptive), 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 URL изображений)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": "1080p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
image-to-video

Используйте режим изображение-в-видео, если массив input.image_urls содержит от 1 до 2 URL-адресов изображений: один URL задает первый кадр, два URL задают первый и последний кадры. Референсные видео и аудио в этом режиме игнорируются.

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Нет-HTTPS-URL, без приватных подсетейвсе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

Доступные из интернета URL-адреса изображений. В режиме image-to-video передайте 1 изображение для первого кадра или 2 изображения для первого и последнего кадров. В режиме reference-to-video Seedance 2.5 принимает до 30 изображений, а Seedance 2.0 — до 9.

string[]Зависит от условий[]Изображение-в-видео: 1 или 2 изображения. Референс-в-видео: до 30 для Seedance 2.5; до 9 для Seedance 2.0.image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Доступные из интернета референсные видео (только для режима reference-to-video). 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 секунд.reference-to-video[]
input.audio_urls

Доступные из интернета референсные аудиофайлы (только для режима reference-to-video). 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 секунд.reference-to-video[]
input.duration

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

intНет5Seedance 2.5: 4–30 секунд. Seedance 2.0: 4–15 секунд.все5
input.aspect_ratio

Соотношение сторон готового видео. Значение adaptive позволяет сервису автоматически подобрать оптимальное соотношение. Режим image-to-video в модели 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 | 1080p. 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Генерация успешно завершена, URL готового видео доступен в 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 и не должен указывать на приватные IP-адреса, 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-ключа недостаточно прав для этого действия.Нет.
not_found404Задача не существует или принадлежит другому пользователю.Нет.
rate_limited429Превышена частота запросов.Да, учитывая заголовок Retry-After.
internal_error500Внутренняя ошибка сервера.Да, повторите попытку позже.

Лимиты запросов

Лимиты на количество запросов применяются к каждому API-ключу по методу скользящего окна (sliding window). Для генерации стандартный лимит составляет 100 запросов в минуту; для запросов статуса действуют более мягкие ограничения. Ответы с кодом HTTP 429 всегда содержат заголовок Retry-After.

Генерация

100/мин

Запросы статуса

Более мягкие лимиты

Заголовок 429

Retry-After

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

Оплата в API работает по схеме: резервирование при отправке, списание при успешном выполнении и возврат при ошибке. В панели управления в разделе использования доступна история списания кредитов, логи задач и статистика потребления.

Резервирование

Кредиты проверяются и резервируются в момент принятия задачи к исполнению.

Списание

После успешного завершения задачи зарезервированные кредиты окончательно списываются.

Возврат

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

Контроль расходов в панели управления

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

Логи API