Kling 3.0 API

Одной моделью делает и ролик по описанию, и ролик из присланного изображения. Соотношение сторон 16:9, 9:16, 1:1, на вход до 2 изображений, описание до 20 000 символов. Модель Kuaishou.

Принимает текстовое описание и возвращает готовый ролик. Разрешение 720p, 1080p, соотношение сторон 1:1, 9:16, 16:9, описание до 2 500 символов. Модель Kuaishou.

Принимает изображение и оживляет его, возвращая ролик. Разрешение 720p, 1080p, на вход до 2 изображений, описание до 2 500 символов. Модель Kuaishou.

Kling 3.0 API работает в России без VPN: один API ключ GEN202, оплата рублями с российской карты, цена до 10% ниже официальной.

Цена: за секунду, 720p — от 15.12 кр. (7,56 ₽ · $0.0756), 1080p — от 20.16 кр. (10,08 ₽ · $0.1008), 4K — 75.6 кр. (37,8 ₽ · $0.378).

Цена: за секунду, 720p — 20.16 кр. (10,08 ₽ · $0.1008), 1080p — 25.2 кр. (12,6 ₽ · $0.126).

Цена: за секунду, 720p — 20.16 кр. (10,08 ₽ · $0.1008), 1080p — 25.2 кр. (12,6 ₽ · $0.126).

кр. — кредиты, покупаются за рубли.

Model

Статус

работает

Статус

работает

Статус

работает

Песочница

Input

Ещё настройки

Многокадрового режима в песочнице нет. В нём ролик собирается из списка кадров: у каждого своё описание и своя длительность, до пяти кадров, каждый от одной до двенадцати секунд. Список задаётся структурой, а форма структуры не собирает, поэтому режим доступен только при вызове через API — как его передать, написано ниже, в разделе про вызов.

Поля multi_prompt, kling_elements задаются структурой и доступны только через API.

Чтобы создать видео — войдите и получите 50 кредитов на тесты и любое использование сервиса.

{
  "model": "kling/3-0-video",
  "input": {
    "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
    "sound": false,
    "aspect_ratio": "16:9",
    "duration": 3
  }
}
Output

Нажмите «Запустить» — готовый ролик появится здесь

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

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "cm8r4t0vk0001s60p2xq7f9ab",
    "model": "kling/3-0-video",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
    "failCode": "",
    "failMsg": "",
    "creditsConsumed": 15.12
  }
}
Input

Чтобы создать видео — войдите и получите 50 кредитов на тесты и любое использование сервиса.

{
  "model": "kling/3-turbo-text-to-video",
  "input": {
    "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
    "duration": 3,
    "aspect_ratio": "1:1",
    "resolution": "720p"
  }
}
Output

Нажмите «Запустить» — готовый ролик появится здесь

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

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "cm8r4t0vk0001s60p2xq7f9ab",
    "model": "kling/3-turbo-text-to-video",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
    "failCode": "",
    "failMsg": "",
    "creditsConsumed": 20.16
  }
}
Input

Чтобы создать видео — войдите и получите 50 кредитов на тесты и любое использование сервиса.

{
  "model": "kling/3-turbo-image-to-video",
  "input": {
    "prompt": "Заменить фон на вечернюю городскую улицу, свет тёплый",
    "image_urls": [
      "https://gen202.com/assets/sample-nano-banana-2.jpg"
    ],
    "duration": 3,
    "resolution": "720p"
  }
}
Output

Нажмите «Запустить» — готовый ролик появится здесь

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

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "cm8r4t0vk0001s60p2xq7f9ab",
    "model": "kling/3-turbo-image-to-video",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://file.example/result.mp4\"]}",
    "failCode": "",
    "failMsg": "",
    "creditsConsumed": 20.16
  }
}

Цена Kling 3.0

Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.

Вариант Скидка от официальной цены Наша цена
without audio-720P $0.084 −10% 15.12 кр. $0.07567,56 ₽
without audio-1080P $0.112 −10% 20.16 кр. $0.100810,08 ₽
with audio-720P $0.126 −10% 22.68 кр. $0.113411,34 ₽
with audio-1080P $0.168 −10% 30.24 кр. $0.151215,12 ₽
4K $0.42 −10% 75.6 кр. $0.37837,8 ₽

