Перейти к документации
На этой странице

Kling 4.0

Генерируйте видео с помощью Kling 4.0, используя текстовые промпты, первый и последний кадры или мультимодальные референсы. На этой странице описан весь рабочий процесс — от запроса до получения результата.

ID модели в API: kling-4-0

Генерация выполняется асинхронно. Сохраните taskId, возвращаемый при создании задачи, а затем запрашивайте её статус или настройте получение вебхуков.

Возможности

ФункцияДопустимые значения
Разрешение видео720p · 1080p
Длительность видео3–30 s
Соотношение сторонauto, 16:9, 9:16, 1:1, 21:9
Референсные изображенияДо 10 изображений
Референсные видеоДо 5 видео
Референсные аудиофайлыДо 3 аудиофайлов
Все референсы вместеВсего до 15 справочных файлов
Референсные видео (Σ)30 сек.
seedНе поддерживается

Тарифы и кредиты

Списание кредитов за генерацию видео происходит на основе тарифицируемой длительности в секундах. Без использования исходного видео тарифицируется только длительность готового ролика. При наличии исходного видео в расчет также включается длительность референсного видео.

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

Разрешение видеоБез видео на входеС видео на входе
720p13 кредита/сек8 кредита/сек
1080p20 кредита/сек13 кредита/сек
  • Без видео на входе: секунд на выходе × тариф без видео.
  • При наличии входного видео T — измеренная сервером суммарная длительность видеореференсов в секундах. Итоговое число кредитов округляется вверх. ceil((duration + max(duration, T)) × rate)
  • Использование только изображений или аудио в качестве референсов тарифицируется по тарифу без видео. Тариф с видео применяется только в режиме reference-to-video при наличии референсных видеороликов.

Примеры расчёта стоимости

5 секунд генерации текста в видео (720p): 5 × 13 = 65 кредитов.

5 секунд видео на выходе (720p) с 5-секундным референсным видео: (5 + 5) × 8 = 80 кредитов.

Кредиты резервируются в момент отправки запроса и списываются при успешном завершении. Задачи, завершившиеся ошибкой или по таймауту, отправляются на возврат. Статус биллинга refund_failed означает, что возврат не был завершён; проверьте логи API или обратитесь в поддержку.

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

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

Базовый URL

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Задайте переменную окружения SEEVIO_API_KEY перед запуском этих примеров. Примеры на JavaScript выполняются на стороне сервера с помощью Node.js; примеры на Python используют библиотеку requests.

Быстрый старт

Отправьте этот минимальный запрос, сохраните полученный taskId, а затем используйте пример запроса статуса ниже. Значение credits в ответе на создание задачи — это зарезервированная сумма.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video"
  }
}'

Пример ответа при создании задачи

После того как вышеуказанный запрос будет принят, API вернет этот ответ в формате JSON. Параметр taskId представляет собой идентификатор задачи, используемый для последующих запросов ее статуса; credits — это количество кредитов, зарезервированных для выполнения данной задачи. Этот ответ подтверждает лишь создание задачи, а не готовность видео. Чтобы получить готовый видеофайл, вам необходимо периодически опрашивать статус задачи или использовать Webhook.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 65
}

Создание задачи

POST https://api.seevio.ai/v1/videos/generations

Отправьте объект JSON, содержащий модель (model) и входные данные (input), а также необязательный callback_url. Всегда указывайте идентификатор модели, указанный на этой странице. Если модель не указана, по умолчанию выбирается seedance-2-0.

Тело запроса

ПолеТипОбязательноеОписание и ограничения
model
stringДа

ID модели. Чтобы использовать Kling 4.0, укажите в этом поле kling-4-0.

callback_url
stringНет

Публичный HTTPS-эндпоинт для POST-запросов о завершении или ошибке задачи. Локальные (localhost) и приватные сети не поддерживаются.

Пример: https://example.com/webhooks/seevio
input
objectДа

Входные параметры

Входные параметры

ПолеТипПо умолчаниюОписание и ограничения
input.generation_typestringtext-to-videotext-to-video | image-to-video | reference-to-video
input.promptstring—До 8000 символов. Описание необязательно только при генерации по изображению. Ссылки нумеруются по типу в порядке массива начиная с @Image1, @Video1 и @Audio1.
input.durationinteger53–30 s
input.resolutionstring720p720p | 1080p
input.aspect_ratiostringЗависит от режима
Допустимые значенияauto16:99:161:121:9

