> ## 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 Génération de vidéos

> Génération texte-vidéo, image-vidéo et à partir de références, montage et prolongement de vidéos. 3–30 secondes en 720p / 1080p, toujours avec un son stéréo.

> [!NOTE]
>
> Ce point de terminaison est asynchrone. Après l’envoi, utilisez le `task_id` renvoyé avec `GET /v1/videos/generations/{task_id}` pour consulter l’état et le résultat de la tâche.

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

## Choix du mode

Les cinq modes utilisent le même nom de modèle, `kling-v4`. Le mode est choisi selon les médias fournis et `omni_reference_task_type`.

| Mode | Entrée |
| - | - |
| Texte-vidéo | Aucun média image, vidéo ou audio |
| Image-vidéo | Une image initiale, avec une image finale et jusqu’à 8 images intermédiaires facultatives |
| Génération à partir de références | Fournir `video_urls`, `audio_urls` ou `reference_image` dans `image_with_roles` ; ou définir explicitement `omni_reference_task_type: "reference"` |
| Montage vidéo | Définir `omni_reference_task_type: "edit"` et fournir une vidéo d’entrée |
| Prolongement vidéo | Définir `omni_reference_task_type: "extend"` et fournir une vidéo d’entrée |

`omni_reference_task_type` vaut `auto` par défaut, ce qui équivaut à l’omettre. Avec la valeur explicite `reference`, les images de `image_urls` sont traitées comme des références.

> [!WARNING]
>
> Fournir uniquement `video_url` sans préciser `edit` ou `extend` renvoie HTTP 400. Pour utiliser une vidéo comme référence, utilisez `video_urls`.

## En-têtes de requête

**Authorization** `string` *required*

Authentification Bearer : `Bearer <token>`, où `<token>` est votre clé API APIMart.

## Paramètres de requête

**model** `string` *required*

Doit être `kling-v4`.

**prompt** `string`

Décrit le contenu à générer ou à modifier. Facultatif en image-vidéo, obligatoire dans tous les autres modes.

Pour la génération à partir de références, utilisez `@Image1`, `@Video1` et `@Audio1` pour désigner les médias, numérotés à partir de 1 selon l’ordre de chaque tableau. En montage vidéo, la vidéo d’entrée est `@Video1` et les images de référence sont `@Image1`, `@Image2`, etc.

**duration** `integer`

Durée générée en secondes, de `3` à `30` ; valeur par défaut : `5`.

* Montage vidéo : si omis, la durée de sortie suit celle de la vidéo d’entrée.
* Prolongement vidéo : durée du nouveau segment. La vidéo renvoyée réunit la vidéo originale et le nouveau segment.

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

Résolution de sortie : `720p` ou `1080p`. Utilisez ce champ pour choisir la résolution ; V4 ne prend pas en charge `mode`.

**aspect\_ratio** `string`

Valeurs prises en charge : `16:9`, `9:16`, `1:1` et `21:9`. La génération à partir de références accepte aussi `auto`.

| Mode | Comportement par défaut |
| - | - |
| Texte-vidéo | `16:9` |
| Image-vidéo | Suit l’image initiale |
| Génération à partir de références | `auto` |
| Montage vidéo | Suit la vidéo d’entrée |
| Prolongement vidéo | Ce champ n’est pas accepté ; le rapport d’aspect original est conservé |

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

Liste d’URL d’images, interprétée selon le mode :

* Image-vidéo : la première image est l’image initiale, la deuxième est l’image finale ; 2 images maximum.
* Génération à partir de références et montage vidéo : jusqu’à 10 images de référence. Pour générer une vidéo avec uniquement des images de référence, définissez explicitement `omni_reference_task_type: "reference"`.

Les URL des médias doivent être accessibles publiquement.

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

Liste d’images avec leur rôle. Chaque élément contient `url` et `role`.

| `role` | Utilisation |
| - | - |
| `first_frame` | Image initiale pour image-vidéo ; exactement 1 requise |
| `last_frame` | Image finale pour image-vidéo, ou image finale cible pour un prolongement |
| `keyframe` | Image intermédiaire pour image-vidéo ; `middle_frame` est aussi accepté. Utilisation dans l’ordre du tableau, jusqu’à 8 images |
| `reference_image` | Image de référence pour la génération à partir de références |

En image-vidéo, les images initiale, finale et intermédiaires ne doivent pas dépasser 10 images au total.

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

URL de l’image initiale pour image-vidéo. Peut aussi être fournie via `first_frame` dans `image_with_roles`, ou comme première image de `image_urls`.

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

URL de l’image finale pour image-vidéo, ou de l’image finale cible pour un prolongement.

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

Vidéos de référence : jusqu’à 5 clips, avec au maximum 30 secondes utilisées au total.

Pour le montage ou le prolongement, vous pouvez aussi fournir exactement 1 URL vidéo à la place de `video_url`, avec `omni_reference_task_type: "edit"` ou `"extend"`.

**video\_url** `string`

URL de la vidéo d’entrée pour le montage ou le prolongement. Nécessite `omni_reference_task_type: "edit"` ou `"extend"`.

En montage, la vidéo d’entrée doit durer au moins 3 secondes ; une durée inférieure renvoie HTTP 400. Au-delà de 30 secondes, seules les 30 premières secondes sont utilisées.

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

Audio de référence : jusqu’à 3 clips, de 5 à 30 secondes chacun.

Pour la génération à partir de références, les images, vidéos et audios ne doivent pas dépasser 15 médias au total.

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

Valeurs prises en charge : `auto`, `reference`, `edit` et `extend`.