В среднем на 10% ниже официальной цены поставщика. кр. — кредиты, покупаются за рубли.

Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.

Вариант Скидка от официальной цены Наша цена
720P $0.112 −10% 20.16 кр. $0.100810,08 ₽
1080P $0.14 −10% 25.2 кр. $0.12612,6 ₽

В среднем на 10% ниже официальной цены поставщика. кр. — кредиты, покупаются за рубли.

Цена за секунду. Списывается фактический расход, о котором сообщил поставщик.

Вариант Скидка от официальной цены Наша цена
720P $0.112 −10% 20.16 кр. $0.100810,08 ₽
1080P $0.14 −10% 25.2 кр. $0.12612,6 ₽

В среднем на 10% ниже официальной цены поставщика. кр. — кредиты, покупаются за рубли.

На время работы шлюз удерживает ставку выбранного разрешения, умноженную на запрошенную длительность; больше 1134 кредита по этой модели он не удержит ни при каком запросе (duration до 15 с). Разница между удержанием и фактическим расходом возвращается на баланс тем же запросом состояния, который увидел итог.

Вызов через API

POST https://api.gen202.com/api/v1/jobs/createTask
GET https://api.gen202.com/api/v1/jobs/recordInfo?taskId=…

Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком Authorization: Bearer sk-… и выпускается в кабинете. На один ключ шлюз пропускает 30 постановок задачи и 300 запросов состояния в минуту.

Поля запроса

Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне перечисления возвращают 422 и кредитов не тратят.

ПолеТипОбяз.Допустимые значения
model текст обязательное kling/3-0-video
input объект обязательное Параметры генерации — поля из таблицы ниже

Поля input

ПолеТипОбяз.Допустимые значения
prompt текст обязательное от 1 до 20 000 символов
sound да или нет обязательное true или false
image_urls список ссылок опц. до 2 ссылок на изображение
duration целое число опц. целое от 3 до 15
aspect_ratio значение из списка опц. 16:9 · 9:16 · 1:1
mode значение из списка опц. std · pro · 4K
multi_shots да или нет опц. true или false · без него шлюз подставит false
multi_prompt структура опц. структура по документации поставщика, проверяется у него
kling_elements структура опц. структура по документации поставщика, проверяется у него

Один план или несколько. Поле multi_shots выбирает, как модель снимает ролик. Оно булево, и маршрут отказывает, если его не прислать вовсе, — поэтому шлюз подставляет false, обычный ролик одним планом.

При multi_shots: false ролик снимается по описанию из поля prompt, принимаются две картинки: первая — начальный кадр, вторая — конечный. Звук включается полем sound.

При multi_shots: true описание из prompt не действует: сцены задаются списком multi_prompt, до пяти кадров, у каждого своё описание и длительность от одной до двенадцати секунд, не длиннее пятисот знаков. Картинка принимается одна и служит начальным кадром, а звук в этом режиме включается сам.

В обоих режимах в описании можно сослаться на образец через @имя, а сами образцы перечислить в kling_elements: от двух до четырёх картинок либо один ролик на образец, не больше трёх образцов на ролик.

Ссылка на изображение принимается только полным адресом на 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.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, удержанные кредиты возвращены целиком.

Опрос не бывает бесконечным: задача на видео живёт не дольше 60 минут, после чего шлюз закрывает её сам состоянием fail и возвращает удержанные кредиты целиком. Причина неудачи приходит двумя полями: failCode из таблицы ниже и failMsg словами.

failCodeЧто произошло
501 Поставщик вернул отказ: генерация не удалась.
408 Результата нет дольше крайнего срока задачи (60 минут для видео).
404 Поставщик не знает такой задачи.
429 Поставщик отбил создание задачи по своему лимиту.
500 Поломка на нашей стороне; подробности остаются в журнале шлюза.

Ссылка на готовый файл живёт 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 — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ либо больше 50 незавершённых задач на аккаунте.
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 Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.

Пример вызова

task.sh
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-ваш-ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling/3-0-video",
    "input": {
      "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
      "sound": false,
      "aspect_ratio": "16:9",
      "duration": 3
    }
  }' | 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'