Явно заданное соотношение определяет формат результата. Если поле пропущено или указано auto, при генерации по тексту используется 16:9, а по изображению — пропорции первого кадра. В режиме референсов формат определяется по исходным изображениям или видео.

input.image_urlsstring[][]Для генерации по изображению передайте первый кадр и при необходимости последний. В режиме референсов можно передать до 10 изображений.
input.keyframe_urlsstring[][]Промежуточные кадры по порядку для генерации по изображению. До 9 без последнего кадра или 8 с ним.
input.video_urlsstring[][]Только для режима референсов. Передайте HTTPS-ссылки на видео, движения персонажей или камеры из которых нужно использовать как образец. До 5 роликов по 2–30 секунд, суммарно не более 30 секунд.
input.audio_urlsstring[][]Только для режима референсов. Передайте HTTPS-ссылки на аудиозаписи, которые послужат образцом для голоса или звука. До 3 записей по 5–30 секунд каждая.
input.keep_original_soundbooleanfalseЕсли в video_urls есть видео, true сохраняет его исходный звук, а false (по умолчанию) создаёт новый. Без видеореференса параметр игнорируется.

Ответ при создании

HTTP 200 возвращает taskId (строку) и credits (число). Это подтверждает только создание задачи, а не её выполнение. Указанная ниже сумма соответствует 5-секундному видео 720p из раздела «Быстрый старт».

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 65
}

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

Замените демонстрационные медиа-URL example.com своими собственными публично доступными HTTPS-файлами. Примеры URL служат лишь для демонстрации структуры запроса и не являются скачиваемыми ресурсами.

Текст в видео

Генерация по текстовому промпту. Медиа-URL в этом режиме не передаются.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video"
  }
}'

Первый кадр

Передайте одно изображение в качестве первого кадра, а затем опишите движение в промпте.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first.jpg"
    ]
  }
}'

Первый и последний кадры

Для генерации по изображению передайте первый кадр и при необходимости последний. В режиме референсов можно передать до 10 изображений.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first.jpg",
      "https://example.com/last.jpg"
    ]
  }
}'

Пример с ключевыми кадрами: раскрытие розы

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

Замените демонстрационные медиа-URL example.com своими собственными публично доступными HTTPS-файлами. Примеры URL служат лишь для демонстрации структуры запроса и не являются скачиваемыми ресурсами.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A time-lapse of a rose opening. Keep the camera still and the light soft as the petals unfold.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/rose-bud.jpg",
      "https://example.com/rose-full-bloom.jpg"
    ],
    "keyframe_urls": [
      "https://example.com/rose-opening.jpg",
      "https://example.com/rose-half-open.jpg"
    ]
  }
}'

Мультимодальный референс

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

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "Animate @Image1 with the movement of @Video1 and ambience from @Audio1.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/motion.mp4"
    ],
    "audio_urls": [
      "https://example.com/surf.mp3"
    ],
    "keep_original_sound": false
  }
}'

Запрос статуса задачи

GET https://api.seevio.ai/v1/tasks/{taskId}

Замените ID в примере на taskId, полученный при создании. Запросы возвращают только те задачи, которые принадлежат владельцу API-ключа; недоступные или несуществующие ID возвращают HTTP 404.

Для начала делайте запросы каждые 10–20 секунд, увеличивайте интервал при получении HTTP 429 и прекращайте опрос, когда статус изменится на completed или failed. Для продакшена рекомендуется использовать вебхуки. Каждый пример кода ниже выполняет один запрос.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
СтатусОписание и ограничения
queuedПринято и ожидает отправки на генерацию.
generatingВыполняется генерация.
completedУспешно завершено. Скачайте файлы из data.results до истечения срока их хранения.
failedОшибка выполнения. Изучите failed_reason и billing_status.
ПолеТипОписание и ограничения
idstring
Идентификатор задачи. Соответствует taskId из ответа на запрос создания.
created_atnumber
Время создания задачи в формате Unix timestamp (в секундах).
modelstring
ID публичной модели, использованной для этой задачи.
billing_statusstring
Статус биллинга: reserved, charged, refunded или refund_failed.
creditsnumber
Кредиты, зарезервированные под задачу. Это значение сохраняется и после возврата средств; проверяйте billing_status для определения итогового списания.
failed_reasonstring | null
Причина ошибки для невыполненных задач; в противном случае null. Ответы на запросы по ошибочным задачам не содержат объект data.
dataobject
Присутствует в успешных запросах статуса задачи. Содержит результат и детали обработки.
data.resultsstring[]
Массив URL-адресов видео. Пуст до завершения генерации или после истечения срока хранения видео.
data.video_expires_atstring | null
Срок хранения видео в формате ISO 8601 (или null, если видео ещё не готово). Сохраните результат до наступления этого времени.
data.last_frame_urlstring | null
URL последнего кадра, если он был запрошен и доступен, в противном случае null.
data.processing_timenumber | null
Время выполнения задачи в секундах (если доступно, в противном случае — null).

