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"
}'
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())
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
Kling V4 Генерация видео
Генерация по тексту, изображению и референсам, редактирование и продление видео. От 3 до 30 секунд в 720p / 1080p, всегда со стереозвуком.
POST
/
v1
/
videos
/
generations
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"
}'
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())
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());
Этот эндпоинт работает асинхронно. После отправки используйте полученный
task_id в GET /v1/videos/generations/{task_id}, чтобы узнать статус и результат задачи.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"
}'
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())
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 используются как референсы.
Если передать только
video_url без edit или extend, возвращается HTTP 400. Чтобы использовать видео как референс, передайте его в video_urls.Заголовки запроса
string
обязательно
Аутентификация Bearer:
Bearer <token>, где <token> — ваш API-ключ APIMart.Параметры запроса
string
обязательно
Должно быть
kling-v4.string
Описание содержимого для генерации или редактирования. Необязательно при генерации по изображению; обязательно в остальных режимах.При генерации по референсам используйте
@Image1, @Video1 и @Audio1 для ссылок на материалы, пронумерованные с 1 в порядке соответствующего массива. При редактировании входное видео — @Video1, а изображения-референсы — @Image1, @Image2 и далее.integer
Длительность генерации в секундах: от
3 до 30, по умолчанию 5.- Редактирование видео: если поле не задано, длительность результата следует за входным видео.
- Продление видео: длительность нового фрагмента. Возвращается полное видео, объединяющее оригинал и новый фрагмент.
string
по умолчанию:"720p"
Разрешение результата:
720p или 1080p. Выбирайте разрешение через это поле; V4 не поддерживает mode.string
Поддерживаются
16:9, 9:16, 1:1 и 21:9. При генерации по референсам также доступно auto.| Режим | Поведение по умолчанию |
|---|---|
| Генерация по тексту | 16:9 |
| Генерация по изображению | Следует за первым кадром |
| Генерация по референсам | auto |
| Редактирование видео | Следует за входным видео |
| Продление видео | Поле не поддерживается; сохраняется исходное соотношение сторон |
string[]
Список URL изображений. Назначение зависит от режима:
- Генерация по изображению: первое изображение — первый кадр, второе — последний; максимум 2 изображения.
- Генерация по референсам и редактирование видео: до 10 изображений-референсов. Для генерации только по изображениям-референсам явно укажите
omni_reference_task_type: "reference".
object[]
Список изображений с ролями. Каждый элемент содержит
При генерации по изображению первый, последний и промежуточные кадры должны суммарно составлять не более 10 изображений.
url и role.role | Назначение |
|---|---|
first_frame | Первый кадр для генерации по изображению; требуется ровно 1 |
last_frame | Последний кадр для генерации по изображению или целевой последний кадр для продления |
keyframe | Промежуточный кадр для генерации по изображению; также принимается middle_frame. Используются в порядке массива, максимум 8 изображений |
reference_image | Изображение-референс для генерации по референсам |
string
URL первого кадра для генерации по изображению. Его также можно передать как
first_frame в image_with_roles или первым изображением в image_urls.string
URL последнего кадра для генерации по изображению или целевого последнего кадра для продления.
string[]
Видеореференсы: до 5 роликов, суммарно используется не более 30 секунд.Для редактирования или продления вместо
video_url также можно передать ровно 1 URL видео, указав omni_reference_task_type: "edit" или "extend".string
URL входного видео для редактирования или продления. Требуется
omni_reference_task_type: "edit" или "extend".Для редактирования входное видео должно длиться не менее 3 секунд; более короткое возвращает HTTP 400. Если видео длиннее 30 секунд, используются первые 30 секунд.string[]
Аудиореференсы: до 3 фрагментов длительностью 5–30 секунд каждый.При генерации по референсам изображения, видео и аудио должны суммарно составлять не более 15 материалов.
string
по умолчанию:"auto"
Поддерживаются
auto, reference, edit и extend.auto: выбирает генерацию по тексту, изображению или референсам в зависимости от материалов; равнозначно отсутствию поля.reference: генерация по референсам; изображения изimage_urlsиспользуются как референсы.edit: редактирование видео; требуется входное видео.extend: продление видео; требуется входное видео.
string
Поддерживаются
origin (сохранить звук входного видео) и auto (создать новый звук). Только для редактирования или генерации по референсам с видеореференсами.- Редактирование видео: по умолчанию сохраняется исходный звук;
autoсоздаёт новый. - Генерация по референсам с видеореференсами: по умолчанию создаётся новый звук;
originсохраняет звук видеореференса. - Продление видео: поле не поддерживается. Исходный звук сохраняется, для нового фрагмента звук создаётся автоматически.
Примеры запросов
URL материалов ниже приведены для примера. Замените их реальными общедоступными адресами.Генерация по изображению: первый и последний кадры
{
"model": "kling-v4",
"prompt": "The camera slowly moves closer",
"image_urls": ["https://example.com/start.png", "https://example.com/end.png"]
}
prompt необязателен.
Генерация по изображению: первый, промежуточные и последний кадры
{
"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
}
Генерация по референсам
{
"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
}
Редактирование видео
{
"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"]
}
duration и aspect_ratio длительность и соотношение сторон следуют за входным видео. Исходный звук сохраняется по умолчанию; audio_setting: "auto" создаёт новый звук.
Продление видео
{
"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, полученный при отправке:curl --request GET \
--url 'https://api.apimart.ai/v1/videos/generations/<task_id>' \
--header 'Authorization: Bearer <token>'
Оплата
Посекундная оплата. Тарифы приведены на странице цен моделей. Для720p и 1080p действуют отдельные тарифы.
Для редактирования и генерации по референсам с видеореференсами применяется тариф с входным видео. Для остальных режимов используется стандартный тариф генерации.
| Режим | Оплачиваемые секунды |
|---|---|
| Генерация по тексту, по изображению, по референсам только с изображениями или аудио | Секунды результата |
| Продление видео | Секунды нового фрагмента |
| Редактирование видео, генерация по референсам с видеореференсами | Секунды результата + max(секунды результата, секунды входного видео) |
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 материала без защиты от прямых ссылок |