task.py
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/3-0-video",
      "input": {
        "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
        "sound": False,
        "aspect_ratio": "16:9",
        "duration": 3
      }
    },
).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.

POST https://api.gen202.com/api/v1/jobs/createTask
GET https://api.gen202.com/api/v1/jobs/recordInfo?taskId=…

Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком Authorization: Bearer sk-… и выпускается в кабинете. На один ключ шлюз пропускает 30 постановок задачи и 300 запросов состояния в минуту.

Поля запроса

Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне перечисления возвращают 422 и кредитов не тратят.

ПолеТипОбяз.Допустимые значения
model текст обязательное kling/3-turbo-text-to-video
input объект обязательное Параметры генерации — поля из таблицы ниже

Поля input

ПолеТипОбяз.Допустимые значения
prompt текст обязательное от 1 до 2 500 символов
duration целое число обязательное целое от 3 до 15
aspect_ratio значение из списка обязательное 1:1 · 9:16 · 16:9
resolution значение из списка опц. 720p · 1080p

Ответ

Оба запроса отвечают одним конвертом: {"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.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, удержанные кредиты возвращены целиком.

Опрос не бывает бесконечным: задача на видео живёт не дольше 60 минут, после чего шлюз закрывает её сам состоянием fail и возвращает удержанные кредиты целиком. Причина неудачи приходит двумя полями: failCode из таблицы ниже и failMsg словами.

failCodeЧто произошло
501 Поставщик вернул отказ: генерация не удалась.
408 Результата нет дольше крайнего срока задачи (60 минут для видео).
404 Поставщик не знает такой задачи.
429 Поставщик отбил создание задачи по своему лимиту.
500 Поломка на нашей стороне; подробности остаются в журнале шлюза.

Ссылка на готовый файл живёт 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 — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ либо больше 50 незавершённых задач на аккаунте.
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 Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.

Пример вызова

task.sh
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-ваш-ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling/3-turbo-text-to-video",
    "input": {
      "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
      "duration": 3,
      "aspect_ratio": "1:1",
      "resolution": "720p"
    }
  }' | 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'
task.py
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/3-turbo-text-to-video",
      "input": {
        "prompt": "Рыжий кот в скафандре на фоне Земли, мягкий свет",
        "duration": 3,
        "aspect_ratio": "1:1",
        "resolution": "720p"
      }
    },
).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.

POST https://api.gen202.com/api/v1/jobs/createTask
GET https://api.gen202.com/api/v1/jobs/recordInfo?taskId=…

Ролик делается минуты, поэтому файл не приходит в ответ на запрос. Первый вызов ставит задачу и сразу отвечает её номером, второй по этому номеру отдаёт состояние задачи, а когда она готова — ссылку на результат. Ключ передаётся в обоих запросах заголовком Authorization: Bearer sk-… и выпускается в кабинете. На один ключ шлюз пропускает 30 постановок задачи и 300 запросов состояния в минуту.

Поля запроса

Значения проверяются до обращения к поставщику: поле не из списка модели или значение вне перечисления возвращают 422 и кредитов не тратят.

ПолеТипОбяз.Допустимые значения
model текст обязательное kling/3-turbo-image-to-video
input объект обязательное Параметры генерации — поля из таблицы ниже

Поля input

ПолеТипОбяз.Допустимые значения
prompt текст обязательное от 1 до 2 500 символов
image_urls список ссылок обязательное от 1 до 2 ссылок на изображение
duration целое число обязательное целое от 3 до 15
resolution значение из списка опц. 720p · 1080p

Ссылка на изображение принимается только полным адресом на 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.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, удержанные кредиты возвращены целиком.

Опрос не бывает бесконечным: задача на видео живёт не дольше 60 минут, после чего шлюз закрывает её сам состоянием fail и возвращает удержанные кредиты целиком. Причина неудачи приходит двумя полями: failCode из таблицы ниже и failMsg словами.