Успешное выполнение: ответ на запрос с готовым видео

Когда запрос возвращает status=completed, генерация видео завершена. Ссылки на видеофайлы можно получить из data.results — скачайте их до наступления времени, указанного в data.video_expires_at. Значение billing_status=charged означает, что зарезервированные кредиты были списаны.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "kling-4-0",
  "is_draft": false,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 65,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Ошибка выполнения: ответ на запрос со сведениями об ошибке и оплате

Если запрос возвращает status=failed, генерация завершилась неудачно. Причину ошибки можно узнать в failed_reason, а статус возврата средств — в billing_status. В данном примере значение refunded означает, что кредиты были возвращены на баланс. При этом в credits отображается изначально зарезервированная сумма, а блок data в ответе отсутствует.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "kling-4-0",
  "is_draft": false,
  "draft_task_id": null,
  "status": "failed",
  "billing_status": "refunded",
  "credits": 65,
  "failed_reason": "provider_failed"
}

Вебхуки

Укажите callback_url в запросе на создание задачи, чтобы получать POST-запросы с JSON-телом при завершении или ошибке задачи. Возвращайте ответ со статусом 2xx в течение 15 секунд. В случае неудачной доставки попытки повторяются; обрабатывайте повторные доставки идемпотентно по ID задачи.

Ваша конечная точка (endpoint) для обратного вызова должна принимать POST-запросы с телом запроса в формате JSON (Content-Type: application/json).

Создание задачи с вебхуком

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video"
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Задача выполнена: структура успешного ответа (callback payload)

При успешной генерации вебхук возвращает статус status=completed. Используйте id для идентификации задачи, а массив data.results — для получения URL-адресов видео. Скачайте и сохраните результаты до наступления времени, указанного в data.video_expires_at.

created_at — время создания события, task_created_at — время создания задачи, в секундах Unix. Примеры показывают рекомендуемые поля; ответ может содержать дополнительные поля.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "kling-4-0",
  "status": "completed",
  "task_created_at": 1788652800,
  "billing_status": "charged",
  "credits": 65,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Ошибка выполнения задачи: структура ответа при сбое

Если генерация завершилась ошибкой, вебхук возвращает статус status=failed. Используйте id для идентификации задачи, failed_reason — для выяснения причины сбоя, а credits_refunded — для проверки количества возвращенных кредитов.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "kling-4-0",
  "status": "failed",
  "task_created_at": 1788652800,
  "billing_status": "refunded",
  "credits": 65,
  "failed_reason": "provider_failed",
  "credits_refunded": 65
}

Пример обработчика (receiver)

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

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

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

В этом примере для Next.js показано, как считывать JSON-тело вебхука и обрабатывать успешно выполненные и проваленные задачи. Для интеграции в продакшн добавьте сохранение данных в БД и дедупликацию по task-ID, а ресурсоемкие фоновые задачи отправляйте в очередь перед отправкой ответа на вебхук.

Требования и ограничения для медиа

  • Все URL-адреса медиафайлов и вебхуков должны использовать протокол HTTPS и быть публично доступными. Избегайте localhost, приватных IP-адресов и файлов, требующих cookie или авторизации. URL-адреса референсных видео и аудио должны вести непосредственно на читаемые файлы.
  • Размер каждого файла не должен превышать 100 МБ.
  • Размер каждого файла не должен превышать 15 МБ.
  • Всего до 15 справочных файлов