Passer à la documentation
Sur cette page

Kling 4.0

Générez des vidéos avec Kling 4.0 à partir de texte, de premières et dernières images, ou de références multimodales. Cette page décrit l'ensemble du flux de travail, de la requête au résultat.

ID de modèle API: kling-4-0

La génération est asynchrone. Enregistrez le taskId renvoyé lors de la création de la tâche, puis interrogez son statut ou configurez un webhook.

Fonctionnalités

FonctionnalitéValeurs acceptées
Résolution de sortie720p · 1080p
Durée de sortie3–30 s
Format d'imageauto, 16:9, 9:16, 1:1, 21:9
Images de référenceJusqu'à 10 images
Vidéos de référenceJusqu'à 5 vidéos
Fichiers audio de référenceJusqu'à 3 fichiers audio
Total des références cumuléesJusqu'à 15 fichiers de référence au total
Vidéos de référence (Σ)30 secondes
seedNon pris en charge

Tarifs et crédits

La génération vidéo est facturée en crédits selon la durée facturable en secondes. Sans vidéo source, la durée facturable correspond à la durée de la vidéo générée. Avec une vidéo source, elle inclut également la durée de la vidéo de référence.

Le tableau ci-dessous indique les crédits débités par seconde, et non le coût total d'une tâche. Le tarif dépend du modèle, de la résolution de sortie et de l'utilisation ou non de vidéos de référence en mode référence-vidéo. Reportez-vous aux formules et exemples sous le tableau pour calculer le coût total.

Résolution de sortieSans vidéo sourceAvec vidéo source
720p13 crédits/seconde8 crédits/seconde
1080p20 crédits/seconde13 crédits/seconde
  • Sans vidéo source : secondes générées × tarif sans vidéo.
  • Avec une entrée vidéo, T est la durée totale des vidéos de référence mesurée en secondes par le serveur. Arrondissez le coût final au crédit supérieur. ceil((duration + max(duration, T)) × rate)
  • Les références d'images ou d'audio seules sont facturées au tarif sans vidéo. Le tarif avec vidéo s'applique uniquement dans le mode référence-vidéo lorsque des fichiers vidéo sont fournis.

Exemples de facturation

Génération de texte en vidéo de 5 secondes en 720p : 5 × 13 = 65 crédits.

Génération de 5 secondes en 720p avec une vidéo de référence de 5 secondes : (5 + 5) × 8 = 80 crédits.

Les crédits sont réservés lors de la soumission et débités une fois la tâche réussie. Les tâches échouées ou expirées entrent dans un processus de remboursement. Le statut de facturation refund_failed indique que le remboursement n'a pas pu aboutir ; vérifiez vos journaux d'API ou contactez le support.

Authentification

Générez une clé API depuis votre tableau de bord. La clé complète ne s'affiche qu'une seule fois. Conservez-la en toute sécurité sur votre serveur et transmettez-la comme jeton Bearer lors de chaque requête.

URL de base

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Définissez la variable d'environnement SEEVIO_API_KEY avant d'exécuter ces exemples. Les exemples en JavaScript s'exécutent sur votre serveur avec Node.js ; les exemples en Python utilisent la bibliothèque requests.

Démarrage rapide

Envoyez cette requête minimale, enregistrez le taskId renvoyé, puis utilisez l'exemple d'interrogation de tâche ci-dessous. Le montant des crédits affiché dans la réponse de création correspond à la provision réservée.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video"
  }
}'

Exemple de réponse à la création de tâche

Une fois la requête ci-dessus acceptée, l'API renvoie cette réponse au format JSON. taskId correspond à l'identifiant de tâche à utiliser pour les requêtes de statut ultérieures ; credits indique le nombre de crédits réservés pour cette tâche. Cette réponse confirme la création de la tâche, et non la finalisation de la vidéo. Vous devez interroger le statut de la tâche ou utiliser un Webhook pour obtenir le rendu vidéo final.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 65
}

Créer une tâche

POST https://api.seevio.ai/v1/videos/generations

Envoyez un objet JSON contenant model et input, ainsi qu'une callback_url facultative. Spécifiez toujours l'ID du modèle affiché sur cette page. Si vous l'omettez, le modèle seedance-2-0 sera sélectionné par défaut.

Corps de la requête

ChampTypeRequisDescription et contraintes
model
stringOui

Identifiant du modèle. Pour utiliser Kling 4.0, définissez ce champ sur kling-4-0.

callback_url
stringNon

Point de terminaison HTTPS public pour recevoir les appels POST en cas de succès ou d'échec. Les réseaux privés et localhost ne sont pas autorisés.

Exemple: https://example.com/webhooks/seevio
input
objectOui

Paramètres d'entrée

Paramètres d'entrée