failCodeЧто произошло
501 Поставщик вернул отказ: генерация не удалась.
408 Результата нет дольше крайнего срока задачи (60 минут для видео).
404 Поставщик не знает такой задачи.
429 Поставщик отбил создание задачи по своему лимиту.
500 Поломка на нашей стороне; подробности остаются в журнале шлюза.

Ссылка на готовый файл живёт 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 — не объект, поле не из списка модели либо значение вне её перечисления. В сообщении перечислено, что принимается.
429 /api/v1/jobs/createTask Больше 30 запросов в минуту на один ключ либо больше 50 незавершённых задач на аккаунте.
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 Поломка на нашей стороне. Подробности остаются в журнале шлюза и наружу не уходят.

Пример вызова

task.sh
# 1. Поставить задачу — в ответе придёт её номер
TASK=$(curl -s https://api.gen202.com/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-ваш-ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling/3-turbo-image-to-video",
    "input": {
      "prompt": "Заменить фон на вечернюю городскую улицу, свет тёплый",
      "image_urls": [
        "https://gen202.com/assets/sample-nano-banana-2.jpg"
      ],
      "duration": 3,
      "resolution": "720p"
    }
  }' | 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'
task.py
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/3-turbo-image-to-video",
      "input": {
        "prompt": "Заменить фон на вечернюю городскую улицу, свет тёплый",
        "image_urls": [
          "https://gen202.com/assets/sample-nano-banana-2.jpg"
        ],
        "duration": 3,
        "resolution": "720p"
      }
    },
).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 3.0

Kling 3.0 — линейка видеомоделей Kuaishou, объявленная 5 февраля 2026 года в составе серии Kling AI 3.0. Модель снимает ролик с родным звуком по описанию и по присланному кадру, а стоит секунда у GEN202 от 7,56 ₽ до 37,8 ₽: цену задают разрешение и включённый звук.

Kling 3.0 вызывается под одним именем и делает обе работы сразу: видео из текста и видео из изображения. Кадр для второй передаётся ссылкой, и список image_urls берёт до 2 ссылок.

Kling 3.0 Turbo стоит на этой же странице двумя отдельными режимами, и в поле model у них разные имена: kling/3-turbo-text-to-video и kling/3-turbo-image-to-video.

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

Кадры многокадрового ролика и закреплённые элементы приходят своими полями — multi_prompt и kling_elements, а остальные поля перечислены в разделе «Kling».

Как пользоваться Kling 3.0 бесплатно и можно ли её скачать

У Kling 3.0 платят по расходу: с баланса уходит ставка за каждую секунду готового ролика, а поднимают её разрешение и звук. Новому счёту при первом входе начисляют приветственные кредиты, и они идут в счёт первого ролика. Ежемесячного платежа нет, а задача, закончившаяся отказом, возвращает удержание на баланс целиком.

Сама модель работает на стороне Kuaishou и запускается по сети, поэтому у себя разворачивать нечего. Через нас забирают результат: готовый ролик из песочницы приходит файлом mp4.

Официальный сайт Kling 3.0 принадлежит Kuaishou, а мы — независимый продавец доступа к его моделям. Имена полей и допустимые значения при этом взяты у разработчика: их видно в таблице выше.

Тем, кому код не нужен, та же модель открыта в браузере: порядок разобран на странице как пользоваться Kling в России.

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

  1. Соберите описание кадра. Поле prompt принимает сцену целиком: героя, его действие, обстановку вокруг и движение камеры.
  2. Приложите исходный кадр. Ссылку на картинку кладут в поле image_urls, и тогда ролик отталкивается от неё, а не сочиняется с нуля.
  3. Выберите разрешение и длительность. Разрешение у Kling 3.0 выбирает поле mode, у Kling 3.0 Turbo — поле resolution, а секунды ставят в duration.
  4. Решите, нужен ли родной звук. Флаг sound добавляет к картинке звуковую дорожку, и от него же зависит строка цены.
  5. Разложите рассказ по кадрам. Флаг multi_shots отдаёт переходы между планами модели, а поле multi_prompt описывает каждый план по отдельности.

Чем Kling 3.0 Turbo отличается от Kling 3.0

Разницу между двумя моделями Kuaishou свёл в свою таблицу возможностей, и видна она прямо в полях запроса.

