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 Generación de vídeos
Texto a vídeo, imagen a vídeo, generación con referencias, edición y extensión de vídeo. Genera 3–30 segundos en 720p / 1080p, siempre con audio estéreo.
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());
Este endpoint es asíncrono. Tras enviar la solicitud, usa el
task_id devuelto con GET /v1/videos/generations/{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",
"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());
Selección del modo
Los cinco modos usan el mismo modelo,kling-v4. 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 fotograma inicial; opcionalmente, uno final y hasta 8 intermedios |
| Generación con referencias | Envía video_urls, audio_urls o reference_image en image_with_roles; también puedes indicar explícitamente omni_reference_task_type: "reference" |
| 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.string
Describe el contenido que se generará o editará. Opcional para imagen a vídeo; obligatorio en los demás modos.En la generación con referencias, usa
@Image1, @Video1 y @Audio1 para referirte a los recursos, numerados desde 1 según el orden de cada lista. En la edición, el vídeo de entrada es @Video1 y las imágenes de referencia son @Image1, @Image2, etc.integer
Duración generada en segundos, de
3 a 30; valor predeterminado: 5.- Edición de vídeo: si se omite, la duración de salida sigue la del vídeo de entrada.
- Extensión de vídeo: duración del segmento nuevo. Se devuelve el vídeo completo, con el original y el segmento nuevo concatenados.
string
predeterminado:"720p"
Resolución de salida:
720p o 1080p. Usa este campo para elegir la resolución; V4 no admite mode.string
Admite
16:9, 9:16, 1:1 y 21:9. La generación con referencias también admite auto.| Modo | Comportamiento predeterminado |
|---|---|
| Texto a vídeo | 16:9 |
| Imagen a vídeo | Sigue el fotograma inicial |
| 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[]
Lista de URL de imágenes, interpretada según el modo:
- Imagen a vídeo: la primera imagen es el fotograma inicial y la segunda es el final; máximo 2 imágenes.
- Generación con referencias y edición de vídeo: hasta 10 imágenes de referencia. Para generar usando solo imágenes de referencia, indica explícitamente
omni_reference_task_type: "reference".
object[]
Lista de imágenes con roles. Cada elemento contiene
En imagen a vídeo, los fotogramas inicial, final e intermedios no pueden superar las 10 imágenes en total.
url y role.role | Uso |
|---|---|
first_frame | Fotograma inicial para imagen a vídeo; se requiere exactamente 1 |
last_frame | Fotograma final para imagen a vídeo, o fotograma final de destino para extensión |
keyframe | Fotograma intermedio para imagen a vídeo; también acepta middle_frame. Se usan en el orden de la lista, hasta 8 imágenes |
reference_image | Imagen de referencia para generación con referencias |
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.string
URL del fotograma final para imagen a vídeo, o del fotograma final de destino para extensión.
string[]
Vídeos de referencia para generación con referencias: hasta 5 clips, con un máximo de 30 segundos utilizados en total.Para edición o extensión, también puedes enviar exactamente 1 URL de vídeo en lugar de
video_url, indicando omni_reference_task_type: "edit" o "extend".string
URL del vídeo de entrada para edición o extensión. Requiere
omni_reference_task_type: "edit" o "extend".En edición, el vídeo de entrada debe durar al menos 3 segundos; una duración inferior devuelve HTTP 400. Si supera los 30 segundos, se usan los primeros 30.string[]
Audio de referencia para generación con referencias: hasta 3 clips de 5–30 segundos cada uno.En generación con referencias, las imágenes, vídeos y audios no pueden superar los 15 recursos en total.
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
Admite
origin (conservar el audio del vídeo de entrada) y auto (generar audio nuevo). Solo para edición o generación con referencias que incluya vídeos.- Edición de vídeo: conserva el audio original por defecto;
autogenera audio nuevo. - Generación con referencias que incluya vídeos: genera audio nuevo por defecto;
originconserva el audio del vídeo de referencia. - Extensión de vídeo: no admite este campo. Conserva el audio original y genera audio automáticamente para el segmento nuevo.
Ejemplos de solicitudes
Las URL siguientes son ejemplos ficticios. Sustitúyelas por URL reales y accesibles públicamente.Imagen a vídeo: fotogramas inicial y final
{
"model": "kling-v4",
"prompt": "The camera slowly moves closer",
"image_urls": ["https://example.com/start.png", "https://example.com/end.png"]
}
prompt es opcional en imagen a vídeo.
Imagen a vídeo: fotogramas inicial, intermedios y final
{
"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
}
Generación con referencias
{
"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
}
Edición de vídeo
{
"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 y aspect_ratio, la duración y la relación de aspecto siguen las del vídeo de entrada. Se conserva el audio original por defecto; usa audio_setting: "auto" para generar audio nuevo.
Extensión de vídeo
{
"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 o last_frame en image_with_roles. La extensión no admite aspect_ratio ni audio_setting.
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/videos/generations/<task_id>' \
--header 'Authorization: Bearer <token>'
Facturación
Se factura por segundo. Consulta las tarifas de los modelos.720p y 1080p tienen precios distintos.
La edición y la generación con referencias que incluya vídeos usan la tarifa con vídeo de entrada. Los demás modos usan la tarifa de generación estándar.
| Modo | Segundos facturables |
|---|---|
| Texto a vídeo, imagen a vídeo, generación con referencias solo de imágenes o audio | Segundos de salida |
| Extensión de vídeo | Segundos del segmento nuevo |
| Edición de vídeo, generación con referencias que incluya vídeos | Segundos de salida + max(segundos de salida, segundos de vídeo de entrada) |
duration produce 4 segundos y se factura como 4 + 4 = 8 segundos.
En edición y generación con referencias que incluya vídeos, se analiza la duración del vídeo de entrada al enviar la solicitud. Si falla el análisis, se devuelve HTTP 400 sin cobrar. Las generaciones fallidas reciben un reembolso completo.
Parámetros no admitidos
Los siguientes parámetros o valores devuelven HTTP 400:mode: V4 no tiene nivelesstd,proni4k. Usaresolution.negative_prompt,watermark: true,audio: false.multi_shot,multi_prompt,element_list,video_list.camera_control,voice_list.
Errores frecuentes
| Error | Solución |
|---|---|
video_url needs omni_reference_task_type edit ... or extend | Indica edit o extend con video_url; usa video_urls para vídeos de referencia |
image-to-video requires exactly 1 first frame | Envía exactamente 1 fotograma inicial; no basta con fotogramas finales o intermedios |
first frame, last frame and keyframes together are at most 10 images | Reduce el total de fotogramas inicial, final e intermedios a un máximo de 10 |
reference images, videos and audios together are at most 15 files | Reduce el total de recursos de referencia a un máximo de 15 |
video edit requires an input video of at least 3 seconds | Usa un vídeo de entrada de al menos 3 segundos |
Failed to probe the input video duration | Comprueba que la URL sea accesible y apunte a un archivo de vídeo válido |
has no std/pro/4k mode | Elimina mode y usa resolution |
Could not download the input from ... (HTTP 403) | Usa una URL pública sin protección contra enlaces directos |