ChampTypePar défautDescription et contraintes
input.generation_typestringtext-to-videotext-to-video | image-to-video | reference-to-video
input.promptstring—8000 caractères maximum. Facultatif uniquement en mode image vers vidéo. Numérotez les références par type dans l’ordre du tableau à partir de @Image1, @Video1 et @Audio1.
input.durationinteger53–30 s
input.resolutionstring720p720p | 1080p
input.aspect_ratiostringSelon le mode
Valeurs acceptéesauto16:99:161:121:9

Un rapport fixe détermine le format de sortie. Si le champ est omis ou vaut auto, le mode texte utilise 16:9 et le mode image reprend le format de la première image. Le mode référence détermine le format à partir des images ou vidéos de référence.

input.image_urlsstring[][]En mode image, fournissez la première image puis éventuellement la dernière. Le mode référence accepte jusqu’à 10 images.
input.keyframe_urlsstring[][]Images intermédiaires dans l’ordre de lecture, en mode image uniquement. Jusqu’à 9 sans image finale ou 8 avec.
input.video_urlsstring[][]En mode référence uniquement. Fournissez les URL HTTPS des vidéos servant de modèle aux gestes ou aux mouvements de caméra. Jusqu’à 5 vidéos de 2 à 30 secondes chacune, pour une durée cumulée de 30 secondes maximum.
input.audio_urlsstring[][]En mode référence uniquement. Fournissez les URL HTTPS des extraits audio qui guideront la voix ou les sons générés. Jusqu’à 3 extraits de 5 à 30 secondes chacun.
input.keep_original_soundbooleanfalseSi video_urls contient une vidéo de référence, true conserve son audio et false (par défaut) génère un nouvel audio. Sans vidéo de référence, ce paramètre est ignoré.

Réponse de création

Le code HTTP 200 renvoie un taskId (chaîne) et les credits (nombre). Cela confirme la création de la tâche, pas sa finalisation. Le montant indiqué ci-dessous correspond au démarrage rapide de 5 secondes en 720p.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 65
}

Modes de génération et exemples

Remplacez les URL d'exemple d'example.com par vos propres fichiers accessibles via HTTPS public. Les URL d'illustration servent uniquement à montrer la structure de la requête et ne pointent pas vers des ressources téléchargeables.

Texte en vidéo

Génération à partir d'une description textuelle. Les URL multimédias ne sont pas prises en compte dans ce mode.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video"
  }
}'

Première image

Fournissez une image qui servira de point de départ, puis décrivez le mouvement souhaité dans votre prompt.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first.jpg"
    ]
  }
}'

Première et dernière images

En mode image, fournissez la première image puis éventuellement la dernière. Le mode référence accepte jusqu’à 10 images.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first.jpg",
      "https://example.com/last.jpg"
    ]
  }
}'

Exemple avec images clés : une rose qui éclot

Créez un accéléré de 8 secondes avec quatre photos prises sous le même angle. Dans image_urls, placez le bouton fermé puis la rose épanouie pour définir la première et la dernière image. Dans keyframe_urls, placez les pétales qui commencent à s’ouvrir, puis la rose à demi ouverte. La vidéo passe ainsi du bouton aux premiers pétales, puis à la fleur à demi ouverte et enfin à la rose épanouie. Le tableau fixe l’ordre et le modèle choisit le moment des transitions.

Remplacez les URL d'exemple d'example.com par vos propres fichiers accessibles via HTTPS public. Les URL d'illustration servent uniquement à montrer la structure de la requête et ne pointent pas vers des ressources téléchargeables.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A time-lapse of a rose opening. Keep the camera still and the light soft as the petals unfold.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/rose-bud.jpg",
      "https://example.com/rose-full-bloom.jpg"
    ],
    "keyframe_urls": [
      "https://example.com/rose-opening.jpg",
      "https://example.com/rose-half-open.jpg"
    ]
  }
}'

Référence multimodale

Associez des références d'image, de vidéo et d'audio. Le prompt reste obligatoire. L'utilisation d'une vidéo source modifie la formule de facturation.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "Animate @Image1 with the movement of @Video1 and ambience from @Audio1.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/motion.mp4"
    ],
    "audio_urls": [
      "https://example.com/surf.mp3"
    ],
    "keep_original_sound": false
  }
}'

Interroger une tâche

GET https://api.seevio.ai/v1/tasks/{taskId}

Remplacez l'ID d'exemple par le taskId obtenu lors de la création. Les requêtes renvoient uniquement les tâches créées par l'utilisateur de la clé API ; les identifiants inconnus ou inaccessibles renvoient une erreur HTTP 404.