ЧтоKling 3.0Kling 3.0 Turbo
Разрешенияполе mode: std, pro и 4Kполе resolution: 720p и 1080p
Кадры на входепервый и последнийпервый
Закрепление элементовполе kling_elements
Перенос движения с готового роликаесть
Многокадровый рассказестьесть
Родной звукестьесть
Обязательные поляprompt и soundKling 3.0 Turbo text-to-video — prompt, duration и aspect_ratio; Kling 3.0 Turbo image-to-video — prompt, image_urls и duration

Многокадровый рассказ и родной звук Kuaishou называет общими для обеих моделей, а 4K, последний кадр и закрепление элементов оставил за Kling 3.0.

Выпуски Kling: даты у Kuaishou и куда они ведут

Серия собрана из двух веток, и номер версии сам по себе порядка не задаёт: выпуск 2.6 вырос в VIDEO 3.0, а выпуск O1 — в VIDEO 3.0 Omni. В таблице — имя у Kuaishou, дата его объявления, что изменилось и страница модели у нас.

Имя у KuaishouДата по анонсуЧто изменилосьНаш адрес
KLING VIDEO 2.616 декабря 2025Впервые появился родной звук: голос, шумы и фон за одну генерацию
Kling VIDEO 3.05 февраля 2026Прибавились разметка планов, образец-элемент у стартового кадра и свободная длительность до 15 секундэта страница, kling/3-0-video
Kling VIDEO 3.0 Omni5 февраля 2026Та же серия под рассказ из нескольких кадров, с разбором раскадровки по полямкарточка Kling O3
Kling VIDEO 3.0 Motion Control4 марта 2026Отдельная работа: движение и мимика переносятся с присланного роликакарточка Kling 3.0 Motion Control
Родное 4K для серии 3.023 апреля 2026Старшее разрешение 4K у моделей сериивыбирается полем mode на этой странице
Kling 3.0 Turbo17 июня 2026В серии 3.0 появился режим Turbo; вместе с ним обновлена правка видео в Kling 3.0 Omniэта страница, kling/3-turbo-text-to-video и kling/3-turbo-image-to-video

Про предыдущий выпуск Kuaishou писал так: «Previously, KLING's video models could only generate "silent visuals". Creators had to manually find voiceovers, add sound effects, and adjust the pace—an overly complex process that made it hard to achieve true immersion». Перевод наш: «Раньше видеомодели KLING умели делать только "немую картинку". Автору приходилось вручную искать озвучку, добавлять шумы и подгонять темп — слишком сложный порядок работы, из-за которого трудно было добиться настоящего погружения». Страница — руководство Kling по выпуску VIDEO 2.6.

Что прибавилось в нынешнем выпуске, Kuaishou свёл в таблицу возможностей: у VIDEO 2.6 отмечены «Text-to-Video», «Image-to-Video», «Start & End Frames-to-Video» и «Native Audio», а у VIDEO 3.0 к ним добавлены «Multi-Shot», «Start Frame + Element Reference», «Multi-Character Coreference (3+)», «15s Output Duration» и «Flexible Duration». Перевод наш: текст в видео, картинка в видео, первый и последний кадр в видео и родной звук — против них же плюс разметка планов, образец-элемент у стартового кадра, перекличка трёх и более героев, пятнадцатисекундная длительность и свободный её выбор. Таблица — в руководстве Kling по модели VIDEO 3.0.

О выходе Kling 3.0 Turbo Kuaishou объявил 17 июня 2026 года: «Kling 3.0 Turbo is now live, along with upgraded video editing in Kling 3.0 Omni». Перевод наш: «Kling 3.0 Turbo уже работает, а вместе с ним обновлена правка видео в Kling 3.0 Omni». Перенос движения отмечен там же 4 марта 2026 года: «Kling VIDEO 3.0 Motion Control: Major Launch!» — «Kling VIDEO 3.0 Motion Control: большой запуск». Страница — история выпусков Kling AI. Чем Kling 3.0 Turbo отличается от Kling 3.0, разобрано таблицей выше.

Какой длины и в каком разрешении выходит ролик Kling 3.0

Ролик выходит от 3 до 15 секунд, и этот диапазон общий для Kling 3.0 и для обоих режимов Turbo.

