KovAPIKovAPI
POST https://kovapi.com/v1/videos/generations

Генерация видео Seedance 2.0 Mini (асинхронно): начальный уровень — самый дешёвый по цене за секунду на сайте; длительность — любое целое число от 5 до 15 секунд, разрешение 480P / 720P (по умолчанию 720P), пять соотношений сторон, audio включает/выключает звуковую дорожку (по умолчанию true); для режима изображение в видео укажите image. Возвращает job id (HTTP 202); опрашивайте GET /v1/videos/jobs/{id}. Оплата посекундная (секунды референсных видео тоже учитываются), при ошибке — полный возврат.

Попробовать в песочнице →

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

Header
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Чтобы начать, создайте API-ключ в консоли.

Тело запроса

ПараметрТипОбязательныйОписание
model string Да Идентификатор модели, здесь seedance-2.0-mini.
prompt string Да Текстовый промпт с описанием видео, камеры и движения. Не более 5000 байт (UTF-8; китайский иероглиф занимает 3 байта). Если референсных изображений несколько, к ним можно обращаться в промпте как @Image1 / @Image2, например «персонаж с @Image1 в сцене с @Image2»; без таких меток модель решает сама.
duration integer Нет Длительность в секундах — любое целое число от 5 до 15 (по умолчанию 5); псевдоним seconds. Оплата по секундам.
resolution string Нет Разрешение: 480P / 720P (по умолчанию 720P; у каждого уровня своя цена — см. страницу модели).
size string Нет Соотношение сторон: 16:9 / 9:16 / 1:1 / 4:3 / 3:4 (по умолчанию 16:9); псевдоним aspect_ratio.
audio boolean Нет Каждый ролик выходит со звуком (диалоги, эффекты и музыка создаются по промпту); отключить его нельзя, false ни на что не влияет.
image string Нет Одно референсное изображение (публичный URL, data: URI или base64) — модель получает его как референс для персонажей, объектов, сцены или стиля; для нескольких используйте images. Управления первым кадром у модели нет, поэтому изображение не обязательно откроет ролик. Без референсов это text-to-video.
images array Нет Несколько референсных изображений — для этой модели до 9. Каждый элемент — публичный URL, data: URI или base64. Превышение лимита отклоняется, а не обрезается. Псевдоним: reference_images. Каждое изображение до 16 МБ, jpg / png / webp / gif; в промпте обращайтесь к ним по порядку: @Image1, @Image2, ...
image_role string Нет Необязательный. Референсные изображения всегда используются как референс (персонажи, сцена, стиль) и указываются в промпте как @Image1…; управления первым и последним кадром у модели нет.
audio_reference string / array Нет Публичные ссылки http(s) на референсное аудио, до 3. Передаётся только вместе с референсным изображением или видео; псевдоним audio_references (не передавайте оба). Можно и base64 (data:audio/mpeg;base64,...), mp3 / wav / m4a; в промпте обращайтесь к нему как @Audio1.
video_references array Нет Референсные видео, до 3. Каждое — публичная ссылка http(s) или локальный файл, переданный прямо в запросе как base64 (data:video/mp4;base64,..., mp4 / mov, до 50 МБ каждый); мы размещаем его у себя и передаём ссылку провайдеру. Можно передавать вместе с референсными изображениями в одном запросе (например, фото задают внешность персонажей, а видео — движение и камеру); в промпте обращайтесь к ним как @Image1 / @Video1. Каждое видео не длиннее 30 с, суммарно не более 15 с; размещённые у нас референсы хранятся 7 дн.

Пример запроса

cURL
# 1) submit -> 202 {"id":"img_...","status":"queued"}
curl https://kovapi.com/v1/videos/generations -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' -d '{"model": "seedance-2.0-mini", "prompt": "a cat surfing a wave at sunset", "duration": 5, "resolution": "720P", "size": "16:9"}'
# with references: add "images": ["https://example.com/a.png"], "video_references": ["https://example.com/move.mp4"], "audio_reference": ["https://example.com/bgm.mp3"] and name them @Image1 / @Video1 / @Audio1 in the prompt
# 2) poll every ~5s until status=succeeded, then read data[0].url
curl https://kovapi.com/v1/videos/jobs/img_3f9a...c2 -H 'Authorization: Bearer YOUR_API_KEY'

Ответ

200 · JSON
{
  "id": "img_3f9a...c2",
  "object": "video.generation.job",
  "status": "queued",
  "model": "seedance-2.0-mini"
}

Асинхронная видеозадача (отправка → опрос)

Отправка запроса сразу возвращает HTTP 202 и id задачи; опрашивайте, пока status не станет succeeded, и считайте data[0].url (ссылку на mp4). Допустимые значения duration, resolution и size — в таблице параметров выше; для варианта «изображение в видео» добавьте параметр image.