* `auto` : choisit texte-vidéo, image-vidéo ou génération à partir de références selon les médias ; équivaut à omettre le champ.
* `reference` : génération à partir de références ; les images de `image_urls` sont traitées comme des références.
* `edit` : montage vidéo ; nécessite une vidéo d’entrée.
* `extend` : prolongement vidéo ; nécessite une vidéo d’entrée.

**audio\_setting** `string`

Accepte `origin` (conserver le son de la vidéo d’entrée) et `auto` (générer un nouveau son). Réservé au montage vidéo ou à la génération à partir de références incluant des vidéos.

* Montage vidéo : conserve le son original par défaut ; `auto` génère un nouveau son.
* Génération à partir de références incluant des vidéos : génère un nouveau son par défaut ; `origin` conserve le son de la vidéo de référence.
* Prolongement vidéo : ce champ n’est pas accepté. Le son original est conservé et le nouveau segment reçoit automatiquement un son généré.

V4 produit toujours une vidéo avec une piste stéréo ; le son et l’image sont générés ensemble.

## Exemples de requêtes

Les URL ci-dessous sont des exemples fictifs. Remplacez-les par des URL réelles et accessibles publiquement.

### Image-vidéo : images initiale et finale

```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 première image est l’image initiale, la deuxième est l’image finale. `prompt` est facultatif en image-vidéo.

### Image-vidéo : images initiale, intermédiaires et finale

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

Les images intermédiaires sont utilisées dans l’ordre du tableau. Il faut exactement 1 image initiale et au maximum 10 images au total, en comptant les images initiale, finale et intermédiaires.

### Génération à partir de références

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

Jusqu’à 10 images, 5 vidéos et 3 clips audio de référence, avec au maximum 15 médias au total. Les vidéos utilisent au plus 30 secondes au total ; chaque clip audio doit durer de 5 à 30 secondes.

### Montage vidéo

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

La vidéo d’entrée doit durer au moins 3 secondes ; au-delà de 30 secondes, seules les 30 premières secondes sont utilisées. Sans `duration` ni `aspect_ratio`, la durée et le rapport d’aspect suivent la vidéo d’entrée. Le son original est conservé par défaut ; utilisez `audio_setting: "auto"` pour générer un nouveau son.

### Prolongement vidéo

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

Le prolongement commence à la dernière image de la vidéo d’entrée. Le résultat réunit la vidéo originale et le nouveau segment ; seule la durée du nouveau segment est facturée.

Fournissez une image finale cible avec `last_frame_image` ou `last_frame` dans `image_with_roles`. Le prolongement n’accepte ni `aspect_ratio` ni `audio_setting`.

## Consulter une tâche

Remplacez l’identifiant de tâche dans la requête suivante par celui renvoyé à l’envoi :

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

Temps de génération indicatif : 3 minutes pour une vidéo de 3 secondes en 720p, et 3,5 minutes pour une vidéo de 15 secondes.

## Facturation

Facturation à la seconde. Consultez les [tarifs des modèles](https://apimart.ai/pricing). `720p` et `1080p` ont des tarifs distincts.

Le montage vidéo et la génération à partir de références incluant des vidéos utilisent le tarif avec vidéo en entrée. Les autres modes utilisent le tarif de génération standard.

| Mode | Secondes facturées |
| - | - |
| Texte-vidéo, image-vidéo, génération à partir de références avec uniquement des images ou de l’audio | Secondes de sortie |
| Prolongement vidéo | Secondes du nouveau segment |
| Montage vidéo, génération à partir de références incluant des vidéos | Secondes de sortie + max(secondes de sortie, secondes de vidéo d’entrée) |

Les secondes de vidéo d’entrée sont calculées en additionnant les durées, puis en arrondissant à la seconde supérieure, avec un plafond de 30 secondes. Par exemple, le montage d’une vidéo de 3,04 secondes sans `duration` produit 4 secondes, facturées 4 + 4 = 8 secondes.

Pour le montage et la génération à partir de références incluant des vidéos, la durée d’entrée est analysée lors de l’envoi. Un échec de l’analyse renvoie HTTP 400 sans facturation. Les générations échouées sont intégralement remboursées.

## Paramètres non pris en charge

Les paramètres ou valeurs suivants renvoient HTTP 400 :

* `mode` : V4 ne propose pas de niveaux `std`, `pro` ou `4k`. Utilisez `resolution`.
* `negative_prompt`, `watermark: true`, `audio: false`.
* `multi_shot`, `multi_prompt`, `element_list`, `video_list`.
* `camera_control`, `voice_list`.

## Erreurs courantes

| Erreur | Solution |
| - | - |
| `video_url needs omni_reference_task_type edit ... or extend` | Précisez `edit` ou `extend` avec `video_url` ; utilisez `video_urls` pour les vidéos de référence |
| `image-to-video requires exactly 1 first frame` | Fournissez exactement 1 image initiale ; des images finales ou intermédiaires seules ne suffisent pas |
| `first frame, last frame and keyframes together are at most 10 images` | Limitez le total des images initiale, finale et intermédiaires à 10 |
| `reference images, videos and audios together are at most 15 files` | Limitez le total des médias de référence à 15 |
| `video edit requires an input video of at least 3 seconds` | Utilisez une vidéo d’entrée d’au moins 3 secondes |
| `Failed to probe the input video duration` | Vérifiez que l’URL est accessible et pointe vers un fichier vidéo valide |
| `has no std/pro/4k mode` | Supprimez `mode` et utilisez `resolution` |
| `Could not download the input from ... (HTTP 403)` | Utilisez une URL publique sans protection contre les liens directs |


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