Разрешение у Kling 3.0 выбирают режимом: Kling 3.0 pro — это 1080p, std — 720p, а 4K назван прямо. У Turbo выбор из двух: 720p и 1080p.

Форм кадра у Kling 3.0 3: 16:9, 9:16, 1:1.

Что Kuaishou говорит о модели Kling 3.0

Чем Kuaishou считает этот выпуск, сказано подзаголовком руководства: «VIDEO 3.0: Native Audio Upgrade, Enhanced Element Consistency, and Support for Multi-Shot Narratives». Перевод наш: «VIDEO 3.0: обновлённый родной звук, более сильное постоянство элементов и поддержка рассказа из нескольких планов». Страница — руководство Kling по модели VIDEO 3.0.

Как включается разметка планов, там же расписано по переключателям: «In VIDEO 3.0, multi-shot video generation can be triggered through two modes: "Multi-Shot" and "Custom Multi-Shot". When "Multi-Shot" is enabled, the model automatically plans the shot transitions, and this switch is a prerequisite for enabling "Custom Multi-Shot". When "Multi-Shot" is disabled, the model will default to generating a single-shot video». Перевод наш: «В VIDEO 3.0 съёмка несколькими планами включается двумя способами: обычной разметкой и своей. При обычной модель сама планирует переходы между планами, и она же — обязательное условие для своей разметки. При выключенной разметке модель по умолчанию делает ролик из одного плана». В запросе к GEN202 этим двум способам отвечают поля multi_shots и multi_prompt.

Про закреплённый элемент то же руководство VIDEO 3.0 говорит: «Elements can be created in two ways: 1) Upload/record a character video, and the system will automatically extract the character's appearance and native voice tone, with options to keep the original or replace with a custom tone; 2) Upload 2-4 reference images of the element». Перевод наш: «Элемент заводится двумя способами: первый — загрузить или записать ролик с героем, и система сама вынет из него внешность и родной тембр, который можно оставить или заменить; второй — загрузить от 2 до 4 картинок с элементом».

Длительность Kuaishou описывает так: «The new model generates up to 15 seconds of continuous video, with a flexible duration ranging from 3 to 15 seconds. This is not just about longer output, but unlocking more narrative possibilities». Перевод наш: «Новая модель делает до 15 секунд непрерывного видео со свободной длительностью от 3 до 15 секунд. Дело не только в длине, а в том, что открывается больше возможностей для рассказа». Тот же диапазон стоит в форме GEN202 — от 3 до 15 секунд.

Зачем нужно закрепление, Kuaishou объясняет на странице возможности Video 3.0: «Maintain perfect character consistency and object stability across frames, ensuring a reliable visual identity even with complex camera movements. Our AI video model locks subjects to prevent flickering». Перевод наш: «Удерживайте постоянство героя и устойчивость предметов от кадра к кадру, сохраняя узнаваемый облик даже при сложном движении камеры. Модель закрепляет героев, чтобы они не мерцали».

Всю серию Kuaishou описывает на своей главной странице так: «Built on a fully upgraded architecture, VIDEO 3.0 and VIDEO 3.0 Omni natively support deep multimodal instruction parsing and cross-task integration, redefining the narrative logic of light and sound». Перевод наш: «На полностью обновлённом устройстве VIDEO 3.0 и VIDEO 3.0 Omni изначально разбирают многомодальные указания и совмещают задачи между собой, заново определяя, как связаны изображение и звук в рассказе».

Счёт у Kuaishou идёт посекундно: «The video service fees are charged per second, with different rates for each mode». Перевод наш: «Плата за услугу берётся посекундно, и ставка у каждого режима своя». Свою ставку он называет в кредитах кабинета Kling AI и показывает на примере: «Example 2: Generating a 5-second 3.0 No Native Audio 720p video costs 30 Credits» — перевод наш: «Пример 2: пятисекундный ролик 3.0 без родного звука в 720p стоит 30 кредитов». Столбец «Официальная» в таблице цен выше показывает долларовую цену доступа к этой модели по API — $0.084 за секунду у младшего варианта.