curl · отправка (текст в видео)
curl https://kovapi.com/v1/videos/generations -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' -d '{"model": "seedance-2.0-mini", "prompt": "кот занимается сёрфингом на закате", "size": "16:9"}'
С референсами: images (референсные изображения), video_references (референсные видео) и audio_reference (референсное аудио) можно передать вместе в одном запросе — публичные URL, data: URI или base64; в промпте укажите их как @Image1 / @Video1 / @Audio1. Референсные изображения задают объект, сцену и стиль, а не первый кадр.
Реальные человеческие лица подходят в качестве референсных изображений, маскирование не требуется. Пожалуйста, убедитесь, что у вас есть право использовать внешность людей, изображённых на фото.
Пример ответа
{ "id": "img_3f9a...c2", "object": "video.generation.job", "status": "queued", "model": "seedance-2.0-mini" }
curl · опрос
curl https://kovapi.com/v1/videos/jobs/img_3f9a...c2 -H 'Authorization: Bearer YOUR_API_KEY'
Пример ответа
{
  "id": "img_3f9a...c2",
  "object": "video.generation.job",
  "status": "succeeded",
  "model": "seedance-2.0-mini",
  "data": [{ "url": "https://img.kovapi.com/i/9f86d081a8....mp4" }]
}

🕑 data[0].url — это ссылка на наш хостинг изображений; она хранится 15 дней, а затем автоматически удаляется. Чтобы продолжать использовать изображение, скачайте его и сохраните в своём хранилище или CDN.

Тарификация посекундная ($0.046/s x duration); резерв в точности равен итоговому списанию, а неудачный или прерванный по тайм-ауту рендер автоматически возвращается в полном объёме.

Не хотите опрашивать статус? Добавьте callback_url при отправке задачи — по её завершении мы отправим результат на ваш сервер. Или задайте адрес по умолчанию в консоли. Документация по вебхукам →

Требования к контенту

Каждая задача Seedance проходит проверку контента: промпт, файлы-референсы и готовый ролик — и изображение, и звук. Задача, не прошедшая проверку, завершается с content_policy, деньги не списываются.

Когда идёт проверка

При отправке проверяются промпт и референсы; после генерации ролика ещё раз проверяются изображение и звук. Поэтому отказ может прийти через несколько секунд после отправки или только после окончания рендера (это может занять больше получаса). Задача, завершившаяся со status failed и error.code content_policy, не прошла проверку; с вебхуком придёт событие video.failed.

Без оплаты

Отклонённая задача ничего не стоит: сумма, зарезервированная при отправке, полностью возвращается по завершении задачи, а в журнале вызовов она отмечена как неоплаченная.

Звук

Звук (реплики, закадровый текст, пение и эффекты) модель генерирует по промпту, и он проверяется вместе с изображением: реплики, закадровый текст и тексты песен из промпта озвучиваются или поются. Если в ролике не нужны голоса, не пишите в промпте реплики и тексты песен. Эта модель всегда добавляет звук, отключить его нельзя: audio: false ни на что не влияет. Загруженное аудио-референс тоже проверяется; музыка, защищённая авторским правом, в качестве референса может быть отклонена. Если не прошёл звук, error.param равен audio, а в message сказано, был ли это сгенерированный звук или ваше аудио-референс.

Что чаще всего отклоняется

  • Сексуальный контент, обнажённость или сексуальные намёки, в том числе изображения, созданные или смонтированные с помощью ИИ
  • Кровь, жестокость, самоповреждение и насильственные травмы, например огнестрельные ранения и кровотечение
  • Огнестрельное оружие, взрывчатка и наркотики
  • Любой сексуализированный контент с несовершеннолетними; несовершеннолетние рядом с алкоголем, табаком, наркотиками или в опасных ситуациях тоже отклоняются
  • Политики, знаменитости, спортсмены, бизнесмены и другие публичные лица — внешность или голос, включая двойников
  • Персонажи и объекты, защищённые авторским правом, например персонажи Disney или Marvel
  • Контент с ненавистью или дискриминацией, фейковые новости

Длинные сценарии

Одна сцена с нарушением отклоняет весь ролик, и чаще всего это случается в длинных раскадровочных сценариях: перестрелка или крупный план крови в экшен-сцене, несовершеннолетние, которые пьют или курят, — и весь ролик не пройдёт. Перед отправкой прочитайте сценарий целиком и удалите или перепишите такие сцены.

Реальные люди

Чтобы использовать фото реального человека как референс, нужно право на использование его изображения; принимает ли модель такие референсы, указано выше на этой странице.

После отказа

Повторная отправка того же самого снова будет отклонена. Найдите часть, которая скорее всего нарушает правила, перепишите промпт или замените референс и отправьте заново.

Код ошибки: content_policy · status: failed

Коды ошибок

У всех ошибок одна структура: error.message / error.type / error.code / error.param; ориентируйтесь на code. Ниже — самые частые ошибки; полный список — в разделе Коды ошибок.

HTTPcodeОписание
401invalid_api_keyНет ключа, или он недействителен либо отключён (missing_api_key, invalid_api_key).
402insufficient_quotaНедостаточно средств или ключ исчерпал свой бюджет (insufficient_quota).
400invalid_requestНеверный параметр или неизвестная модель (например, model_not_found); error.param указывает на поле.
—content_policyНе прошло проверку контента: промпт, референс или сгенерированные изображение или звук признаны нарушением. Деньги не списаны; то же самое будет отклонено снова, поэтому перепишите промпт или замените референс. Для видеозадач возвращается в error, когда status равен failed.
429rate_limit_exceededПревышен лимит запросов в минуту для этого ключа или дневная квота бесплатной модели, либо модель загружена до предела (rate_limit_exceeded). Подождите столько секунд, сколько указано в Retry-After, а если его нет — несколько секунд, и повторите.
502upstream_*Ошибка или таймаут на стороне поставщика, и автоматические повторы не помогли; причина в code, например upstream_timeout или upstream_unavailable. Запрос не оплачивается, его можно повторить.

Полный список кодов ошибок →