> ## 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 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.

> [!NOTE]
>
> 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.

```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());
```

## 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.

> [!WARNING]
>
> 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

**Authorization** `string` *required*

Autenticación Bearer: `Bearer <token>`, donde `<token>` es tu clave API de APIMart.

## Parámetros de la solicitud

**model** `string` *required*

Debe ser `kling-v4`.

**prompt** `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.

**duration** `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.

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

Resolución de salida: `720p` o `1080p`. Usa este campo para elegir la resolución; V4 no admite `mode`.

**aspect\_ratio** `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 |

**image\_urls** `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"`.

Las URL de los recursos deben ser accesibles públicamente.

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

Lista de imágenes con roles. Cada elemento contiene `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 |

En imagen a vídeo, los fotogramas inicial, final e intermedios no pueden superar las 10 imágenes en total.

**first\_frame\_image** `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`.

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

URL del fotograma final para imagen a vídeo, o del fotograma final de destino para extensión.

**video\_urls** `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"`.

**video\_url** `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.

**audio\_urls** `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.

**omni\_reference\_task\_type** `string` (default: 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 de `image_urls` se 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.

**audio\_setting** `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; `auto` genera audio nuevo.
* Generación con referencias que incluya vídeos: genera audio nuevo por defecto; `origin` conserva 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.

V4 siempre produce vídeos con audio estéreo; el sonido y la imagen se generan juntos.

## 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

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

La primera imagen es el fotograma inicial y la segunda es el final. `prompt` es opcional en imagen a vídeo.

### Imagen a vídeo: fotogramas inicial, intermedios y final

```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
}
```

Los fotogramas intermedios se usan en el orden de la lista. Se requiere exactamente 1 fotograma inicial, con un máximo de 10 imágenes entre inicial, final e intermedias.

### Generación con referencias

```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
}
```

Hasta 10 imágenes, 5 vídeos y 3 clips de audio de referencia, con un máximo de 15 recursos en total. Los vídeos usan hasta 30 segundos en total; cada audio debe durar 5–30 segundos.

### Edición de vídeo

```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"]
}
```

El vídeo de entrada debe durar al menos 3 segundos; si supera los 30, se usan los primeros 30. Si se omiten `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

```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
}
```

La extensión comienza desde el último fotograma del vídeo de entrada. El resultado combina el vídeo original y el segmento nuevo; solo se factura la duración del segmento nuevo.

Proporciona un fotograma final de destino con `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:

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

Tiempo de generación orientativo: 3 minutos para un vídeo de 3 segundos en 720p y 3,5 minutos para uno de 15 segundos.

## Facturación

Se factura por segundo. Consulta las [tarifas de los modelos](https://apimart.ai/pricing). `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) |

Los segundos de vídeo de entrada se calculan sumando las duraciones, redondeando al segundo superior y limitando el total a 30 segundos. Por ejemplo, editar un vídeo de 3,04 segundos sin `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 niveles `std`, `pro` ni `4k`. Usa `resolution`.
* `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 |


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