Цитаты приведены по страницам Kling AI на 15 сентября 2026 года.

Что Kuaishou оставил за Kling 3.0: последний кадр, 4K и перенос движения

Последний кадр на входе принимает Kling 3.0: ролик можно вести от первого кадра к последнему. У Kling 3.0 Turbo на входе один кадр — первый.

Родное 4K объявлено для Kling 3.0, и работы, где оно есть, — это видео из текста и видео из изображения.

Перенос движения и мимики с готового ролика делает соседняя модель серии — Kling 3.0 Motion Control.

Что показали независимые проверки Kling 3.0

Kling 3.0 проверяют слепым сравнением на LMArena: человеку показывают два ролика без имён моделей и просят выбрать лучший, из этих выборов складывается оценка. В арене «картинка в видео» у строки kling-v3-pro стоит 1355 с допуском 6 при 199 238 голосах. У прошлых выпусков линейки оценки ниже: kling-2.6-pro — 1294 с допуском 8 при 202 157 голосах, kling-2.5-turbo-1080p — 1276 с допуском 13 при 3 796, kling-v2.1-master — 1235 с допуском 8 при 29 824. Числа на 21 сентября 2026 года, таблица — арена «картинка в видео» на LMArena.

От предыдущего выпуска Kling 3.0 отделяет 61 пункт при допуске 6 и 8: границы двух оценок не пересекаются, а голосов у каждой строки около двухсот тысяч. В слепом сравнении ролики Kling 3.0 выбирали чаще, чем ролики любого прошлого выпуска Kling.

Вторая проверка со стороны — научная работа «Talker-T2AV: Joint Talking Audio-Video Generation with Autoregressive Diffusion Modeling», выложенная на arXiv в апреле 2026 года. Kling 3 она называет среди ведущих систем, которые делают звук и картинку вместе: «Leading commercial systems such as Sora 2 (OpenAI, 2025), Veo 3 (Google DeepMind, 2025), Kling 3 (Kuaishou Technology, 2026), and Seedance 2.0 (ByteDance Seed Team, 2026) have all adopted joint audio-video generation as a core capability, producing cinematic clips with tightly synchronized dialogue, sound effects, and visual motion». Перевод наш: «Ведущие рыночные системы — Sora 2, Veo 3, Kling 3 и Seedance 2.0 — все взяли совместное создание звука и картинки как основную способность и выдают кинематографичные ролики с точно совпадающими репликами, звуковыми эффектами и движением». Работа — препринт Talker-T2AV на arXiv.

Что чаще всего идёт не так в Kling 3.0 и как это обходят

Ниже — то, что видно на съёмке и о чём документация молчит: места, где ролик выходит не тем, и обходы, которые для них нашли.

Наблюдения о Kling 3.0 взяты из разборов с живыми прогонами: Theoretically Media, 4 февраля 2026, Atomic Gains, 5 февраля 2026, King Charles Tv, 9 февраля 2026, Oprelia AI, 10 февраля 2026, Digital Master Tools, 14 февраля 2026, VideoSmile, 22 февраля 2026, Curious Refuge, 26 февраля 2026.

  • К концу длинного ролика речь расходится с губами: герой замолкает раньше, чем договорил. Реплики поэтому ставят в начало, а последние планы делают без слов.
  • Много реплик в одном описании модель старается уместить целиком и торопится. Разговор надёжнее разложить по нескольким коротким планам.
  • Модель договаривает за автора: в кадре появляются лишний человек, лишняя сцена или надпись, которых не просили. Иногда герой заговаривает сам собой — тогда в описании прямо пишут, что он молчит.
  • Закреплённый элемент и многокадровый рассказ спорят между собой: элемент держит облик героя, а заказанная смена планов при этом выполняется не вся.
  • Подробное описание, собранное чат-ботом, модель понимает слишком буквально: от слова «стоит» герой замирает совсем. Короткое описание одного действия срабатывает точнее.
  • Движение камеры уходит не туда: вместо камеры едет предмет или кадр начинает мелко трястись. Помогает прямое указание, что предмет остаётся на месте.
  • Когда заданы и первый кадр, и последний, действие между ними выполняется хуже. Тот же замысел выходит лучше с одного кадра и многокадрового режима.
  • На общем плане лицо героя расползается, а люди на дальнем плане движутся одинаково и дёргано. Крупность плана поэтому выбирают под лицо, а массовку оставляют спокойной.
  • Звук сцены иногда не сходится с картинкой: за закрытой дверью слышна улица. Такой ролик переснимают, а не правят описанием.
  • Годный ролик редко выходит с первой попытки. Сломавшийся план переснимают отдельно или вырезают при монтаже, а не переделывают всё целиком.