Nous vous suggérons d'interroger l'API toutes les 10 à 20 secondes au début, d'espacer les requêtes en cas d'erreur HTTP 429 et d'arrêter dès que le statut est completed ou failed. Privilégiez les webhooks pour la production. Chaque exemple de code ci-dessous effectue une seule interrogation.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatutDescription et contraintes
queuedAcceptée et en attente de traitement.
generatingGénération en cours.
completedSuccès. Téléchargez le contenu de data.results avant son expiration.
failedÉchec définitif. Examinez failed_reason et billing_status.
ChampTypeDescription et contraintes
idstring
Identifiant de la tâche. Il s'agit du taskId obtenu lors de la création.
created_atnumber
Date de création de la tâche au format horodatage Unix (en secondes).
modelstring
ID public du modèle utilisé pour cette tâche.
billing_statusstring
Statut de facturation : reserved, charged, refunded ou refund_failed.
creditsnumber
Crédits réservés pour cette tâche. Cette valeur est conservée même après un remboursement ; fiez-vous au billing_status pour connaître l'issue de la facturation.
failed_reasonstring | null
Raison de l'échec pour les tâches ayant échoué ; null dans les autres cas. Les réponses d'interrogation en échec n'incluent pas l'objet data.
dataobject
Présent pour les requêtes de tâches qui n'ont pas échoué. Contient les fichiers de sortie et les détails du traitement.
data.resultsstring[]
Tableau d'URL de vidéos. Vide jusqu'à la finalisation ou après l'expiration de la vidéo.
data.video_expires_atstring | null
Date d'expiration de la vidéo au format ISO 8601, ou null avant sa mise à disposition. Enregistrez le résultat avant cette échéance.
data.last_frame_urlstring | null
URL de la dernière image si elle a été demandée et qu'elle est disponible, sinon null.
data.processing_timenumber | null
Durée de traitement de la tâche en secondes si elle est disponible, sinon null.

Tâche terminée : réponse à la requête avec les résultats vidéo

Lorsque la requête renvoie status=completed, la génération de la vidéo est terminée. Récupérez les URL des vidéos dans data.results et téléchargez-les avant la date indiquée dans data.video_expires_at. Le statut billing_status=charged indique que les crédits réservés ont été débités.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "kling-4-0",
  "is_draft": false,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 65,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Échec de la tâche : réponse à la requête avec détails de l'échec et de la facturation

Lorsque la requête renvoie status=failed, la génération a échoué. Consultez le champ failed_reason pour en connaître la cause et billing_status pour le statut du remboursement. Dans cet exemple, refunded signifie que les crédits ont été restitués. Le champ credits conserve le montant initialement réservé, et la réponse ne contient pas de nœud data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "kling-4-0",
  "is_draft": false,
  "draft_task_id": null,
  "status": "failed",
  "billing_status": "refunded",
  "credits": 65,
  "failed_reason": "provider_failed"
}

Webhooks

Configurez le champ callback_url dans votre requête de création pour recevoir un POST JSON lorsque la tâche se termine ou échoue. Renvoyez une réponse HTTP 2xx sous 15 secondes. En cas d'échec de distribution, de nouvelles tentatives seront effectuées ; gérez les doublons de manière idempotente grâce à l'identifiant de la tâche.

Votre point de terminaison de rappel (callback) doit accepter les requêtes POST contenant un corps de requête JSON (Content-Type : application/json).

Créer une tâche avec un webhook de callback

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "kling-4-0",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video"
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Tâche terminée : charge utile du callback réussi

En cas de réussite de la génération, le callback renvoie le statut status=completed. Utilisez le paramètre id pour identifier la tâche et data.results pour récupérer les URL des vidéos. Assurez-vous de télécharger et d'enregistrer les résultats avant la date indiquée dans data.video_expires_at.

created_at indique la création de l’événement ; task_created_at indique celle de la tâche, en secondes Unix. Les exemples présentent les champs recommandés ; les réponses peuvent contenir des champs supplémentaires.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "kling-4-0",
  "status": "completed",
  "task_created_at": 1788652800,
  "billing_status": "charged",
  "credits": 65,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Échec de la tâche : charge utile du callback d'échec

En cas d'échec de la génération, le callback renvoie le statut status=failed. Utilisez l'id pour identifier la tâche, failed_reason pour connaître la cause de l'échec et credits_refunded pour vérifier le nombre de crédits remboursés.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "kling-4-0",
  "status": "failed",
  "task_created_at": 1788652800,
  "billing_status": "refunded",
  "credits": 65,
  "failed_reason": "provider_failed",
  "credits_refunded": 65
}

Exemple de réception de webhook

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrls = callbackData.data.results;
    // Save the video URLs and mark this task as completed in your application.
    console.log(callbackData.id, videoUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

Cet exemple Next.js lit le corps JSON du callback et traite directement les tâches réussies et échouées. Pour votre application de production, pensez à ajouter une couche de persistance, à dédoublonner les identifiants de tâche (task-ID) et à placer les tâches lourdes en file d'attente avant d'accuser réception du callback.

Exigences et limites des fichiers

  • Toutes les URL de médias et de callback doivent être des URL HTTPS publiques. Évitez localhost, les IP privées et les fichiers nécessitant des cookies ou une authentification. Les URL des vidéos et audios de référence doivent pointer directement vers des fichiers lisibles.
  • Chaque vidéo ne doit pas dépasser 100 Mo.
  • Chaque fichier audio ne doit pas dépasser 15 Mo.
  • Jusqu'à 15 fichiers de référence au total