Kling API
Одной моделью делает видео по описанию и по референсам — изображениям и видео. Разрешение 720p, 1080p, соотношение сторон 16:9, 9:16, 1:1, 21:9, на вход до 10 изображений, описание до 8 000 символов. Модель Kuaishou, выпущена 15 октября 2026 года.
Одной моделью делает видео по описанию и по ключевым кадрам — первому, промежуточным и последнему. Разрешение 720p, 1080p, соотношение сторон 16:9, 9:16, 1:1, 21:9, описание до 8 000 символов. Модель Kuaishou, выпущена 15 октября 2026 года.
Kling 4.0 API работает в России без VPN: один API ключ GEN202, оплата рублями с российской карты.
Цена: за секунду, 720p — 48.8 кр. (24,4 ₽ · $0.2218), 1080p — 73 кр. (36,5 ₽ · $0.3318).
Цена: за секунду, 720p — 48.8 кр. (24,4 ₽ · $0.2218), 1080p — 73 кр. (36,5 ₽ · $0.3318).
кр. — кредиты, покупаются за рубли.
работает
работает
Песочница
{ "model": "kling/4-0-reference-to-video", "input": { "prompt": "The ginger cat from @image_1, in a white spacesuit, floats in zero gravity above Earth. It slowly turns its head toward the camera, front paws drifting; sunlight glints across the helmet visor, the blue planet reflected in the glass. The camera eases backwards, revealing a solar panel at the edge of frame. Cinematic, soft rim light, shallow depth of field.", "aspect_ratio": "1:1", "resolution": "720p", "duration": 3, "image_urls": [ "https://gen202.com/assets/sample-nano-banana-pro.jpg" ] } }
{
"code": 200,
"msg": "success",
"data": {
"taskId": "cm8r4t0vk0001s60p2xq7f9ab",
"model": "kling/4-0-reference-to-video",
"state": "success",
"resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
"failCode": "",
"failMsg": "",
"creditsConsumed": 146.4
}
}
{ "model": "kling/4-0-keyframe-to-video", "input": { "prompt": "Ginger cat in a white spacesuit floats in zero gravity above Earth. It slowly turns its head toward the camera, front paws drifting; sunlight glints across the helmet visor, the blue planet reflected in the glass. The camera eases backwards, revealing a solar panel at the edge of frame. Cinematic, soft rim light, shallow depth of field.", "aspect_ratio": "auto", "resolution": "720p", "duration": 3, "first_frame_url": "https://gen202.com/assets/sample-nano-banana-pro.jpg" } }
{
"code": 200,
"msg": "success",
"data": {
"taskId": "cm8r4t0vk0001s60p2xq7f9ab",
"model": "kling/4-0-keyframe-to-video",
"state": "success",
"resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
"failCode": "",
"failMsg": "",
"creditsConsumed": 146.4
}
}
Цена Kling 4.0
Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.
| Вариант | Наша цена |
|---|---|
| 720P with video input | 29.2 кр. $0.132714,6 ₽ |
| 1080P with video input | 43.8 кр. $0.199121,9 ₽ |
| 720P no video input | 48.8 кр. $0.221824,4 ₽ |
| 1080P no video input | 73 кр. $0.331836,5 ₽ |
кр. — кредиты, покупаются за рубли.
Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.
| Вариант | Наша цена |
|---|---|
| 720P | 48.8 кр. $0.221824,4 ₽ |
| 1080P | 73 кр. $0.331836,5 ₽ |
кр. — кредиты, покупаются за рубли.
Вызов через API
Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов
ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда
она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком
Authorization: Bearer sk-… и выпускается
в кабинете. На один ключ шлюз пропускает
30 постановок задачи и 300
запросов состояния в минуту.
Поля запроса
Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне
перечисления возвращают 422 и кредитов не тратят.
| Поле | Тип | Обяз. | Допустимые значения |
|---|---|---|---|
| model | текст | обязательное | kling/4-0-reference-to-video |
| input | объект | обязательное | Параметры генерации — поля из таблицы ниже |
Поля input
| Поле | Тип | Обяз. | Допустимые значения |
|---|---|---|---|
| prompt | текст | обязательное | от 1 до 8 000 символов |
| duration | целое число | опц. | целое от 3 до 30 |
| resolution | значение из списка | опц. | 720p · 1080p |
| aspect_ratio | значение из списка | опц. | auto · 16:9 · 9:16 · 1:1 · 21:9 |
| image_urls | список ссылок | опц. | до 10 ссылок на изображение |
| video_urls | список ссылок | опц. | до 5 ссылок на видео |
| keep_original_sound | да или нет | опц. | true или false |
Поле image_urls. Изображения-референсы: до 10. На них показывают персонажа, лист персонажа или раскадровку; стороны от 300 точек, пропорции от 2:5 до 5:2. В промпте на изображение ссылаются @image_1, @image_2 — по порядку в списке.
Поле video_urls. Видео-референсы: до 5, все вместе — до 30 секунд. Модель берёт с них игру персонажа, действие, движение камеры и темп. В промпте — @video_1, @video_2 по порядку.
Ссылка на исходный файл принимается только полным адресом на http или https: не длиннее 2048 символов, на общедоступном сайте, без имени и пароля перед адресом и без порта, кроме 80 и 443. Относительный путь, а также адреса внутри сети — localhost, 127.0.0.1, 10.0.0.5, 192.168.1.2 — и имена без точки шлюз отклоняет ответом 422, к поставщику не обращаясь.
Ответ
Оба запроса отвечают одним конвертом: {"code":…,"msg":…,"data":…}, где
code повторяет HTTP-статус, а полезное лежит в
data. Тот же конверт приходит и при отказе — разбирать две формы ответа
не нужно.
/api/v1/jobs/createTask
| Поле | Тип | Что в нём |
|---|---|---|
| data.taskId | строка | Номер задачи. Больше в ответе ничего нет и быть не может — работа только началась. |
/api/v1/jobs/recordInfo
| Поле | Тип | Что в нём |
|---|---|---|
| data.taskId | строка | Номер задачи — тот же, что вернул createTask. |
| data.model | строка | Имя модели в том виде, в каком его прислал клиент. |
| data.state | строка | Состояние задачи: waiting, queuing, generating, success или fail. |
| data.param | строка | Параметры, с которыми задача создана, — строкой JSON внутри JSON. |
| data.resultJson | строка | Результат строкой JSON внутри JSON: {"resultUrls":["https://…"]} — разбирается вторым разбором. До завершения задачи — пустая строка. |
| data.failCode | строка | Код неудачи из таблицы ниже. У остальных задач — пустая строка. |
| data.failMsg | строка | Причина неудачи словами модели. Иначе пустая строка. |
| data.failComment | строка | Наш комментарий к словам модели, по-русски: что произошло. Есть не у всякой неудачи; иначе пустая строка. |
| data.costTime | число | Сколько задача заняла, миллисекунды. Пока не завершилась — null. |
| data.completeTime | число | Когда завершилась, миллисекунды эпохи Unix. Пока не завершилась — null. |
| data.createTime | число | Когда создана, миллисекунды эпохи Unix. |
| data.updateTime | число | Когда состояние менялось в последний раз, миллисекунды эпохи Unix. |
| data.creditsConsumed | число | Сколько кредитов списано. Ноль, пока задача не завершилась, и ноль у неудачной. |
Состояния задачи
Состояние лежит в поле state ответа
/api/v1/jobs/recordInfo. Первые три означают, что работа идёт: запрос надо
повторить примерно через 3 секунды — чаще спрашивать нечего, столько же
ждёт между опросами сам шлюз. Два последних состояния окончательные: после них задача не меняется.
| state | Что происходит |
|---|---|
| waiting | Задача принята и стоит в очереди шлюза; поставщику она ещё не отправлена. |
| queuing | Поставщик задачу принял и поставил в свою очередь. |
| generating | Генерация идёт. |
| success | Готово: ссылки на результат лежат в resultJson, в creditsConsumed — сколько списано. |
| fail | Задача не удалась: причина в failCode и failMsg, удержанные кредиты возвращены целиком. |
Задача идёт, пока модель не пришлёт результат или отказ. Причина неудачи приходит двумя полями:
failCode из таблицы ниже и failMsg словами.
| failCode | Что произошло |
|---|---|
| 501 | Поставщик вернул отказ: генерация не удалась. |
| 408 | Модель не приняла задачу за 60 минут или не отвечала сутки. |
| 404 | Поставщик не знает такой задачи. |
| 429 | Поставщик отбил создание задачи по своему лимиту. |
| 500 | Поломка на нашей стороне; подробности остаются в журнале шлюза. |
Слова модели в failMsg бывают непонятны, поэтому к части неудач шлюз
добавляет поле failComment — наш комментарий по-русски о том, что
произошло. У остальных неудач это поле пустое.
| failMsg, пример | failComment |
|---|---|
| Image fetch failed. | Модель не смогла скачать файл из нашего хранилища. Вероятно, это разовый сбой, повторите запрос. Если ошибка повторится — напишите в поддержку: hi@gen202.com |
| File type not supported | По ссылке открывается страница сайта, а не файл. Загрузите сам файл или дайте прямую ссылку на него. |
| image #2: width and height must be between 300px and 6000px (got 262x377) (invalid_asset_material) | Одна из картинок слишком маленькая. Seedance принимает картинки от 300 до 6000 пикселей по каждой стороне. |
| Seedance identified your task as video editing based on your prompt. | Seedance понял запрос как редактирование присланного видео. В песочнице и чате выберите режим «Редактирование видео», в API поставьте пропорции adaptive и длительность −1. |
| Seedance identified your task as video extension based on your prompt. | Seedance решил, что присланное видео нужно продлить. Для этого поставьте пропорции adaptive, а если продлевать не нужно — уберите эту просьбу из промта. |
| generate task timeout. | Модель не успела создать результат и сама остановила задачу. |
| Internal Error | Модель остановилась и не назвала причину. Возможно, она перегружена или временно недоступна. Или запрос отклонён из-за чувствительной темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| The request failed because the input image may contain sensitive information. | Модель отклонила загруженную картинку из-за чувствительной темы. Такие темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| The generated content was filtered by the safety system. | Модель отклонила запрос из-за чувствительной темы. Такие темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| The model provider rejected or dropped the task creation request. | Модель остановилась и не назвала причину. Возможно, она перегружена или временно недоступна. Или запрос отклонён из-за чувствительной темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| No result from the provider within the task deadline. | Модель либо не приняла задачу за 15 минут (у видео — за 60), либо не ответила за сутки. |
Ссылка на готовый файл живёт 14 дней — столько его хранит поставщик. Файл,
который нужен дольше, скачивайте к себе сразу после того, как задача пришла в состояние
success.
Отказы
Тело отказа одно на все случаи: {"code":…,"msg":…,"data":null}. Задача, не
дошедшая до результата, не тарифицируется — удержанные кредиты возвращаются целиком.
| Код | Адрес | Когда |
|---|---|---|
| 400 | /api/v1/jobs/createTask | Тело запроса — не разбираемый JSON. |
| 401 | /api/v1/jobs/createTask | Ключа нет в заголовке Authorization, либо он неверный или отключён. |
| 402 | /api/v1/jobs/createTask | Свободных кредитов меньше, чем удерживается под задачу. |
| 403 | /api/v1/jobs/createTask | Аккаунт заблокирован: вызовы модели, пополнение и загрузка файлов ему закрыты. Ключи при этом не отключены — запрет лежит на аккаунте. |
| 413 | /api/v1/jobs/createTask | Тело запроса больше 512 КиБ. |
| 415 | /api/v1/jobs/createTask | Тело отправлено не как application/json или заголовок Content-Type не передан. |
| 422 | /api/v1/jobs/createTask | Поле model пустое или его имени нет в каталоге, input — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается. Тот же код — если во входе наша ссылка на готовый результат старше 14 дней: файла уже нет, его нужно загрузить заново. И если модель не может выполнить именно это сочетание полей: в сообщении сказано, что поменять, — например, другие файлы-образцы. |
| 429 | /api/v1/jobs/createTask | Больше 30 запросов в минуту на один ключ, больше 50 незавершённых задач на аккаунте либо таймаут: за час 5 запросов к моделям этого вида отклонены из-за чувствительной темы, и запуск всех моделей этого вида приостановлен. У такого отказа в теле есть поле timeout с временем окончания паузы, а в заголовке Retry-After — секунды до него. |
| 500 | /api/v1/jobs/createTask | Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят. |
| 401 | /api/v1/jobs/recordInfo | Ключа нет в заголовке Authorization, либо он неверный или отключён. |
| 404 | /api/v1/jobs/recordInfo | Задачи с таким номером нет или она создана другим аккаунтом. |
| 422 | /api/v1/jobs/recordInfo | Параметр taskId не передан. |
| 429 | /api/v1/jobs/recordInfo | Больше 300 запросов в минуту на один ключ. |
| 500 | /api/v1/jobs/recordInfo | Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят. |
Пример вызова
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
-H "Authorization: Bearer sk-ваш-ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "kling/4-0-reference-to-video",
"input": {
"prompt": "The ginger cat from @image_1, in a white spacesuit, floats in zero gravity above Earth. It slowly turns its head toward the camera, front paws drifting; sunlight glints across the helmet visor, the blue planet reflected in the glass. The camera eases backwards, revealing a solar panel at the edge of frame. Cinematic, soft rim light, shallow depth of field.",
"aspect_ratio": "1:1",
"resolution": "720p",
"duration": 3,
"image_urls": [
"https://gen202.com/assets/sample-nano-banana-pro.jpg"
]
}
}' | jq -r '.data.taskId')
# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
# generating означают «работа идёт», success и fail — окончательные
while true; do
RECORD=$(curl -s "https://api.gen202.com/api/v1/jobs/recordInfo?taskId=$TASK" \
-H "Authorization: Bearer sk-ваш-ключ")
STATE=$(echo "$RECORD" | jq -r '.data.state')
case "$STATE" in success|fail) break;; esac
sleep 3
done
# 3. Забрать результат. Ссылка на файл лежит в resultJson — это строка JSON
# внутри JSON, поэтому её разбирают вторым разбором (fromjson)
echo "$RECORD" | jq -r '.data |
if .state == "fail"
then "отказ \(.failCode): \(.failMsg)"
else .resultJson | fromjson | .resultUrls[0]
end'
import json
import time
import requests
headers = {"Authorization": "Bearer sk-ваш-ключ"}
# 1. Поставить задачу — в ответе придёт её номер
created = requests.post(
"https://api.gen202.com/api/v1/jobs/createTask",
headers=headers,
json={
"model": "kling/4-0-reference-to-video",
"input": {
"prompt": "The ginger cat from @image_1, in a white spacesuit, floats in zero gravity above Earth. It slowly turns its head toward the camera, front paws drifting; sunlight glints across the helmet visor, the blue planet reflected in the glass. The camera eases backwards, revealing a solar panel at the edge of frame. Cinematic, soft rim light, shallow depth of field.",
"aspect_ratio": "1:1",
"resolution": "720p",
"duration": 3,
"image_urls": [
"https://gen202.com/assets/sample-nano-banana-pro.jpg"
]
}
},
).json()
task_id = created["data"]["taskId"]
# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
# generating означают «работа идёт», success и fail — окончательные
while True:
task = requests.get(
"https://api.gen202.com/api/v1/jobs/recordInfo",
headers=headers,
params={"taskId": task_id},
).json()["data"]
if task["state"] in ("success", "fail"):
break
time.sleep(3)
# 3. Разобрать итог. У неудачи причина в failCode и failMsg
if task["state"] == "fail":
raise SystemExit("отказ " + task["failCode"] + ": " + task["failMsg"])
# resultJson — строка JSON внутри JSON, поэтому разбор второй
result = json.loads(task["resultJson"])
print(result["resultUrls"][0])
print("списано кредитов:", task["creditsConsumed"])
Пример проходит весь путь: ставит задачу, повторяет запрос состояния раз в
3 секунды, пока задача не закончится, и разбирает ответ до ссылки
на файл. Разборов два, потому что поле resultJson — строка JSON
внутри JSON. В теле первого запроса стоят обязательные поля модели и значения из её
перечислений, поэтому он проходит проверку шлюза как есть.
Подставить остаётся только свой ключ.
Пример на оболочке разбирает ответ через jq; на Python своего
ничего не нужно, кроме requests.
Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов
ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда
она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком
Authorization: Bearer sk-… и выпускается
в кабинете. На один ключ шлюз пропускает
30 постановок задачи и 300
запросов состояния в минуту.
Поля запроса
Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне
перечисления возвращают 422 и кредитов не тратят.
| Поле | Тип | Обяз. | Допустимые значения |
|---|---|---|---|
| model | текст | обязательное | kling/4-0-keyframe-to-video |
| input | объект | обязательное | Параметры генерации — поля из таблицы ниже |
Поля input
| Поле | Тип | Обяз. | Допустимые значения |
|---|---|---|---|
| prompt | текст | обязательное | от 1 до 8 000 символов |
| duration | целое число | опц. | целое от 3 до 30 |
| resolution | значение из списка | опц. | 720p · 1080p |
| aspect_ratio | значение из списка | опц. | auto · 16:9 · 9:16 · 1:1 · 21:9 |
| first_frame_url | ссылка | опц. | одна ссылка на изображение |
| keyframe_urls | список ссылок | опц. | до 8 ссылок на изображение |
| last_frame_url | ссылка | опц. | одна ссылка на изображение |
Поле keyframe_urls. Промежуточные кадры: до 8, по порядку. Число кадров вместе с первым и последним ограничено длиной видео: 3 секунды — до 4 кадров, 4 секунды — до 5, и так далее. Все 10 кадров можно дать с 9 секунд.
Ссылка на изображение принимается только полным адресом на http или https: не длиннее 2048 символов, на общедоступном сайте, без имени и пароля перед адресом и без порта, кроме 80 и 443. Относительный путь, а также адреса внутри сети — localhost, 127.0.0.1, 10.0.0.5, 192.168.1.2 — и имена без точки шлюз отклоняет ответом 422, к поставщику не обращаясь.
Ответ
Оба запроса отвечают одним конвертом: {"code":…,"msg":…,"data":…}, где
code повторяет HTTP-статус, а полезное лежит в
data. Тот же конверт приходит и при отказе — разбирать две формы ответа
не нужно.
/api/v1/jobs/createTask
| Поле | Тип | Что в нём |
|---|---|---|
| data.taskId | строка | Номер задачи. Больше в ответе ничего нет и быть не может — работа только началась. |
/api/v1/jobs/recordInfo
| Поле | Тип | Что в нём |
|---|---|---|
| data.taskId | строка | Номер задачи — тот же, что вернул createTask. |
| data.model | строка | Имя модели в том виде, в каком его прислал клиент. |
| data.state | строка | Состояние задачи: waiting, queuing, generating, success или fail. |
| data.param | строка | Параметры, с которыми задача создана, — строкой JSON внутри JSON. |
| data.resultJson | строка | Результат строкой JSON внутри JSON: {"resultUrls":["https://…"]} — разбирается вторым разбором. До завершения задачи — пустая строка. |
| data.failCode | строка | Код неудачи из таблицы ниже. У остальных задач — пустая строка. |
| data.failMsg | строка | Причина неудачи словами модели. Иначе пустая строка. |
| data.failComment | строка | Наш комментарий к словам модели, по-русски: что произошло. Есть не у всякой неудачи; иначе пустая строка. |
| data.costTime | число | Сколько задача заняла, миллисекунды. Пока не завершилась — null. |
| data.completeTime | число | Когда завершилась, миллисекунды эпохи Unix. Пока не завершилась — null. |
| data.createTime | число | Когда создана, миллисекунды эпохи Unix. |
| data.updateTime | число | Когда состояние менялось в последний раз, миллисекунды эпохи Unix. |
| data.creditsConsumed | число | Сколько кредитов списано. Ноль, пока задача не завершилась, и ноль у неудачной. |
Состояния задачи
Состояние лежит в поле state ответа
/api/v1/jobs/recordInfo. Первые три означают, что работа идёт: запрос надо
повторить примерно через 3 секунды — чаще спрашивать нечего, столько же
ждёт между опросами сам шлюз. Два последних состояния окончательные: после них задача не меняется.
| state | Что происходит |
|---|---|
| waiting | Задача принята и стоит в очереди шлюза; поставщику она ещё не отправлена. |
| queuing | Поставщик задачу принял и поставил в свою очередь. |
| generating | Генерация идёт. |
| success | Готово: ссылки на результат лежат в resultJson, в creditsConsumed — сколько списано. |
| fail | Задача не удалась: причина в failCode и failMsg, удержанные кредиты возвращены целиком. |
Задача идёт, пока модель не пришлёт результат или отказ. Причина неудачи приходит двумя полями:
failCode из таблицы ниже и failMsg словами.
| failCode | Что произошло |
|---|---|
| 501 | Поставщик вернул отказ: генерация не удалась. |
| 408 | Модель не приняла задачу за 60 минут или не отвечала сутки. |
| 404 | Поставщик не знает такой задачи. |
| 429 | Поставщик отбил создание задачи по своему лимиту. |
| 500 | Поломка на нашей стороне; подробности остаются в журнале шлюза. |
Слова модели в failMsg бывают непонятны, поэтому к части неудач шлюз
добавляет поле failComment — наш комментарий по-русски о том, что
произошло. У остальных неудач это поле пустое.
| failMsg, пример | failComment |
|---|---|
| Image fetch failed. | Модель не смогла скачать файл из нашего хранилища. Вероятно, это разовый сбой, повторите запрос. Если ошибка повторится — напишите в поддержку: hi@gen202.com |
| File type not supported | По ссылке открывается страница сайта, а не файл. Загрузите сам файл или дайте прямую ссылку на него. |
| image #2: width and height must be between 300px and 6000px (got 262x377) (invalid_asset_material) | Одна из картинок слишком маленькая. Seedance принимает картинки от 300 до 6000 пикселей по каждой стороне. |
| Seedance identified your task as video editing based on your prompt. | Seedance понял запрос как редактирование присланного видео. В песочнице и чате выберите режим «Редактирование видео», в API поставьте пропорции adaptive и длительность −1. |
| Seedance identified your task as video extension based on your prompt. | Seedance решил, что присланное видео нужно продлить. Для этого поставьте пропорции adaptive, а если продлевать не нужно — уберите эту просьбу из промта. |
| generate task timeout. | Модель не успела создать результат и сама остановила задачу. |
| Internal Error | Модель остановилась и не назвала причину. Возможно, она перегружена или временно недоступна. Или запрос отклонён из-за чувствительной темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| The request failed because the input image may contain sensitive information. | Модель отклонила загруженную картинку из-за чувствительной темы. Такие темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| The generated content was filtered by the safety system. | Модель отклонила запрос из-за чувствительной темы. Такие темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| The model provider rejected or dropped the task creation request. | Модель остановилась и не назвала причину. Возможно, она перегружена или временно недоступна. Или запрос отклонён из-за чувствительной темы: нагота и откровенные сцены, дети, известные люди, насилие, чужие персонажи и бренды. |
| No result from the provider within the task deadline. | Модель либо не приняла задачу за 15 минут (у видео — за 60), либо не ответила за сутки. |
Ссылка на готовый файл живёт 14 дней — столько его хранит поставщик. Файл,
который нужен дольше, скачивайте к себе сразу после того, как задача пришла в состояние
success.
Отказы
Тело отказа одно на все случаи: {"code":…,"msg":…,"data":null}. Задача, не
дошедшая до результата, не тарифицируется — удержанные кредиты возвращаются целиком.
| Код | Адрес | Когда |
|---|---|---|
| 400 | /api/v1/jobs/createTask | Тело запроса — не разбираемый JSON. |
| 401 | /api/v1/jobs/createTask | Ключа нет в заголовке Authorization, либо он неверный или отключён. |
| 402 | /api/v1/jobs/createTask | Свободных кредитов меньше, чем удерживается под задачу. |
| 403 | /api/v1/jobs/createTask | Аккаунт заблокирован: вызовы модели, пополнение и загрузка файлов ему закрыты. Ключи при этом не отключены — запрет лежит на аккаунте. |
| 413 | /api/v1/jobs/createTask | Тело запроса больше 512 КиБ. |
| 415 | /api/v1/jobs/createTask | Тело отправлено не как application/json или заголовок Content-Type не передан. |
| 422 | /api/v1/jobs/createTask | Поле model пустое или его имени нет в каталоге, input — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается. Тот же код — если во входе наша ссылка на готовый результат старше 14 дней: файла уже нет, его нужно загрузить заново. И если модель не может выполнить именно это сочетание полей: в сообщении сказано, что поменять, — например, другие файлы-образцы. |
| 429 | /api/v1/jobs/createTask | Больше 30 запросов в минуту на один ключ, больше 50 незавершённых задач на аккаунте либо таймаут: за час 5 запросов к моделям этого вида отклонены из-за чувствительной темы, и запуск всех моделей этого вида приостановлен. У такого отказа в теле есть поле timeout с временем окончания паузы, а в заголовке Retry-After — секунды до него. |
| 500 | /api/v1/jobs/createTask | Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят. |
| 401 | /api/v1/jobs/recordInfo | Ключа нет в заголовке Authorization, либо он неверный или отключён. |
| 404 | /api/v1/jobs/recordInfo | Задачи с таким номером нет или она создана другим аккаунтом. |
| 422 | /api/v1/jobs/recordInfo | Параметр taskId не передан. |
| 429 | /api/v1/jobs/recordInfo | Больше 300 запросов в минуту на один ключ. |
| 500 | /api/v1/jobs/recordInfo | Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят. |
Пример вызова
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
-H "Authorization: Bearer sk-ваш-ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "kling/4-0-keyframe-to-video",
"input": {
"prompt": "Ginger cat in a white spacesuit floats in zero gravity above Earth. It slowly turns its head toward the camera, front paws drifting; sunlight glints across the helmet visor, the blue planet reflected in the glass. The camera eases backwards, revealing a solar panel at the edge of frame. Cinematic, soft rim light, shallow depth of field.",
"aspect_ratio": "auto",
"resolution": "720p",
"duration": 3,
"first_frame_url": "https://gen202.com/assets/sample-nano-banana-pro.jpg"
}
}' | jq -r '.data.taskId')
# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
# generating означают «работа идёт», success и fail — окончательные
while true; do
RECORD=$(curl -s "https://api.gen202.com/api/v1/jobs/recordInfo?taskId=$TASK" \
-H "Authorization: Bearer sk-ваш-ключ")
STATE=$(echo "$RECORD" | jq -r '.data.state')
case "$STATE" in success|fail) break;; esac
sleep 3
done
# 3. Забрать результат. Ссылка на файл лежит в resultJson — это строка JSON
# внутри JSON, поэтому её разбирают вторым разбором (fromjson)
echo "$RECORD" | jq -r '.data |
if .state == "fail"
then "отказ \(.failCode): \(.failMsg)"
else .resultJson | fromjson | .resultUrls[0]
end'
import json
import time
import requests
headers = {"Authorization": "Bearer sk-ваш-ключ"}
# 1. Поставить задачу — в ответе придёт её номер
created = requests.post(
"https://api.gen202.com/api/v1/jobs/createTask",
headers=headers,
json={
"model": "kling/4-0-keyframe-to-video",
"input": {
"prompt": "Ginger cat in a white spacesuit floats in zero gravity above Earth. It slowly turns its head toward the camera, front paws drifting; sunlight glints across the helmet visor, the blue planet reflected in the glass. The camera eases backwards, revealing a solar panel at the edge of frame. Cinematic, soft rim light, shallow depth of field.",
"aspect_ratio": "auto",
"resolution": "720p",
"duration": 3,
"first_frame_url": "https://gen202.com/assets/sample-nano-banana-pro.jpg"
}
},
).json()
task_id = created["data"]["taskId"]
# 2. Спрашивать состояние, пока задача не закончится: waiting, queuing и
# generating означают «работа идёт», success и fail — окончательные
while True:
task = requests.get(
"https://api.gen202.com/api/v1/jobs/recordInfo",
headers=headers,
params={"taskId": task_id},
).json()["data"]
if task["state"] in ("success", "fail"):
break
time.sleep(3)
# 3. Разобрать итог. У неудачи причина в failCode и failMsg
if task["state"] == "fail":
raise SystemExit("отказ " + task["failCode"] + ": " + task["failMsg"])
# resultJson — строка JSON внутри JSON, поэтому разбор второй
result = json.loads(task["resultJson"])
print(result["resultUrls"][0])
print("списано кредитов:", task["creditsConsumed"])
Пример проходит весь путь: ставит задачу, повторяет запрос состояния раз в
3 секунды, пока задача не закончится, и разбирает ответ до ссылки
на файл. Разборов два, потому что поле resultJson — строка JSON
внутри JSON. В теле первого запроса стоят обязательные поля модели и значения из её
перечислений, поэтому он проходит проверку шлюза как есть.
Подставить остаётся только свой ключ.
Пример на оболочке разбирает ответ через jq; на Python своего
ничего не нужно, кроме requests.
Остальные модели этого семейства и их поля — в разделе документации Видео.
Что делает нейросеть Kling 4.0
Kling 4.0 — видеомодель Kuaishou, выпущенная 15 октября 2026 года. Цена у GEN202 — от 24,4 ₽ до 36,5 ₽ за секунду, и ставку задаёт разрешение. Видео выходит сразу со звуком и длится до 30 секунд за один запуск; у Kling 3.0 потолок — 15 секунд.
Сцену модель берёт из одного описания, из ключевых кадров или из референсов. Под это на странице два режима — «Референсы» и «Кадры», — и в поле model у них разные имена: kling/4-0-reference-to-video и kling/4-0-keyframe-to-video. Без приложенных файлов оба режима снимают видео по описанию.
В режиме «Референсы» к описанию прикладывают до 10 изображений и до 5 видео. По словам Kuaishou, изображением задают персонажа, лист персонажа или раскадровку, а видео — игру персонажа, действие, движение камеры и темп рассказа. В тексте на файлы ссылаются по месту в списке: @image_1, @video_1 и дальше.
В режиме «Кадры» задают первый кадр, до 8 промежуточных и последний — всего до 10 кадров. Модель проходит через них по порядку, а что происходит между кадрами, говорит описание.
Звук модель пишет вместе с изображением всегда, и отдельного поля для него нет. Поля запроса целиком разобраны в разделе «Kling», а предыдущая серия — с 4K и выключаемым звуком — на странице Kling 3.0.
Как снять видео в Kling 4.0: референсы или ключевые кадры
Видео создаётся на стороне Kuaishou, а запрос туда уходит через GEN202. Форма с полями стоит в песочнице: в ней видео запускают, смотрят готовым и сохраняют файлом.
Счёт посекундный: с баланса уходит ставка за каждую секунду готового видео, и в 1080p она выше, чем в 720p. С видео-референсами ставка за секунду ниже, но оплачиваются и секунды входа: к длине готового видео прибавляется большее из двух чисел — общая длина присланных видео или длина готового. Все ставки собраны в таблице цен.
Порядок работы у двух режимов общий, а различаются в нём файлы, которые кладут рядом с описанием.
- Выберите режим. Переключатель над формой ставит «Референсы» или «Кадры», и от него зависит, какие поля для файлов появятся в форме.
- Опишите сцену. В поле prompt помещается до 8 000 знаков: персонажи, действие, локация, движение камеры и реплики. Планы модель расставляет сама, поэтому смену планов описывают словами.
- Приложите файлы. Референсы кладут списками image_urls и video_urls, ключевые кадры — полями first_frame_url, keyframe_urls и last_frame_url. В описании на них ссылаются метками @image_1, @video_1, @first_frame, @keyframe_1 и @last_frame.
- Задайте длину и разрешение. Поле duration принимает от 3 до 30 секунд, поле resolution — 720p и 1080p. Оба поля меняют сумму к оплате.
- Проверьте замысел коротким видео. Короткое видео в 720p стоит меньше всего: описание доводят на нём, а полную длину и 1080p ставят готовому описанию.
Чем Kling 4.0 отличается от Kling 3.0
Kling 3.0 — предыдущая серия того же разработчика, и в каталоге она стоит рядом. В таблице — что задают в запросе и как это устроено у каждой из двух моделей.
| Что задают | Kling 4.0 | Kling 3.0 |
|---|---|---|
| Длительность | от 3 до 30 секунд | от 3 до 15 секунд |
| Разрешение | поле resolution: 720p и 1080p | поле mode: std, pro и 4K |
| Форма кадра | auto, 16:9, 9:16, 1:1, 21:9 | 16:9, 9:16, 1:1 |
| Звук | всегда, отдельного поля нет | флаг sound; без звука секунда дешевле |
| Кадры на входе | первый, до 8 промежуточных и последний | первый и последний, до 2 в image_urls |
| Референсы | до 10 изображений и до 5 видео | элементы в поле kling_elements |
| Смена планов | модель расставляет сама | флаг multi_shots и список multi_prompt |
| Длина описания | до 8 000 знаков | до 2 500 знаков |
| Секунда со звуком | 24,4 ₽ в 720p, 36,5 ₽ в 1080p | 15,65 ₽ в 720p, 20,9 ₽ в 1080p |
Главное различие: Kling 4.0 снимает до 30 секунд и ведёт видео через ключевые кадры, а Kling 3.0 даёт 4K, выключаемый звук и закреплённые элементы. Её поля и ставки разобраны на странице Kling 3.0.
Раскадровку, расписанную по полям запроса, — у каждого плана своё описание и своя длительность — принимает Kling O3. У Kling 4.0 планы внутри видео расставляет сама модель.
Выпуски Kling 4.0 и серии 3.0: имена у Kuaishou и даты
Kling 4.0 вышла следом за серией 3.0, и модели обеих серий стоят в каталоге GEN202. Таблица называет имя у Kuaishou, день объявления, главное изменение и имя для поля model.
| Имя у Kuaishou | Дата по анонсу | Что изменилось | Имя для поля model |
|---|---|---|---|
| Kling 4.0 | 15 октября 2026 | До 30 секунд за запуск, до 10 ключевых кадров, форма кадра 21:9, звук всегда | kling/4-0-reference-to-video, kling/4-0-keyframe-to-video |
| Kling VIDEO 3.0 Omni | 5 февраля 2026 | Рассказ из нескольких планов, у каждого плана своё описание в запросе | kling/3-0-omni-reference-to-video, kling/3-0-omni-text-to-video |
| Kling VIDEO 3.0 | 5 февраля 2026 | Родной звук по флагу, разметка планов, до 15 секунд | kling/3-0-video |
Дату выхода называет пресс-релиз Kuaishou, разосланный 19 октября 2026 года: «today announced that Kling 4.0, the new-generation video generation model of Kling AI, officially launched on October 15». Перевод наш: «сегодня объявила, что Kling 4.0, видеомодель нового поколения Kling AI, официально вышла 15 октября». Страница — пресс-релиз Kuaishou о выходе Kling 4.0.
В тот же день, 15 октября, Kling AI написал в X: «For Those Who Create. KLING 4.0 Is Now Fully Available». Перевод наш: «Для тех, кто создаёт. KLING 4.0 теперь открыта всем». Пост — объявление Kling AI в X.
Что в выпуске нового, разработчик пометил словом «New» прямо в таблице характеристик своего руководства по Kling 4.0: «Supports up to 10 keyframe inputs New», «3-30s New», «21:9New», «Stereo, 2-channel New». Перевод наш: до 10 ключевых кадров, длительность от 3 до 30 секунд, форма кадра 21:9 и стереозвук в два канала отмечены как новое.
Какой длины и в каком разрешении выходит видео Kling 4.0
Длину задаёт поле duration — целым числом секунд, от 3 до 30. Это длина одного запуска: всё видео модель снимает за один проход, без склейки из кусков.
Внутри этой длины модель сама делит сцену на планы и расставляет темп. Раскадровка у Kling 4.0 включена всегда, и отдельного поля под неё в запросе нет.
Разрешения — 720p и 1080p. У каждого своя ставка за секунду, и все строки стоят в таблице цен.
Форма кадра выбирается из 5 значений: auto, 16:9, 9:16, 1:1 и 21:9. Когда приложены ключевые кадры, форма берётся с первого кадра, и поле aspect_ratio можно не заполнять.
Что кладут в запрос Kling 4.0 кроме описания
Обязательное поле у обоих режимов одно — prompt. Описание вмещает до 8 000 знаков, а остальные поля добавляют по замыслу.
Референсы идут двумя списками ссылок: image_urls — до 10 изображений, video_urls — до 5 видео. Метка в описании повторяет место ссылки в списке: первое изображение — @image_1, первое видео — @video_1.
Ключевые кадры кладут тремя полями: first_frame_url — первый кадр, keyframe_urls — до 8 промежуточных, last_frame_url — последний. В описании на них ссылаются метками @first_frame, @keyframe_1 и @last_frame. Метку ставят только для кадра, который есть в запросе: если последнего кадра нет, метка @last_frame даст отказ.
Число кадров ограничено длиной видео: 3 секунды — до 4 кадров, 4 секунды — до 5, и так далее. Все 10 кадров можно дать с 9 секунд.
Флаг keep_original_sound нужен только вместе с видео-референсами: он оставляет в готовом видео их звук. Все поля с допустимыми значениями перечислены в таблице выше.
Что Kuaishou говорит о модели Kling 4.0
Чем разработчик считает эту модель, сказано в первых строках его руководства: «Kling 4.0 is a next-generation native multimodal AI model for video creation. It delivers more stable complex motion, stronger consistency across diverse references, and more coherent, precise, and controllable storytelling». Перевод наш: «Kling 4.0 — многомодальная модель нового поколения для создания видео. Она устойчивее держит сложное движение, точнее сохраняет сходство с разными референсами и даёт более связный, точный и управляемый рассказ». Страница — руководство Kling AI по Kling 4.0.
Первые два из трёх направлений выпуска пресс-релиз называет так: «steadier large-scale motion, with smoother continuity in high-speed action and complex camera work; native generation of up to 30 seconds in a single pass, supporting long takes and continuous storytelling with a director's mindset throughout». Перевод наш: «устойчивее крупное движение, плавнее быстрое действие и сложная работа камеры; до 30 секунд за один проход — длинные планы и непрерывный рассказ с режиссёрским взглядом от начала до конца». Страница — пресс-релиз Kuaishou от 19 октября 2026 года.
Ключевые кадры руководство описывает так: «Kling 4.0 supports first frames, last frames, start-and-last frames, and middle frames at any position in the timeline». Перевод наш: «Kling 4.0 принимает первый кадр, последний, пару из первого и последнего и промежуточные кадры в любом месте шкалы времени». Время событий между кадрами там же предлагают писать прямо в описании, например «Raise a hand at 3 seconds, turn around at 7 seconds» — «поднимает руку на третьей секунде, поворачивается на седьмой».
Про длину и планы в том же руководстве сказано: «Kling 4.0 supports single-generation videos ranging from 3 to 30 seconds. Multi-shot is enabled by default, allowing the model to automatically split shots and organize pacing based on the content». Перевод наш: «Kling 4.0 делает за одну генерацию видео от 3 до 30 секунд. Несколько планов включены по умолчанию: модель сама делит видео на планы и выстраивает темп по содержанию». В форме GEN202 поле duration принимает от 3 до 30 секунд.
Звук и раскадровка не выключаются, и разработчик пишет это прямо: «Audio-visual synchronization and Smart Storyboard are enabled by default and have no separate toggles». Перевод наш: «Синхронизация звука с изображением и умная раскадровка включены по умолчанию, отдельных переключателей у них нет». Музыку и шумы модель создаёт сама: «Background music and sound effects are generated by the model based on the visuals» — «фоновую музыку и звуковые эффекты модель создаёт по изображению».
Из запретов в описании разработчик советует оставлять два: «Only two types of negative instructions are truly necessary: no subtitles and no background music. The model may add these by default, so explicitly exclude them when they are not needed». Перевод наш: «По-настоящему нужны только два запрета: без субтитров и без фоновой музыки. Модель может добавить их сама, поэтому, когда они не нужны, исключайте их явно».
Длину описания разработчик считает в токенах — «Up to 8,000 tokens», а в форме GEN202 у поля prompt предел в знаках: до 8 000.
Цитаты приведены по руководству Kling AI, пресс-релизу Kuaishou и посту Kling AI в X на 24 октября 2026 года.
Какие пределы Kuaishou ставит у Kling 4.0
Два входа в одной генерации не смешиваются: «The capabilities of the two entry points cannot be combined within a single generation task». Перевод наш: «Возможности двух входов нельзя совмещать в одной генерации». Поэтому на этой странице два режима, и в одном запросе к описанию прикладывают либо референсы, либо ключевые кадры.
У изображения-референса соотношение сторон держится в пределах «aspect ratio: 2:5–5:2»: слишком узкое или слишком вытянутое изображение модель не примет. В форме GEN202 таких изображений берётся до 10.
Для видео-референсов предел двойной — по числу и по общей длине: «Up to 5 videos; Total video duration ≤ 30s». Перевод наш: до 5 видео, и вместе они длятся не больше 30 секунд. В форме GEN202 список video_urls берёт до 5 ссылок.
Ключевых кадров руководство допускает «Up to 10 images in total» — до десяти изображений вместе. В форме GEN202 это первый кадр, до 8 промежуточных и последний, а сколько из них примет запрос, зависит от длины видео.
Что показали независимые проверки Kling 4.0
Модель проверил Adam Campbell Cinema в видео от 21 октября 2026 года: пять тестов по ключевым кадрам, до 30 секунд и до 10 кадров, и три раунда «ключевые кадры против Omni Reference». Omni Reference — так в кабинете Kling называется вход по референсам, у GEN202 это режим «Референсы». Снимал автор на сайте Kling AI в 720p: «One video generation per setup, no rerolls» — перевод наш: «по одной генерации на тест, без перезапусков». Видео — Adam Campbell Cinema, 21 октября 2026.
Лучший тест по ключевым кадрам — пять кадров на 30 секунд — автор описывает так: «Best key frame result yet. All five pictures in order. The cuts land within a frame or two». Перевод наш: «Лучший результат по ключевым кадрам: все пять изображений по порядку, склейки попадают с точностью до одного-двух кадров». И сразу оговаривается: «Kling hit every picture. It still cheated the action» — «Kling попал в каждое изображение, но с действием между ними всё равно схитрил».
В тесте на десять кадров, где по улице катится сбежавшая тыква-фонарь, вышло хуже: «Once he's rolling, it doesn't hold his face. The dog barks at him, but the chase down the street never happens». Перевод наш: «Как только он покатился, модель перестаёт держать его лицо. Собака лает на него, но погони по улице так и не случается».
Разницу между двумя входами автор сводит в одну формулу: «Keyframes follows your pictures. The prompt is just direction. Omni follows your prompt. The pictures are just direction». Перевод наш: «Ключевые кадры следуют вашим изображениям, а описание лишь задаёт направление. Omni следует описанию, а изображения лишь задают направление». И добавляет: «In these tests, Omni looked more realistic. Some of my Keyframes shots still have that pasted-in look» — «в этих тестах Omni выглядел реалистичнее, а часть планов по ключевым кадрам всё ещё смотрится вклеенной».
Итог он подводит так: «hitting a picture isn't the same as making the action work. I still check every take». Перевод наш: «Попасть в изображение — не то же самое, что сделать действие рабочим. Я по-прежнему проверяю каждый дубль».
Второй взгляд — видео Aaron Randall от 23 октября 2026 года, где модель поставлена рядом с Seedance 2.5. В описании к нему автор пишет: «I break down where the image to video motion falls apart in action choreography, dialogue performance, and anime style animation». Перевод наш: «Разбираю, где движение из изображения разваливается: в постановке динамичных сцен, в игре персонажей в диалоге и в анимации в стиле аниме». Видео — Aaron Randall, 23 октября 2026.
Ни один из этих тестов не сделан через GEN202: авторы снимали в кабинете Kling AI и на сторонних сайтах. Слова авторов приведены по их видео и описаниям на 24 октября 2026 года.