Общий порядок из этого складывается такой: одно действие на план, короткое описание и проверка замысла на низком разрешении, где секунда стоит меньше.

GEN202 — сервис доступа к моделям с оплатой рублями, и рубли в таблице выше — цены GEN202: у Kuaishou счёт идёт в кредитах его кабинета. Как устроен счёт и сколько стоит кредит, разобрано на странице цен.

Канал Kling AI — представление модели от 4 февраля 2026 года: пятнадцатисекундные ролики, несколько кадров подряд, встроенный звук. Идёт около двух минут.

Частые вопросы

Как вызвать Kling 3.0 через API из России?
Запрос уходит на api.gen202.com, и это адрес GEN202, а не адрес Kuaishou: обращения за границу в вызове Kling 3.0 нет, поэтому VPN не требуется. В поле model уходит идентификатор выбранного варианта: 3.0 (kling/3-0-video), turbo · текст в видео (kling/3-turbo-text-to-video), turbo · картинка в видео (kling/3-turbo-image-to-video). Порядок вызова Kling 3.0 с примерами кода разобран в документации.
Сколько стоит Kling 3.0
Цена за секунду Kling 3.0 — от 15.12 кр. (7,56 ₽ · $0.0756) до 75.6 кр. (37,8 ₽ · $0.378). У Kling 3.0 списывается фактический расход, а задача, завершившаяся ошибкой, не тарифицируется вовсе.
Нужны ли VPN и иностранная карта для Kling 3.0
Ни то, ни другое: обращение к Kling 3.0 идёт на наш адрес, а расчёты с Kuaishou ведём мы, поэтому договариваться с ним клиенту не о чем. Оплата рублями с карты российского банка.
Что Kling 3.0 принимает на вход
Обязательные поля запроса к Kling 3.0: 3.0 — prompt — от 1 до 20 000 символов; sound — true или false. Turbo · текст в видео — prompt — от 1 до 2 500 символов; duration — целое от 3 до 15; aspect_ratio — 1:1 · 9:16 · 16:9. Turbo · картинка в видео — prompt — от 1 до 2 500 символов; image_urls — от 1 до 2 ссылок на изображение; duration — целое от 3 до 15. Остальные поля необязательны.
Как подключить Kling 3.0 API и сделать первый вызов
Войти на сайт и выпустить ключ в кабинете: при первом входе начисляется 50 кредитов, и этот же ключ открывает Kling 3.0 вместе с остальным каталогом. Собственного ключа Kuaishou и договора с ним для вызова Kling 3.0 не нужно.
Какая компания разработала Kling 3.0
Kling 3.0 разработала компания Kuaishou: серию Kling AI 3.0 она объявила 5 февраля 2026 года. Это модель генерации видео — ролик по описанию и ролик из присланного изображения.
Kling AI 3.0 и Kling Video 3.0 — это одна модель
Да. Kling AI 3.0 — имя серии, а саму модель Kuaishou называет Kling VIDEO 3.0; в каталоге GEN202 она называется Kling 3.0, и на той же странице стоят её режимы Turbo.
Kling 3.0 Omni и Kling 3.0 Motion Control — это та же модель
Нет, это три разные модели, у каждой своя цена и своя страница: Kling O3 — выпуск VIDEO 3.0 Omni под рассказ из нескольких кадров, а Kling 3.0 Motion Control переносит движение и мимику с присланного ролика.
Есть ли у Kling 3.0 официальный сайт
Официальный сайт держит Kuaishou — страница Kling VIDEO 3.0 на kling.ai. Здесь Kling 3.0 вызывают по API ключу GEN202 и оплачивают рублями.