> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apimart.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Kling V4 Генерация видео

> Генерация по тексту, изображению и референсам, редактирование и продление видео. От 3 до 30 секунд в 720p / 1080p, всегда со стереозвуком.

> [!NOTE]
>
> Этот эндпоинт работает асинхронно. После отправки используйте полученный `task_id` в `GET /v1/videos/generations/{task_id}`, чтобы узнать статус и результат задачи.

```bash cURL theme={null}
curl --request POST \
  --url https://api.apimart.ai/v1/videos/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "kling-v4",
    "prompt": "A paper boat drifts along a gutter on a rainy night, with the gentle sound of rain",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "9:16"
  }'
```

```python Python theme={null}
import requests

response = requests.post(
    "https://api.apimart.ai/v1/videos/generations",
    headers={"Authorization": "Bearer <token>"},
    json={
        "model": "kling-v4",
        "prompt": "A paper boat drifts along a gutter on a rainy night, with the gentle sound of rain",
        "duration": 5,
        "resolution": "720p",
        "aspect_ratio": "9:16"
    }
)
response.raise_for_status()
print(response.json())
```

```javascript JavaScript theme={null}
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
  method: "POST",
  headers: {
    Authorization: "Bearer <token>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "kling-v4",
    prompt: "A paper boat drifts along a gutter on a rainy night, with the gentle sound of rain",
    duration: 5,
    resolution: "720p",
    aspect_ratio: "9:16"
  })
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
```

## Выбор режима

Во всех пяти режимах используется одно имя модели — `kling-v4`. Режим выбирается по переданным материалам и `omni_reference_task_type`.

| Режим | Входные данные |
| - | - |
| Генерация по тексту | Без изображений, видео и аудио |
| Генерация по изображению | Первый кадр; дополнительно можно указать последний кадр и до 8 промежуточных |
| Генерация по референсам | Передайте `video_urls`, `audio_urls` или `reference_image` в `image_with_roles`; также можно явно указать `omni_reference_task_type: "reference"` |
| Редактирование видео | Укажите `omni_reference_task_type: "edit"` и входное видео |
| Продление видео | Укажите `omni_reference_task_type: "extend"` и входное видео |

Значение `omni_reference_task_type` по умолчанию — `auto`, что равнозначно отсутствию поля. При явном `reference` изображения из `image_urls` используются как референсы.

> [!WARNING]
>
> Если передать только `video_url` без `edit` или `extend`, возвращается HTTP 400. Чтобы использовать видео как референс, передайте его в `video_urls`.

## Заголовки запроса

**Authorization** `string` *required*

Аутентификация Bearer: `Bearer <token>`, где `<token>` — ваш API-ключ APIMart.

## Параметры запроса

**model** `string` *required*

Должно быть `kling-v4`.

**prompt** `string`

Описание содержимого для генерации или редактирования. Необязательно при генерации по изображению; обязательно в остальных режимах.

При генерации по референсам используйте `@Image1`, `@Video1` и `@Audio1` для ссылок на материалы, пронумерованные с 1 в порядке соответствующего массива. При редактировании входное видео — `@Video1`, а изображения-референсы — `@Image1`, `@Image2` и далее.

**duration** `integer`

Длительность генерации в секундах: от `3` до `30`, по умолчанию `5`.

* Редактирование видео: если поле не задано, длительность результата следует за входным видео.
* Продление видео: длительность нового фрагмента. Возвращается полное видео, объединяющее оригинал и новый фрагмент.

**resolution** `string` (default: 720p)

Разрешение результата: `720p` или `1080p`. Выбирайте разрешение через это поле; V4 не поддерживает `mode`.

**aspect\_ratio** `string`

Поддерживаются `16:9`, `9:16`, `1:1` и `21:9`. При генерации по референсам также доступно `auto`.

| Режим | Поведение по умолчанию |
| - | - |
| Генерация по тексту | `16:9` |
| Генерация по изображению | Следует за первым кадром |
| Генерация по референсам | `auto` |
| Редактирование видео | Следует за входным видео |
| Продление видео | Поле не поддерживается; сохраняется исходное соотношение сторон |

**image\_urls** `string[]`

Список URL изображений. Назначение зависит от режима:

* Генерация по изображению: первое изображение — первый кадр, второе — последний; максимум 2 изображения.
* Генерация по референсам и редактирование видео: до 10 изображений-референсов. Для генерации только по изображениям-референсам явно укажите `omni_reference_task_type: "reference"`.

URL материалов должны быть общедоступными.

**image\_with\_roles** `object[]`

Список изображений с ролями. Каждый элемент содержит `url` и `role`.

| `role` | Назначение |
| - | - |
| `first_frame` | Первый кадр для генерации по изображению; требуется ровно 1 |
| `last_frame` | Последний кадр для генерации по изображению или целевой последний кадр для продления |
| `keyframe` | Промежуточный кадр для генерации по изображению; также принимается `middle_frame`. Используются в порядке массива, максимум 8 изображений |
| `reference_image` | Изображение-референс для генерации по референсам |

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

**first\_frame\_image** `string`

URL первого кадра для генерации по изображению. Его также можно передать как `first_frame` в `image_with_roles` или первым изображением в `image_urls`.

**last\_frame\_image** `string`

URL последнего кадра для генерации по изображению или целевого последнего кадра для продления.

**video\_urls** `string[]`

Видеореференсы: до 5 роликов, суммарно используется не более 30 секунд.

Для редактирования или продления вместо `video_url` также можно передать ровно 1 URL видео, указав `omni_reference_task_type: "edit"` или `"extend"`.

**video\_url** `string`

URL входного видео для редактирования или продления. Требуется `omni_reference_task_type: "edit"` или `"extend"`.

Для редактирования входное видео должно длиться не менее 3 секунд; более короткое возвращает HTTP 400. Если видео длиннее 30 секунд, используются первые 30 секунд.

**audio\_urls** `string[]`

Аудиореференсы: до 3 фрагментов длительностью 5–30 секунд каждый.

При генерации по референсам изображения, видео и аудио должны суммарно составлять не более 15 материалов.

**omni\_reference\_task\_type** `string` (default: auto)

Поддерживаются `auto`, `reference`, `edit` и `extend`.

* `auto`: выбирает генерацию по тексту, изображению или референсам в зависимости от материалов; равнозначно отсутствию поля.
* `reference`: генерация по референсам; изображения из `image_urls` используются как референсы.
* `edit`: редактирование видео; требуется входное видео.
* `extend`: продление видео; требуется входное видео.

**audio\_setting** `string`

Поддерживаются `origin` (сохранить звук входного видео) и `auto` (создать новый звук). Только для редактирования или генерации по референсам с видеореференсами.

* Редактирование видео: по умолчанию сохраняется исходный звук; `auto` создаёт новый.
* Генерация по референсам с видеореференсами: по умолчанию создаётся новый звук; `origin` сохраняет звук видеореференса.
* Продление видео: поле не поддерживается. Исходный звук сохраняется, для нового фрагмента звук создаётся автоматически.

V4 всегда выдаёт видео со стереозвуком; звук и изображение генерируются вместе.

## Примеры запросов

URL материалов ниже приведены для примера. Замените их реальными общедоступными адресами.

### Генерация по изображению: первый и последний кадры

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "The camera slowly moves closer",
  "image_urls": ["https://example.com/start.png", "https://example.com/end.png"]
}
```

Первое изображение — первый кадр, второе — последний. При генерации по изображению `prompt` необязателен.

### Генерация по изображению: первый, промежуточные и последний кадры

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "A girl walks from the window to the door, then looks back and smiles",
  "image_with_roles": [
    {"url": "https://example.com/1.png", "role": "first_frame"},
    {"url": "https://example.com/2.png", "role": "keyframe"},
    {"url": "https://example.com/3.png", "role": "keyframe"},
    {"url": "https://example.com/4.png", "role": "last_frame"}
  ],
  "duration": 10
}
```

Промежуточные кадры используются в порядке массива. Требуется ровно 1 первый кадр; первый, последний и промежуточные кадры — суммарно не более 10 изображений.

