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 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.
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());
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.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());
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.
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
string
requis
Authentification Bearer :
Bearer <token>, où <token> est votre clé API APIMart.Paramètres de requête
string
requis
Doit être
kling-v4.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.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.
string
défaut:"720p"
Résolution de sortie :
720p ou 1080p. Utilisez ce champ pour choisir la résolution ; V4 ne prend pas en charge mode.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é |
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".
object[]
Liste d’images avec leur rôle. Chaque élément contient
En image-vidéo, les images initiale, finale et intermédiaires ne doivent pas dépasser 10 images au total.
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 |
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.string
URL de l’image finale pour image-vidéo, ou de l’image finale cible pour un prolongement.
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".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.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.
string
défaut:"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 deimage_urlssont 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.
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 ;
autogé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 ;
originconserve 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é.
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
{
"model": "kling-v4",
"prompt": "The camera slowly moves closer",
"image_urls": ["https://example.com/start.png", "https://example.com/end.png"]
}
prompt est facultatif en image-vidéo.
Image-vidéo : images initiale, intermédiaires et finale
{
"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
}
Génération à partir de références
{
"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
}
Montage vidéo
{
"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 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
{
"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 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 :curl --request GET \
--url 'https://api.apimart.ai/v1/videos/generations/<task_id>' \
--header 'Authorization: Bearer <token>'
Facturation
Facturation à la seconde. Consultez les tarifs des modèles.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) |
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 niveauxstd,proou4k. Utilisezresolution.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 |