
Codes d'erreur des API text-to-video expliqués
Un guide des codes d'erreur des API text-to-video — 400/401/403/429 et 5xx, blocages de sécurité, échecs de tâches asynchrones, réessais et un flux de débogage étape par étape.
La plupart des échecs des API text-to-video se répartissent en 5 catégories : requêtes incorrectes, problèmes d'authentification, limites de débit, blocages de sécurité ou problèmes serveur. Si je vérifie le statut HTTP, le corps d'erreur complet, l'ID de requête ou de tâche et l'heure de l'échec, je peux généralement trouver la cause rapidement.
Voici la version courte :
- Les erreurs de la série 400 signifient généralement que je dois corriger la requête.
- Les 401/403 pointent généralement vers la clé API, l'accès, la facturation ou les règles d'IP.
- La 429 signifie que j'ai atteint un plafond de requêtes, de tâches ou de dépenses.
- Un 200 OK à la soumission ne signifie pas que la vidéo est terminée. Je dois quand même interroger la tâche et vérifier s'il y a
failed. - Les erreurs de la série 500 nécessitent souvent un réessai, mais seulement après avoir vérifié si la tâche est toujours en cours.
- Les blocages de sécurité peuvent survenir avant, pendant ou après la génération, et certaines API peuvent renvoyer moins de clips au lieu de faire échouer toute la tâche.
Quelques chiffres ressortent. Les tâches vidéo, comme celles utilisant Sora 2, peuvent mobiliser un GPU pendant 30 à 90 secondes, les délais d'attente côté client peuvent devoir atteindre plus de 10 minutes, et un plan de réessai courant consiste à démarrer à 5 secondes, plafonner à 60 secondes, arrêter après 3 tentatives.
Si je veux moins de tâches échouées et moins de facturations en double, je garde le flux de travail simple :
- Journaliser le corps d'erreur et l'ID de tâche
- Séparer les erreurs au niveau de l'API des échecs au niveau de la tâche
- Réessayer uniquement les cas 429 et 5xx
- Vérifier l'état de la tâche avant de soumettre à nouveau la même tâche
- Épingler des versions de modèle exactes au lieu d'utiliser des alias comme
latest