### Генерация по референсам

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "The girl in @Image1 runs along the beach with the camera movement from @Video1 and background music from @Audio1",
  "image_with_roles": [
    {"url": "https://example.com/girl.png", "role": "reference_image"}
  ],
  "video_urls": ["https://example.com/camera.mp4"],
  "audio_urls": ["https://example.com/bgm.mp3"],
  "aspect_ratio": "auto",
  "duration": 5
}
```

До 10 изображений, 5 видео и 3 аудиофрагментов, суммарно не более 15 материалов. Видеореференсы используют не более 30 секунд в сумме; каждый аудиореференс должен длиться 5–30 секунд.

### Редактирование видео

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "Change the scene to a snowy winter night",
  "omni_reference_task_type": "edit",
  "video_url": "https://example.com/in.mp4",
  "image_urls": ["https://example.com/style.png"]
}
```

Входное видео должно длиться не менее 3 секунд; если оно длиннее 30 секунд, используются первые 30. Без `duration` и `aspect_ratio` длительность и соотношение сторон следуют за входным видео. Исходный звук сохраняется по умолчанию; `audio_setting: "auto"` создаёт новый звук.

### Продление видео

```json theme={null}
{
  "model": "kling-v4",
  "prompt": "The camera continues moving forward as the sky grows darker",
  "omni_reference_task_type": "extend",
  "video_url": "https://example.com/in.mp4",
  "duration": 5
}
```

Продление начинается с последнего кадра входного видео. Результат объединяет исходное видео и новый фрагмент; оплачивается только длительность нового фрагмента.

Целевой последний кадр можно передать через `last_frame_image` или `last_frame` в `image_with_roles`. Продление не поддерживает `aspect_ratio` и `audio_setting`.

## Запрос состояния задачи

Замените ID задачи в следующем запросе на ID, полученный при отправке:

```bash theme={null}
curl --request GET \
  --url 'https://api.apimart.ai/v1/videos/generations/<task_id>' \
  --header 'Authorization: Bearer <token>'
```

Ориентировочное время генерации: 3 минуты для видео длиной 3 секунды в 720p и 3,5 минуты для видео длиной 15 секунд.

## Оплата

Посекундная оплата. Тарифы приведены на странице [цен моделей](https://apimart.ai/pricing). Для `720p` и `1080p` действуют отдельные тарифы.

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

| Режим | Оплачиваемые секунды |
| - | - |
| Генерация по тексту, по изображению, по референсам только с изображениями или аудио | Секунды результата |
| Продление видео | Секунды нового фрагмента |
| Редактирование видео, генерация по референсам с видеореференсами | Секунды результата + max(секунды результата, секунды входного видео) |

Секунды входного видео рассчитываются как сумма длительностей роликов с округлением вверх до целой секунды, но не более 30 секунд. Например, редактирование видео длиной 3,04 секунды без `duration` даёт 4 секунды результата; оплачивается 4 + 4 = 8 секунд.

При редактировании и генерации по референсам с видеореференсами длительность входного видео определяется при отправке. Если определить её не удалось, возвращается HTTP 400 без списания средств. При сбое генерации средства возвращаются полностью.

## Неподдерживаемые параметры

Следующие параметры или значения возвращают HTTP 400:

* `mode`: у V4 нет уровней `std`, `pro` или `4k`. Используйте `resolution`.
* `negative_prompt`, `watermark: true`, `audio: false`.
* `multi_shot`, `multi_prompt`, `element_list`, `video_list`.
* `camera_control`, `voice_list`.

## Частые ошибки

| Ошибка | Решение |
| - | - |
| `video_url needs omni_reference_task_type edit ... or extend` | Явно задайте `edit` или `extend` при использовании `video_url`; для видеореференсов используйте `video_urls` |
| `image-to-video requires exactly 1 first frame` | Передайте ровно 1 первый кадр; только последнего или промежуточных кадров недостаточно |
| `first frame, last frame and keyframes together are at most 10 images` | Сократите общее число первых, последних и промежуточных кадров до 10 |
| `reference images, videos and audios together are at most 15 files` | Сократите общее число материалов-референсов до 15 |
| `video edit requires an input video of at least 3 seconds` | Используйте входное видео длиной не менее 3 секунд |
| `Failed to probe the input video duration` | Проверьте доступность URL и корректность видеофайла |
| `has no std/pro/4k mode` | Удалите `mode` и используйте `resolution` |
| `Could not download the input from ... (HTTP 403)` | Используйте общедоступный URL материала без защиты от прямых ссылок |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.