curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "kling-v4-flash",
"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-flash",
"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-flash",
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 Flash
Kling V4 Flash Generación de vídeos
Vídeo desde texto, una imagen inicial o referencias de imagen/vídeo, edición y extensión. Solo 720p, 3–20 segundos generados, 24fps.
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-flash",
"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-flash",
"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-flash",
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());
Este endpoint es asíncrono. Tras enviar la solicitud, usa el
task_id devuelto con GET /v1/tasks/{task_id} para consultar el estado y el resultado.curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "kling-v4-flash",
"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-flash",
"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-flash",
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());
Selección del modo
Los cinco modos usan el mismo modelo,kling-v4-flash. El modo se selecciona según los recursos enviados y omni_reference_task_type.
| Modo | Entrada |
|---|---|
| Texto a vídeo | Sin recursos de imagen, vídeo ni audio |
| Imagen a vídeo | Un único fotograma inicial mediante first_frame_image, first_frame en image_with_roles, o la única imagen de image_urls |
| Generación con referencias | Proporciona video_urls o reference_image en image_with_roles, o indica omni_reference_task_type: "reference" explícitamente |
| Edición de vídeo | Establece omni_reference_task_type: "edit" y proporciona un vídeo de entrada |
| Extensión de vídeo | Establece omni_reference_task_type: "extend" y proporciona un vídeo de entrada |
omni_reference_task_type usa auto por defecto, equivalente a omitirlo. Con reference explícito, las imágenes de image_urls se tratan como referencias.
Enviar solo
video_url sin indicar edit o extend devuelve HTTP 400. Para usar un vídeo como referencia, utiliza video_urls.Cabeceras de la solicitud
string
requerido
Autenticación Bearer:
Bearer <token>, donde <token> es tu clave API de APIMart.Parámetros de la solicitud
string
requerido
Debe ser
kling-v4-flash.string
Describe el contenido que se generará o editará. Opcional solo en imagen a vídeo. Usa
@Image1 / @Video1 para referirte a los recursos, numerados desde 1 en cada array. En edición, el vídeo de entrada es @Video1 y las imágenes son @Image1, @Image2, etc.integer
Segundos enteros de
3 a 20, normalmente 5 por defecto. Al editar, si se omite, se usa la duración de entrada redondeada hacia arriba. Al extender, indica el segmento añadido. 0 explícito devuelve HTTP 400; null equivale a omitirlo. Se factura este entero; el archivo puede durar aproximadamente un fotograma más.integer
Alias de
duration, con las mismas reglas. Si se envían ambos, cada valor debe estar entre 3 y 20 y ser idéntico al otro; en caso contrario, HTTP 400.string
predeterminado:"720p"
Solo
720p, valor por defecto. 1080p devuelve HTTP 400. No se admite seleccionar un nivel mediante mode.string
La generación desde texto, con referencias y la edición admiten
16:9, 9:16, 1:1 y 21:9; solo la generación con referencias acepta auto. La generación desde una imagen no admite aspect_ratio / size: los valores no vacíos devuelven HTTP 400; una cadena vacía equivale a omitir el campo. Recorta el fotograma inicial antes del envío para cambiar la proporción.| Modo | Comportamiento predeterminado |
|---|---|
| Texto a vídeo | 16:9 |
| Imagen a vídeo | Omite aspect_ratio / size; sigue el fotograma inicial. Recórtalo antes del envío para cambiar la proporción |
| Generación con referencias | auto |
| Edición de vídeo | Sigue el vídeo de entrada |
| Extensión de vídeo | No admite este campo; conserva la relación de aspecto original |
string[]
Imagen a vídeo acepta una sola imagen inicial; dos devuelven HTTP 400. En referencias y edición se admiten hasta 10 imágenes de referencia. Para referencias solo de imágenes, indica
omni_reference_task_type: "reference". Las URL deben ser públicas. Los fotogramas iniciales y las imágenes de referencia deben tener al menos 300px de ancho y alto, con una proporción ancho:alto entre 2:5 y 5:2. Las imágenes fuera de estos límites devuelven HTTP 400 al enviar la solicitud, sin cobro.object[]
Cada elemento incluye
url y role. Imagen a vídeo acepta un único first_frame; referencias y edición usan reference_image. No se admiten fotogramas finales ni intermedios. Máximo 10 imágenes de referencia y 15 recursos en total, incluidos los vídeos. Los fotogramas iniciales y las imágenes de referencia deben tener al menos 300px de ancho y alto, con una proporción ancho:alto entre 2:5 y 5:2. Las imágenes fuera de estos límites devuelven HTTP 400 al enviar la solicitud, sin cobro.string
URL del fotograma inicial para imagen a vídeo. También puede enviarse como
first_frame en image_with_roles o como primera imagen de image_urls. Los fotogramas iniciales y las imágenes de referencia deben tener al menos 300px de ancho y alto, con una proporción ancho:alto entre 2:5 y 5:2. Las imágenes fuera de estos límites devuelven HTTP 400 al enviar la solicitud, sin cobro.string[]
Hasta 5 vídeos de referencia y 20 segundos en total. Superar el límite devuelve HTTP 400; no se recortan. En edición o extensión, una única entrada puede sustituir a
video_url si se indica el tipo de tarea correspondiente.Los vídeos de referencia deben ser MP4 / MOV, con anchura y altura entre 700 y 4553px cada una. La duración se mide por el flujo de vídeo, no por el contenedor: mínimo 3 segundos por clip y máximo 20 segundos en total. Cualquier vídeo de referencia de menos de 3 segundos devuelve HTTP 400 al enviar la solicitud, sin cobro.string
Vídeo de entrada para edición o extensión. Requiere
omni_reference_task_type: "edit" o "extend" explícito, o devuelve HTTP 400. La entrada de edición debe durar 3–20 segundos. Fuera de ese rango se rechaza sin cargo.La edición admite vídeos MP4 / MOV con anchura y altura entre 700 y 4553px cada una. El límite de 3–20 segundos se basa en el flujo de vídeo, no en el contenedor. Un formato, anchura, altura o duración de entrada no válidos devuelven HTTP 400 al enviar la solicitud, sin cobro.Las entradas de extensión no están sujetas al intervalo de altura ni al mínimo de 3 segundos de la edición. Por ejemplo, se puede extender un vídeo 480p de 2 segundos.string
predeterminado:"auto"
Admite
auto, reference, edit y extend.auto: selecciona texto a vídeo, imagen a vídeo o generación con referencias según los recursos; equivale a omitir el campo.reference: generación con referencias; las imágenes deimage_urlsse tratan como referencias.edit: edición de vídeo; requiere un vídeo de entrada.extend: extensión de vídeo; requiere un vídeo de entrada.
string
Para generación con referencias de vídeo:
origin conserva el audio del primer vídeo de referencia; auto genera audio nuevo y es el valor predeterminado. origin requiere un vídeo de referencia. Si el primero no tiene pista de audio, la salida tampoco tendrá. La edición genera audio nuevo y no conserva el original; omite este parámetro en las solicitudes de edición. La extensión no lo admite.Dimensiones de salida y frecuencia de fotogramas
La salida utiliza el nivel720p, con dimensiones reales en píxeles que varían según la proporción, a 24fps. El archivo puede durar aproximadamente un fotograma más que duration; por ejemplo, una solicitud de 3 segundos produce unos 3.04 segundos.
| Proporción / modo | Dimensiones reales en píxeles |
|---|---|
16:9 | 1280×720 |
9:16 | 720×1280 |
1:1 | 960×960 |
21:9 | 1464×628 |
| Desde una imagen | Sigue el fotograma inicial, unos 0.92MP en total; un fotograma 1:2.5 produce 604×1516 |
Ejemplos de solicitudes
Las URL siguientes son ejemplos ficticios. Sustitúyelas por URL reales y accesibles públicamente.Imagen a vídeo: un único fotograma inicial
{
"model": "kling-v4-flash",
"image_urls": [
"https://example.com/start.png"
]
}
prompt es opcional. No se admiten fotogramas finales, intermedios ni una segunda imagen.
Omite aspect_ratio / size; sigue el fotograma inicial. Recórtalo antes del envío para cambiar la proporción.
Los fotogramas iniciales y las imágenes de referencia deben tener al menos 300px de ancho y alto, con una proporción ancho:alto entre 2:5 y 5:2. Las imágenes fuera de estos límites devuelven HTTP 400 al enviar la solicitud, sin cobro.
Generación con referencias
{
"model": "kling-v4-flash",
"prompt": "The girl in @Image1 runs along the beach with the camera movement from @Video1.",
"image_with_roles": [
{
"url": "https://example.com/girl.png",
"role": "reference_image"
}
],
"video_urls": [
"https://example.com/camera.mp4"
],
"aspect_ratio": "auto",
"duration": 5
}
audio_setting: "origin" para conservar el audio del primer vídeo de referencia. Con origin, si el primer vídeo de referencia no tiene pista de audio, la salida tampoco tendrá.
Los fotogramas iniciales y las imágenes de referencia deben tener al menos 300px de ancho y alto, con una proporción ancho:alto entre 2:5 y 5:2. Las imágenes fuera de estos límites devuelven HTTP 400 al enviar la solicitud, sin cobro.
Los vídeos de referencia deben ser MP4 / MOV, con anchura y altura entre 700 y 4553px cada una. La duración se mide por el flujo de vídeo, no por el contenedor: mínimo 3 segundos por clip y máximo 20 segundos en total. Cualquier vídeo de referencia de menos de 3 segundos devuelve HTTP 400 al enviar la solicitud, sin cobro.
Edición de vídeo
{
"model": "kling-v4-flash",
"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, la duración de entrada se redondea hacia arriba; sin aspect_ratio, se conserva la proporción de entrada. La edición genera audio nuevo sin conservar el original. Omite audio_setting en la solicitud.
Los fotogramas iniciales y las imágenes de referencia deben tener al menos 300px de ancho y alto, con una proporción ancho:alto entre 2:5 y 5:2. Las imágenes fuera de estos límites devuelven HTTP 400 al enviar la solicitud, sin cobro.
La edición admite vídeos MP4 / MOV con anchura y altura entre 700 y 4553px cada una. El límite de 3–20 segundos se basa en el flujo de vídeo, no en el contenedor. Un formato, anchura, altura o duración de entrada no válidos devuelven HTTP 400 al enviar la solicitud, sin cobro.
Extensión de vídeo
{
"model": "kling-v4-flash",
"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
}
aspect_ratio ni audio_setting; se conserva la proporción original.
Las entradas de extensión no están sujetas al intervalo de altura ni al mínimo de 3 segundos de la edición. Por ejemplo, se puede extender un vídeo 480p de 2 segundos.
Consultar una tarea
Sustituye el ID de tarea de la siguiente solicitud por el devuelto al enviarla:curl --request GET \
--url 'https://api.apimart.ai/v1/tasks/<task_id>' \
--header 'Authorization: Bearer <token>'
task_id y consulta hasta completed o failed. Un vídeo 720p de 3 segundos tardó unos 1–4 minutos en las pruebas; es una referencia, no un plazo fijo para declarar un fallo.
Facturación
Se factura por segundo; consulta los precios de modelos. La generación estándar y la entrada de vídeo usan tarifas distintas.| Modo | Segundos facturables |
|---|---|
| Texto a vídeo, imagen a vídeo, referencias solo de imágenes | Segundos de salida; kling-v4-flash@720P |
| Extensión de vídeo | Segundos del segmento añadido; kling-v4-flash@720P |
| Edición, generación con vídeos de referencia | Segundos de salida + max(segundos de salida, segundos de vídeo de entrada); kling-v4-flash@720P-input |
duration: 3 se cobra como 3 + 4 = 7 segundos. La edición y la generación con referencias de vídeo comprueban el formato, la anchura, la altura y la duración del flujo al enviar la solicitud. Un fallo de comprobación, un formato distinto de MP4 / MOV, una anchura o altura fuera de 700–4553px, un total superior a 20 segundos o una entrada de edición inferior a 3 segundos devuelven HTTP 400 sin cobro. Cada referencia se evalúa por la duración de su flujo de vídeo; los clips de menos de 3 segundos devuelven HTTP 400 al enviar la solicitud, sin cobro.
Las tareas fallidas se reembolsan por completo, incluidas las que la plataforma declara agotadas por tiempo. Dejar de consultar desde el cliente no cancela la tarea; si termina correctamente después, se cobra con normalidad.
Parámetros no admitidos
Los siguientes parámetros o valores devuelven HTTP 400:resolution: "1080p"last_frame_image,role: "last_frame",role: "keyframe"audio_urls,audio_urlmode,negative_prompt,watermark: true,audio: falsemulti_shot,multi_prompt,element_list,video_listcamera_control,voice_list
Errores frecuentes
| Error | Solución |
|---|---|
kling-v4-flash only supports resolution 720p (got: 1080p) | Usa 720p, no 1080p. |
kling-v4-flash duration must be between 3 and 20 seconds | Usa un entero de 3 a 20 para duration / seconds; no envíes 0. |
kling-v4-flash image-to-video follows the first frame's aspect ratio; remove aspect_ratio / size | Elimina aspect_ratio / size para generar desde una imagen. La proporción sigue el fotograma inicial; recórtalo antes del envío para cambiarla. |
kling-v4-flash first frame: image width and height must be at least 300px | Los fotogramas iniciales y las imágenes de referencia deben tener al menos 300px en ambos ejes. |
kling-v4-flash first frame: image aspect ratio (width:height) must be between 2:5 and 5:2 | Usa una proporción ancho:alto entre 2:5 y 5:2. |
kling-v4-flash input video #1: unsupported video format webm/mkv (supported: mp4/mov) | Usa MP4 / MOV para edición o referencias de vídeo; WebM / MKV no son compatibles. |
kling-v4-flash input video #1: video height must be between 700 and 4553px | Los vídeos de edición y referencia requieren anchura y altura entre 700 y 4553px cada una. Este intervalo no se aplica a entradas de extensión. |
kling-v4-flash input video #1: video width must be between 700 and 4553px | La anchura y la altura de los vídeos de edición y referencia deben estar entre 700 y 4553px cada una. Los vídeos verticales también deben tener al menos 700px de ancho. |
kling-v4-flash reference video #1 must be at least 3 seconds | El flujo de vídeo de cada referencia debe durar al menos 3 segundos. Los clips más cortos devuelven HTTP 400 al enviar la solicitud, sin cobro. |
kling-v4-flash only supports aspect_ratio 16:9, 9:16, 1:1 or 21:9 (got: auto) | Solo la generación con referencias admite auto; omite los campos de proporción al generar desde una imagen. |
kling-v4-flash image-to-video only takes a first frame; last frame and keyframes are not supported | Conserva una imagen inicial; elimina fotogramas finales/intermedios o la segunda imagen. |
kling-v4-flash reference-to-video does not take reference audios | Elimina audio_urls / audio_url. |
kling-v4-flash video extend takes no images | Elimina las imágenes y el fotograma final objetivo de las extensiones. |
kling-v4-flash input videos must be at most 20 seconds in total | Los vídeos de referencia o la entrada de edición no pueden superar 20 segundos. No hay recorte automático. |
video edit requires an input video of at least 3 seconds | Usa una entrada de edición cuyo flujo de vídeo dure al menos 3 segundos, sin basarte en la duración del contenedor. |
video_url needs omni_reference_task_type edit ... or extend | Especifica edit / extend; usa video_urls para referencias. |
Failed to probe the input video duration | Comprueba que la URL sea accesible y contenga un vídeo válido. |
duration (3) and seconds (5) are aliases and must match | Envía un solo alias o dos valores iguales dentro de 3–20. |