Des messages d'erreur d'API pour une BONNE expérience développeur
Comparaison rapide
| Groupe d'erreur | Codes courants | Ce que cela signifie généralement | Réessayer ? | Première action |
|---|---|---|---|---|
| Validation | 400, 404, 413, 415, 422 | JSON incorrect, mauvais ID de modèle, fichier trop volumineux, mauvais format, conflit de champ | Non | Corriger la requête |
| Vidéo haute qualité | Veo 3.1 | Sortie cinématographique professionnelle | Oui | Vérifier les paramètres du prompt |
| Authentification / Accès | 401, 403 | Mauvaise clé, portée manquante, pas de crédits, IP bloquée | Non | Vérifier la clé, la facturation, les portées |
| Limites de débit | 429 | Trop de requêtes, trop de tâches en cours, plafond de dépenses atteint | Oui | Backoff et révision des limites |
| Sécurité / Politique | 400, 403 ou échec au niveau de la tâche | Prompt ou sortie bloqué | Non | Réécrire le prompt |
| Serveur / Passerelle | 500, 502, 503, 504 | Erreur du fournisseur, surcharge, délai d'attente | Oui | Vérifier le statut de la tâche, puis réessayer |
En clair : le succès de la soumission n'est pas le succès du rendu. Je traiterais les résultats de l'interrogation comme la source de vérité et j'utiliserais la charge utile d'erreur - et pas seulement le code de statut - pour décider quoi faire ensuite.
Erreurs de requête côté client : les codes de la série 400 que vous pouvez corriger
Après avoir journalisé les détails de l'erreur, l'étape suivante consiste à déterminer ce qui a mal tourné du côté de la requête. Commencez par le corps d'erreur, puis associez le code HTTP à la correction.
400, 404, 413 et 415 : ce que signifie chaque code pour les requêtes vidéo
Chaque code pointe vers un type différent d'erreur de requête. Une 400 signifie généralement un JSON malformé, des champs obligatoires manquants ou des types de paramètres invalides. Par exemple, passer duration sous forme de chaîne ("6") au lieu d'un entier (6) échouera à la validation [4]. Une 404 signifie que l'ID de modèle ou le chemin de l'endpoint est incorrect, souvent à cause d'une petite faute de frappe comme wan2.7 au lieu de [wan-2.7](https://apimart.ai/ja/model/wan-2-7) or [wan-2.6](https://apimart.ai/model/wan-2-6) [7]. Une 413 apparaît lorsqu'une image ou une vidéo de référence dépasse la limite de taille de téléversement [4][7]. Une 415 signifie que l'en-tête Content-Type est incorrect, ou que le format de fichier n'est pas pris en charge par le modèle [5].
| Code HTTP | Cause courante en text-to-video | Correction directe |
|---|---|---|
| 400 | JSON malformé ; duration passé sous forme de chaîne ; champ obligatoire manquant | Retirer les guillemets des valeurs numériques ; valider la syntaxe JSON ; ajouter les champs manquants |
| 404 | ID de modèle mal orthographié ou obsolète | Vérifier la chaîne de modèle exacte dans la documentation (par exemple, kling-3.0-turbo) |
| 413 | L'image ou la vidéo de référence dépasse la limite de taille de téléversement | Compresser les ressources ou passer du Base64 à une référence URL |
| 415 | En-tête Content-Type incorrect ou format de fichier non pris en charge | Définir Content-Type: application/json ; convertir les ressources vers des formats pris en charge |
Incompatibilités de modèle et de paramètres qui provoquent des échecs de validation
Même lorsque votre JSON est propre, les requêtes peuvent tout de même échouer à la validation car les modèles ne suivent pas tous les mêmes règles. La résolution, la durée, le rapport d'aspect et les limites de ressources peuvent varier d'un modèle à l'autre.
Prenons MiniMax-Hailuo-2.3. Il prend en charge 10 secondes en 768p, mais si vous demandez du 1080p, la durée maximale tombe à 6 secondes [6]. Les règles relatives aux ressources peuvent être tout aussi strictes. Kling 3.0 exige que les images d'entrée mesurent au moins 300 px dans les deux dimensions, avec un rapport d'aspect compris entre 1:2.5 et 2.5:1. Wan 2.7 exige que les vidéos de référence durent de 2 à 10 secondes et ne dépassent pas 100 Mo [4][7].
Une 422 signifie généralement que vos paramètres entrent en conflit les uns avec les autres. Par exemple, SkyReels V4 renvoie une 422 lorsque vous combinez les champs Image-to-Video et Omni dans la même requête [8].
Une petite habitude peut faire gagner beaucoup de temps : utilisez des chaînes de version épinglées au lieu d'alias génériques. Les règles de paramètres peuvent changer entre les versions de modèle [3]. Si la validation échoue toujours, vérifiez les limites exactes du modèle avant de réessayer.
Si la requête se valide mais échoue quand même, passez ensuite à l'authentification, aux limites de débit et aux contrôles de sécurité.
Authentification, permissions et limites de débit
Une fois la validation passée, la plupart des échecs restants se ramènent à trois choses : l'authentification, les permissions ou les limites de débit.
401 et 403 : erreurs de clé API et d'accès
Une erreur 401 Unauthorized signifie que la requête n'incluait pas d'identifiants d'authentification valides. Les causes habituelles sont une clé API manquante, une clé invalide, une clé désactivée ou supprimée, ou un en-tête Authorization défectueux [9][1][2].
De nombreuses API attendent :
Authorization: Bearer YOUR_API_KEY
Certaines plateformes utilisent x-api-key à la place. Donc si le nom ou le format de l'en-tête est incorrect, cela seul peut déclencher une 401 [1][10].
Commencez par les bases. Vérifiez la variable d'environnement, assurez-vous que la clé est toujours active et confirmez que votre configuration CI/CD injecte correctement les secrets dans chaque environnement [3]. Il est également utile de lire le corps de la réponse plutôt que de s'arrêter au code de statut HTTP. Des erreurs comme invalid_api_key, token_expired ou account_banned vous indiquent généralement bien plus vite ce qui a échoué [9][3].
Une 403 Forbidden signifie que le serveur vous a reconnu, mais a tout de même bloqué la requête. Cela pointe généralement vers un problème d'accès. Votre clé peut ne pas avoir la bonne portée de modèle, votre forfait de compte peut ne pas inclure cet endpoint, vos crédits peuvent être épuisés, ou l'IP de votre requête peut ne pas figurer sur la liste d'autorisation [3][9].
Le corps de la réponse compte ici aussi. Si vous voyez insufficient_credits, regardez la facturation. Si vous voyez permission_error, vérifiez les portées, l'accès au modèle ou les limites du forfait. Et si l'accès semble correct mais que le trafic est trop élevé, la prochaine étape est généralement la 429.
429 : erreurs de limite de débit et de quota dépassé
Si l'authentification réussit, le volume de requêtes est souvent le prochain goulot d'étranglement. Une erreur 429 Too Many Requests signifie que vous avez atteint une limite de débit, un plafond de simultanéité ou une limite de dépenses [3][9][10]. En clair : vous avez envoyé trop de requêtes dans un court laps de temps, exécuté trop de tâches à la fois, ou franchi un plafond de facturation [3][9].
Là encore, le corps de la réponse vous donne le meilleur indice. rate_limit_exceeded signifie généralement que vous devriez utiliser un backoff exponentiel. spend_limit_exceeded signifie qu'il est temps de vérifier les paramètres de facturation [3][9].
Mettez les tâches par lots en file d'attente localement quand vous le pouvez, et gardez un œil sur ces en-têtes [2] :
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-Reset
| Code de statut | Cause habituelle | Schéma de réponse typique | Correction recommandée |
|---|---|---|---|
| 401 Unauthorized | Clé API manquante ou invalide ; en-tête Authorization malformé | invalid_api_key, Missing Authorization header | Vérifier les variables d'environnement ; contrôler le préfixe Bearer ; confirmer que la clé n'a pas été révoquée |
| 403 Forbidden | Permissions insuffisantes ; la clé n'a pas la portée du modèle ; IP non autorisée | permission_error, insufficient_credits, ip_not_allowed | Vérifier la facturation, les portées d'accès au modèle, le forfait de compte ou la liste d'autorisation d'IP |
| 429 Too Many Requests | Limite de débit, limite de simultanéité ou plafond de dépenses atteint | rate_limit_exceeded, spend_limit_exceeded, too many running jobs | Utiliser un backoff exponentiel ; ajouter une file d'attente de requêtes ; réviser les quotas ou les plafonds de facturation |
Si vous utilisez APIMart, une seule clé pour tous les modèles peut réduire la dérive d'authentification [3]. Même dans ce cas, le flux de débogage reste à peu près le même : lire le corps de la réponse, vérifier vos variables d'environnement et vous assurer que le compte peut accéder au modèle que vous appelez.
Blocages de sécurité, délais d'attente et échecs côté serveur
Après la validation de la requête et le passage de l'authentification, les échecs restants tombent généralement dans deux catégories : les blocages de modération et les problèmes côté serveur. Donc une fois l'authentification, le quota et la validation réglés, divisez le reste de votre débogage en ces deux voies.
Erreurs de modération et de politique de contenu dans la génération vidéo
Les blocages de sécurité peuvent survenir à trois moments différents : avant le début de la génération (la requête est rejetée immédiatement), pendant le rendu (la tâche est arrêtée en cours de route), ou après la production de la vidéo (la sortie est filtrée avant la livraison) [11]. Ce dernier cas piège les gens. Une tâche peut se terminer et ne rien livrer si le résultat est filtré.
Avec les API basées sur l'interrogation, le statut HTTP peut être trompeur. Vous pouvez obtenir 200 OK de la vérification de statut, alors que le corps JSON indique state: "failed" et inclut une erreur comme SensitiveContentDetected ou NSFW [12]. En pratique, le corps de l'interrogation est la source de vérité, pas le code de statut HTTP.
Si un blocage de modération se déclenche, ne réessayez pas exactement le même prompt. Réécrivez-le. Une formulation cinématographique simple et technique peut aider à réduire les faux positifs des filtres de sécurité stricts [11]. Par exemple :
gimbal shotmedium tracking shotgolden hour lighting
Il y a une autre subtilité ici. Certains modèles, dont Google Veo, peuvent renvoyer moins de clips que ceux demandés lorsque certaines sorties sont bloquées par les filtres de sécurité, au lieu de faire échouer toute la tâche [3]. Ne vous contentez donc pas de vérifier si la requête s'est achevée. Vérifiez que le nombre de ressources renvoyées correspond au nombre demandé.
Si le prompt semble propre et que la tâche échoue quand même, passez à la couche suivante : la stabilité du serveur.
Erreurs 500, 502, 503 et délais d'attente pour les tâches vidéo asynchrones
Les échecs côté serveur se situent dans une autre partie du flux de débogage. Les tâches text-to-video mobilisent souvent un emplacement GPU pendant 30 à 90 secondes [3], ce qui les rend plus sensibles à la surcharge et aux délais d'attente.
Pour les erreurs 500 et 504, vérifiez le statut de la tâche avant de réessayer. Les réessais à l'aveugle peuvent créer des rendus en double et doubler vos coûts [3]. Journalisez chaque taskId ou prediction_id afin de pouvoir interroger directement l'endpoint de statut avant de soumettre une nouvelle tâche [3][13].
Lorsque les réessais sont sûrs, utilisez un backoff exponentiel avec du jitter. Une configuration pratique consiste à :
| Code d'erreur | Cause probable | Conseil de réessai |
|---|---|---|
| 500 Internal Server Error | Échec inattendu côté serveur | Vérifier d'abord le statut de la tâche ; réessayer jusqu'à 3 fois avec backoff [3][12] |
| 502 Bad Gateway | Erreur du fournisseur en amont | Réessayer avec un backoff exponentiel [12] |
| 503 Service Unavailable | Surcharge de la plateforme ou maintenance | Attendre 30 à 120 minutes et vérifier le tableau de bord de statut [3][12] |
| 504 Gateway Timeout | Le fournisseur n'a pas répondu à temps | Vérifier que le rendu n'est pas toujours en cours avant de resoumettre [3] |
Réglez les délais d'attente côté client sur 10 minutes ou plus [3], et alertez en cas de hausse des valeurs predict_time [3].
Un flux de débogage étape par étape pour les API text-to-video
Classez l'erreur, puis appliquez la bonne correction
Utilisez ce flux de travail pour passer du symptôme à la correction en une seule fois. D'abord, lisez le corps complet de la réponse. Ensuite, triez l'échec selon le code de statut HTTP et ce que dit le corps d'erreur. Certains fournisseurs envoient aussi des plages d'erreurs internes, mais votre guide principal devrait être le code de statut HTTP et le corps d'erreur [3][1].
Commencez par le corps de la réponse, puis placez le résultat dans l'un de ces groupes :
| Catégorie d'erreur | Codes HTTP | Réessayer ? | Première action |
|---|---|---|---|
| Authentification | 401, 403 | Non | Vérifier la clé API dans les variables d'environnement ; contrôler la facturation/le quota |
| Validation | 400 | Non | Corriger la requête - syntaxe JSON, résolution, format de fichier ou durée |
| Limites de débit | 429 | Oui | Utiliser un backoff exponentiel ; vérifier les plafonds de simultanéité |
| Sécurité/Politique | 400, 403 | Non | Réécrire le prompt ; ne pas réessayer sans modification |
| Serveur/Passerelle | 500, 502, 503, 504 | Oui, après vérification du statut de la tâche | Vérifier le statut de la tâche avant de resoumettre |
Une fois qu'une tâche a été soumise, arrêtez de penser uniquement en termes de réponses HTTP et examinez aussi l'état de la tâche. Pour les tâches asynchrones, vérifiez la réponse d'interrogation pour failed ou expired avant d'envoyer à nouveau la même tâche. Cette seule étape peut vous éviter des coûts supplémentaires et beaucoup de confusion.
Avant de toucher au code, vérifiez la page de statut du fournisseur. Si le service est dégradé, le débogage local ne vous apprendra pas grand-chose. Après cela, inspectez les en-têtes de réponse x-deny-reason. Les refus au niveau du proxy peuvent ressembler à des erreurs de modèle si vous sautez cette vérification [3].
Épinglez aussi des chaînes de version de modèle exactes comme kling-v3.0-std au lieu de latest. Une mise à jour silencieuse du modèle peut introduire de nouveaux échecs de validation dans un pipeline qui fonctionnait parfaitement la veille [3].
Points clés pour des intégrations plus fiables
La plupart des échecs des API text-to-video suivent quelques schémas récurrents. Si vous obtenez une erreur 4xx, vous devez modifier la requête, les identifiants ou la configuration. Renvoyer le même appel ne corrigera généralement rien.
- Journaliser les entrées de la requête : ID de modèle, hachage du prompt et paramètres (voir nos tutoriels sur les API d'IA pour les bonnes pratiques de journalisation).
- Journaliser l'ID de tâche, le statut final,
predict_timeet le message d'erreur complet. - Réessayer uniquement les
429et5xxaprès avoir vérifié l'état de la tâche pour éviter les rendus en double et les coûts doublés [3]. - Surveiller
predict_timepour repérer les pics - ils peuvent signaler tôt une dégradation de l'infrastructure [3].
FAQ
Comment savoir si une tâche vidéo a réellement échoué ?
Interrogez l'endpoint de statut de la tâche avec l'ID de tâche que vous avez obtenu lors de la soumission. Si le champ status revient à failed, la tâche n'a pas abouti.
Ensuite, examinez le champ error dans la réponse. Il vous indique pourquoi elle a échoué, afin que vous puissiez décider quoi faire ensuite :
- ajuster votre prompt
- vérifier le solde de votre compte
- attendre s'il y a un problème d'infrastructure
Vous pouvez aussi utiliser des webhooks pour recevoir des notifications automatiques lorsqu'une tâche entre dans un état d'échec.
Quand devrais-je réessayer une requête d'API text-to-video ?
Réessayez les erreurs transitoires comme les limites de débit 429 et les problèmes côté serveur 500 avec un backoff exponentiel. Cela ralentit les tentatives répétées et vous aide à éviter de surcharger le système.
Pour un 504 Gateway Timeout ou un échec de tâche, vérifiez le statut de la tâche avant de réessayer. Un réessai à l'aveugle peut déclencher des rendus en double et ajouter des coûts supplémentaires.
Ne réessayez pas les erreurs 400 ou 401. Elles signifient généralement que la requête elle-même doit d'abord être corrigée.
Pourquoi un prompt serait-il bloqué après la soumission ?
Un prompt est généralement bloqué parce qu'il enfreint les règles de sécurité ou de modération d'un fournisseur. Cela peut arriver au moment même où vous le soumettez, ou plus tard pendant la génération si le système détecte un contenu visuel ou audio interdit.
Les déclencheurs courants incluent les sujets sensibles, la violence, les mineurs ou le matériel protégé par le droit d'auteur. Et comme les systèmes de modération ont tendance à jouer la sécurité, même des prompts inoffensifs peuvent être signalés.
Si cela se produit, réécrivez la requête dans un langage plus neutre et descriptif.
Choisissez le modèle qui vous convient dans le marketplace
Essayez les modèles de chat, image et vidéo sur le marketplace APIMart, puis découvrez rapidement leurs capacités avec une API unifiée.