API Pro : limites, codes d'erreur et bonnes pratiques

Plafonds

Chaque clé en porte trois : renders simultanés (2 par défaut), soumissions par minute (60 par défaut) et, si tu en définis un, un plafond de crédits journalier.

Dès qu'un plafond est atteint, la réponse est 429 avec un en-tête Retry-After en secondes. Un appel refusé ne coûte rien. Le jour pris en compte pour les plafonds est le jour UTC.

Les longues vidéos ajoutent deux plafonds supplémentaires : 30 plans par séquence et 5 séquences en cours par licence (voir Vidéos).

Les personnages en ont un : 50 par licence Pro, ceux de l'appli compris, et un personnage inutilisé pendant un an est effacé (voir Personnages). Les lieux, objets et animaux ont le leur, compté à part : 50 par licence Pro (10 avec une licence personnelle, dans l'appli), effacés après la même année sans usage (voir Lieux, objets, animaux, styles et tenues).

Le Face swap a les siens : un passage de 20 s au plus par rendu, et notre serveur prépare deux vidéos à la fois. Au-delà, la réponse est 429 server_busy : réessaie après Retry-After (voir Face swap). Par le MCP, un Face swap avec transition prend une vidéo entière de 60 s au plus, et le serveur en traite deux à la fois : au-delà, l'outil demande de réessayer dans quelques minutes.

Notre propre carte est partagée avec les utilisateurs de l'application. Quand elle est occupée, tes renders sont envoyés vers des GPU loués, au même prix et via la même API, avec quelques dizaines de secondes supplémentaires au démarrage.

Codes d'erreur

CodeerrorCe que ça signifie, et quoi faire
400prompt_requiredAjoute un prompt.
400forbidden_contentLe filtre de contenu a refusé le prompt.
400invalid_seedseed doit être un entier de 0 à 4294967295.
400image_required, inpaint_images_requiredLe mode nécessite image_b64, et mask_b64 pour inpaint.
401key_required, invalid_keyEn-tête absent, ou clé inconnue.
402insufficient_creditsSolde insuffisant pour ce rendu (cost est indiqué). La réponse contient buy_url, la page d'achat de crédits de ta licence. Un rendu ou un entraînement en cours réserve son prix jusqu'à sa fin : engaged dit combien de crédits sont ainsi tenus de côté.
402confirmation_required, payment_declinedUn achat sur ta carte enregistrée (POST /credits/purchase) : ta banque demande ta confirmation, ou a refusé le paiement. Utilise buy_url, le lien d'achat ordinaire.
409agent_not_allowed, no_saved_card, monthly_cap_reachedUn achat sur ta carte enregistrée : ton agent n'est pas autorisé à acheter (recharge automatique de ta page compte), aucune carte n'est enregistrée, ou l'achat dépasserait ton plafond mensuel. Utilise buy_url.
409topup_in_progress, purchase_in_progressUn autre paiement sur ta carte enregistrée est en cours : attends qu'il se termine.
400unknown_packUn achat avec un pack inconnu, ou un montant libre hors bornes ou hors tranche.
503payment_unavailableLe paiement n'a pas pu être confirmé : on ne sait pas si le débit a eu lieu. Ne relance pas tout de suite ; un débit passé est crédité.
403key_disabled, key_revoked, key_expiredClé désactivée, révoquée ou expirée : crée-en une nouvelle dans l'application.
403license_revoked, license_not_proLicence révoquée, ou compte qui n'est pas Pro.
403missing_scopeLa clé ne possède pas la permission demandée, indiquée dans scope.
403unknown_loraUn personnage qui n'appartient pas au compte.
404media_unavailableLe fichier a disparu : soumets à nouveau.
404unknown_loraSur DELETE /loras/{name}, aucun fichier de ce nom sur le compte. Note le code : le même nom renvoie 403 quand un rendu demande un personnage qui ne t'appartient pas.
411size_requiredUn upload de LoRA sans Content-Length. Le corps est brut, la taille doit donc être annoncée.
413file_too_largeUn LoRA dépassant 800 Mo, ou 90 Mo en un seul upload. Envoie-le en plusieurs parties. Un 413 brut sans corps JSON est autre chose : la requête n'a jamais atteint l'API, consulte la section upload.
413part_too_largeUne partie est plus grande que le max_part_size annoncé par la session.
404unknown_upload_sessionL'uploadId n'existe pas, ou la session a été abandonnée (six heures) ou annulée par une partie rejetée.
503upload_refused, part_refusedStockage injoignable au moment du dépôt : réessaie.
507storage_fullPlus de place sur le stockage côté serveur (LoRA, ou séquences en cours). L'équipe est prévenue : réessaie plus tard.
415invalid_safetensorsLe fichier uploadé n'est pas un safetensors.
415incompatible_loraLe LoRA est destiné à une autre architecture, indiquée dans architecture. Les images n'acceptent que Krea 2, les vidéos LTX 2.5 ou 2.3. Rien n'est stocké et aucun quota n'est consommé.
413lora_quotaLe stockage LoRA du compte est plein (20 fichiers ou 10 Go). La réponse indique ce qu'il reste ; supprime un fichier pour libérer de la place.
413image_too_largeImage source ou masque dépassant 12 Mo décodé.
429too_many_concurrent_renders, rate_limited, daily_capUn plafond est atteint, consulte Retry-After.
429daily_credit_capLe plafond de crédits journalier de la clé est atteint (cap, spent, cost).
502submission_failed, status_failedUn incident côté rendu : réessaie dans quelques secondes.
503license_check_failedLe compte ne peut pas être vérifié pour l'instant : réessaie dans une minute.
400invalid_extend_framesUne prolongation dont extend_frames ne vaut pas 9, 17, 25, 33, 41 ou 49, ou un extend_video qui ne contient pas exactement ce nombre d'images.
400extension_with_transitionUne prolongation ne peut être une transition qu'en consistency enhanced : retire end_image, ou demande la cohérence renforcée.
400extension_too_shortLa length d'une prolongation ne compte que les nouvelles images, et doit être d'au moins 9.
404clip_unavailableLe clip à prolonger n'est plus disponible : prolonge-le plus tôt, ou envoie sa fin dans extend_video. En 502, sa lecture a échoué : réessaie.
404unknown_clipLe clip à prolonger appartient à une autre licence.
404unknown_sequenceLa séquence n'existe pas, appartient à une autre licence, ou a expiré.
400job_id_required, empty_sequencePOST /sequences/{id}/clips sans job_id, ou export d'une séquence qui n'a aucun plan.
409not_exported_yetGET /sequences/{id}/file avant l'export : appelle d'abord POST /sequences/{id}/export.
404unknown_exportExport du dossier de projet : rendu inconnu, d'une autre licence ou soumis il y a plus de 24 h ; ZIP effacé (45 min après le premier téléchargement, 2 h au plus).
409export_in_progressUn export de dossier de projet à la fois par licence.
413export_too_largeDossier de projet de plus de 2 Go : exporte les plans un par un.
400unknown_referenceExport du dossier de projet : une entrée de exclude_references ne désigne aucune référence de l'export (ni id, ni nom, ni @mention).
400invalid_export_optionsExport du dossier de projet : une option qui n'est pas un booléen, un exclude_references qui n'est pas une liste de textes, ou include_film sans include_media.
500export_failedL'export a échoué (raison dans detail) : rien n'est débité, relance.
422resolution_mismatch, unreadable_clipRendu rangé à la main (POST /sequences/{id}/clips) d'une autre résolution que la séquence, ou illisible.
409missing_shotUn plan n'est pas encore terminé, ou n'est plus disponible (job_id le désigne) : attends qu'il se termine, puis exporte à nouveau.
409sequence_exportedLa séquence est déjà assemblée.
409audio_mismatchUn plan avec son dans une séquence silencieuse, ou l'inverse.
413extend_video_too_largeLa fin de clip que tu as envoyée dépasse 8 Mo.
413too_many_shots30 plans au maximum par séquence.
422unreadable_tailLa fin de clip, envoyée ou relue, n'est pas une vidéo lisible.
422assembly_failedLes plans ont des résolutions différentes, ou le son n'est présent que sur certains d'entre eux.
503ultra_unavailableLe mode Ultra est momentanément fermé : réessaie plus tard, ou rends sans quality.
503ultra_4k_unavailableUne taille 4K demandée en Ultra : la 4K n'est plus proposée, la vidéo va jusqu'au 1080p (1920 x 1088).
400ultra_incompatibleUne transition (end_image) demandée en Ultra.
400extension_4kLa suite d'un ancien clip 4K : la 4K n'est plus proposée, un clip 4K ne se prolonge plus (ultra_4k_unavailable avec quality: "max"). Prolonge un clip de 1080p au plus.
400resolution_above_qualityUne taille au-delà du 1080p (1920 x 1088) sans quality: "max" : le 1080p est le plafond dans tous les modes.
400invalid_keyframes, invalid_keyframe_time, keyframes_modeImages clés hors limites : plus de 4, image ou force invalide ; instant hors du clip ou deux images clés à moins de 0,5 s ; mode autre que Qualité (Ultra, Multi-Ref), ou prolongation sans consistency enhanced.
400invalid_consistency, consistency_modeconsistency autre que standard ou enhanced ; cohérence renforcée demandée en Ultra ou en Multi-Ref.
400consistency_explicitPrompt que la cohérence renforcée ne rend pas encore, au-delà de 20 s (15 s avec une end_image), en prolongation ou dans une séquence (un plan seul plus court est rendu en cohérence standard) : raccourcir, ou passer en standard.
403consistency_licensed_onlyCohérence renforcée réservée aux licences.
503consistency_unavailableCohérence renforcée momentanément fermée : réessaie plus tard, ou rends en standard.
409consistency_mismatchPlan d'une autre consistency que la séquence.
422encoding_mismatchRendu rangé à la main (POST /sequences/{id}/clips) d'une autre consistency que les plans déjà rangés.
400invalid_fps, fps_requires_fixed_duration, extend_fps_mismatchUne cadence (fps) absente du mode (detail liste celles qu'il a) ; cohérence renforcée au-delà de 30 i/s en durée automatique (mets duration_auto à false et donne length) ; une prolongation à une autre cadence que le clip précédent.
409sequence_fps_mismatchPlan d'une autre cadence (fps) que la séquence.
503keyframes_unavailableImages clés fermées pour le moment : relance sans keyframes.
429too_many_sequences5 séquences en cours au maximum par licence : exporte-en une, ou attends qu'une expire.
400invalid_name, invalid_kind, invalid_photo_role, outfit_too_long, invalid_roleChamp de personnage hors limites (voir Personnages).
400image_too_smallPhoto de moins de 1024 px sur le grand côté.
415unsupported_image_format, unreadable_imagePhoto ou image de décor qui n'est pas un JPEG, PNG ou WebP lisible.
404unknown_characterLe character_id n'est pas sur ta licence, ou a été effacé (un an sans usage, ou supprimé dans l'appli).
409character_limitPlafond de personnages atteint (max) : efface-en un.
409character_busySes vues sont en fabrication : attends que status ne soit plus pending. Sur POST /characters : la même création est en cours d'enregistrement, renvoie-la quelques secondes plus tard.
409photo_view, empty_character, single_image_sheetLa vue de la photo d'origine ne se refait pas ; ou le personnage n'a aucune vue lisible (si c'est le stockage qui refuse la lecture : 503 storage_unavailable, à réessayer) ; ou une sheet importée en une seule image (une planche, gardée telle quelle) : ni vue refaite, ni habillée pour une nouvelle sheet (fournissez la vue 4 ou 1).
409app_characterUne instruction ou une vue déposée sur un personnage ou une sheet faits dans l'appli : réservé aux personnages et aux sheets créés par l'API.
400instruction_too_longUne instruction de plus de 200 caractères.
400outfit_or_views_requiredUne sheet ajoutée sans outfit ni views : donne une tenue à générer, ou des vues.
400views_requiredUne sheet ajoutée avec generate: false : donne au moins une vue.
409source_sheet_emptyUne sheet ajoutée sans vue en pied ni buste, à un personnage qui n'a ni l'un ni l'autre à reprendre : envoie l'un des deux dans views.
404unknown_sheetSeule une sheet ajoutée par l'API (sheet_origin api) s'efface avec DELETE /characters/{id}/sheets/{sheet_id}.
404unknown_subjectLe subject_id n'est pas sur ta licence, ou a été effacé après un an sans usage.
409subject_limitLe plafond de sujets (max) est atteint : lieux, objets, animaux, styles et tenues comptent ensemble ; efface-en un.
409empty_subjectUn sujet sans aucune image lisible.
400invalid_type, description_too_long, invalid_imagesUn champ de sujet hors limites (voir Lieux, objets, animaux, styles et tenues).
400invalid_imageUne image de sujet qui n'est pas un JPEG, PNG ou WebP lisible d'au moins 512 px sur le grand côté (index dit laquelle).
400description_required, invalid_views, invalid_view, invalid_count, too_many_images, prompt_too_long, invalid_instructionsGénérer un sujet : ni description, ni prompt, ni image de départ ; une clé de vue absente du genre (detail donne la liste) ; count hors de 1 à 6, ou plus de 6 images, départ compris ; un prompt de plus de 2 000 caractères ; instructions vides, trop longues ou pour plusieurs vues.
409subject_busy, subject_not_generated, view_exists, views_exist, start_image_missing, start_image_importedUne série tourne déjà sur ce sujet ; un sujet créé par images (ajoutes-en par /images) ; une vue déjà faite (refais-la) ; un départ à refaire alors que des vues en partent ; un départ en échec à refaire d'abord ; un départ importé, qui ne se refait pas.
404 / 503unknown_view, generation_unavailableUne vue jamais demandée (ajoute-la) ; la génération de sujets n'est pas disponible sur le serveur pour le moment : réessaie plus tard.
400multiref_characters_required, multiref_incompatible, multiref_mode, multiref_format, invalid_lengthMulti-Ref hors limites : 1 à 4 personnages (12 en Ultra), pas de prolongation ni de transition, les formats et durées de Multi-Ref Vidéo.
400duplicate_name, invalid_strength, unknown_mentionDeux personnages du même nom ; strength hors de 0 à 2 ; un @Nom du prompt sans personnage (mentions les liste).
400voice_requires_audio, voice_slotUne voix de personnage (voice_b64) sans son ("audio": true) ; ou sur un autre personnage que characters[0] et characters[1] (le moteur supporte 2 voix). index dit lequel.
400invalid_voice_choicevoice autre que character ou original dans un Face swap, ou characters[].voice autre que character ou generated dans le Multi-Ref Vidéo.
413audio_too_largeUne voix de personnage de plus de 4 Mo, ou de plus de 2 Mo dans un Face swap. Seules les 5 premières secondes servent (20 dans un Face swap) : envoie un extrait court.
415unsupported_audio_formatUne voix de personnage qui n'est pas un fichier audio lisible (WAV, MP3, OGG, FLAC).
400multiref_too_many_references, invalid_subject_typePlus de 4 personnages, objets et animaux en tout, hors Ultra ; un sujet dans le mauvais champ (un lieu dans subjects, un objet en location, un style hors de styles, une tenue hors de outfits).
400invalid_count, invalid_view, invalid_lora_pass, invalid_subject_image, invalid_sizeCréer une image : count 1 ou 2, view 1 à 5 et présente dans la sheet, lora_pass 0,3 à 0,9, image d'un sujet parmi ses images, largeur et hauteur de 256 à 2048.
400character_not_readyCréer une image : la vue choisie d'un personnage n'a pas encore d'image.
503multiref_image_disabledCréer une image n'est pas encore ouvert sur ce serveur.
400multiref_ultra_only, multiref_too_many_images, unknown_wearerStyles, tenues ou mouvement hors du Multi-Ref en Ultra ; plus de 30 images en Ultra ; un worn_by qui ne nomme aucun personnage.
400invalid_motion, invalid_motion_mode, unreadable_motion, motion_missingUn motion sans motion_id ni video_b64 ; un mode autre que camera ou choreography ; une vidéo illisible, ou hors de 4 à 30 s (input_video_out_of_limits) ; un motion_id jamais déposé (pas de PUT).
404 / 409unknown_motion, motion_already_usedUn motion_id inconnu, déjà utilisé ou de plus de 2 heures : dépose la vidéo à nouveau.
413 / 503motion_too_large, motion_not_open, motion_mode_unavailableUne vidéo de mouvement de plus de 20 Mo (20 Mo une fois ramenée en 480p) ; le mouvement n'est pas encore ouvert (ultra.motion_per_second vaut null) ; un mode pas encore ouvert.
409extension_link_expiredUn extend_job_id inconnu de ta licence, ou un plan Ultra de plus de 24 heures : dépose son original (POST /extensions) et passe extend_upload_id.
400extension_real_faceLa vidéo à prolonger en Ultra n'a pas été rendue par le mode Ultra (le rendu d'un autre mode, par exemple) et montre un visage réaliste : rien n'est débité. Prolonge-la en mode Qualité, ou refais le plan en Ultra.
400extension_ultra_only, extension_ultra_options, invalid_extension_direction, extension_backward_sequence, extension_tail_quality_onlyProlongation Ultra hors limites : extend_upload_id ou backward sans quality: "max" (ou depuis un clip qui n'est pas Ultra) ; une image de départ, des références, un mouvement ou la cohérence renforcée avec ; un sens autre que forward ou backward ; backward dans une séquence ; extend_video en Ultra.
400extension_too_large, unreadable_extension, extension_upload_missingUne vidéo déposée au-delà du 1080p ; un MP4 illisible, ou hors de 4 à 30 s (input_video_out_of_limits) ; un fichier jamais déposé (pas de PUT).
400input_video_out_of_limitsUne vidéo envoyée au mode Ultra (mouvement, vidéo à prolonger) hors de ses limites, vérifiées avant le rendu, rien n'est débité : limit dit laquelle (duration : 4 à 30 s ; total_duration : 30 s avec les sons de référence ; count : 10 ; size : 200 Mo ; format : MP4 ou MOV ; fps : 24 à 60 ; pixels : largeur × hauteur de 409 600 à 8 295 044 ; aspect_ratio : 0,4 à 2,5), avec value, min et max.
404 / 409unknown_extension_upload, extension_upload_usedUn extend_upload_id inconnu, de plus de 2 heures ou déjà utilisé : dépose le fichier à nouveau.
413 / 503extension_too_heavy, extension_not_open, extension_backward_unavailableUn fichier de plus de 60 Mo ; la prolongation Ultra n'est pas encore ouverte (ultra.extend_per_second vaut null) ; vers l'arrière pas encore ouvert.
413references_too_largeLes vues préparées dépassent le budget du rendu : moins de personnages, ou un format plus petit.
400video_required, character_requiredUn Face swap sans video_b64, ou sans character_id.
413video_too_largeUne vidéo de Face swap de plus de 20 Mo : coupe-la ou compresse-la avant, ou passe par l'outil MCP tendre_face_swap, qui prend jusqu'à 95 Mo.
415unreadable_videoLa vidéo du Face swap n'est pas un MP4, MOV, WebM ou MKV lisible.
400invalid_start, invalid_duration, passage_too_shortUn passage de Face swap hors limites : start négatif ou au-delà de la fin de la vidéo ; duration hors de 0,5 à 20 s ; un passage de moins d'une demi-seconde.
400invalid_zone, invalid_likeness, invalid_scene, invalid_description, invalid_character_name, invalid_partUn champ de Face swap hors limites : zone autre que tight, normal ou wide ; part autre que full ou head ; likeness hors de 0,5 à 2 ; scene de plus de 400 caractères ; description de plus de 360 ; name de plus de 60.
413face_swap_too_largeLe passage reste trop lourd une fois préparé : donne une duration plus courte.
429server_busyNotre serveur prépare déjà deux vidéos de Face swap : réessaie après Retry-After (20 s). Le lien de dépôt du MCP rend le même code en 503 quand trop de fichiers attendent : réessaie dans quelques minutes.
503face_swap_unavailable, face_swap_price_missingLe Face swap est momentanément fermé, ou sans prix : réessaie plus tard.
503creation_unavailable, multiref_unavailable, storage_unavailableService momentanément indisponible : réessaie plus tard.
500internal_errorUn incident inattendu côté serveur : réessaie, et signale-le s'il revient.

Ultra facturé à la seconde (Ultra) :

CodeerrorCe que ça signifie, et quoi faire
400resolution_outside_ultraAu-delà du 1080p : 480p, 720p ou 1080p.
400engine_refusedLe moteur refuse le texte ou une image : la raison est dans detail et le code dans code. Rien n'est débité : reformule.
502engine_unavailableLe moteur ne répond pas : réessaie dans quelques minutes. Rien n'est débité.
409render_in_progressAnnulation d'un rendu déjà en calcul : il ne s'arrête plus, il est livré et facturé.
400invalid_references, references_too_large, multiref_ultra_options, multiref_ultra_explicitMulti-Ref en Ultra : une image de référence est illisible ou trop lourde (20 Mo au plus en tout), ou une option n'est pas prise en charge.
403multiref_ultra_unavailableLe Multi-Ref en Ultra à la seconde n'est pas encore ouvert à ce compte.

Les noms d'erreur sont les chaînes exactes que renvoie l'API. Fais correspondre dessus plutôt que sur le message, qui peut être reformulé.

Une réponse n'est pas une erreur : un rendu Multi-Ref ou un Face swap avec un personnage qui n'a qu'une vue passe, avec un avertissement limited_likeness dans warnings ({ "code": "limited_likeness", "character_id": "...", "detail": "..." }). La ressemblance est limitée : crée les sept vues du personnage pour une ressemblance fidèle.

Un rendu Multi-Ref en Ultra avec 9 à 12 personnages passe aussi, avec un avertissement many_characters : certains peuvent manquer ou se mélanger (8 sont conseillés).

Bonnes pratiques

  • Interroge toutes les 3 secondes, pas plus vite. La file est partagée, et la bombarder n'aide personne.
  • Télécharge dès que le statut est completed. Le fichier n'est pas archivé.
  • Écris les prompts en anglais, et pour les vidéos décris le mouvement plutôt que l'image fixe.
  • Une clé par usage, et un plafond de crédits journalier sur chaque clé qui vit sur un serveur. Une clé compromise avec un plafond te coûte une journée, pas tout ton solde.
  • Traite un 429 comme normal, et non comme un échec : attends le Retry-After et continue.
  • Une connexion coupée avant la réponse ne coûte rien. Si une soumission d'image ou de vidéo reste sans réponse (délai d'un proxy dépassé, erreur 524, programme arrêté), le rendu n'est pas lancé, ou il est annulé aussitôt, et rien n'est facturé : relance simplement la demande. Pour un lot d'images (count), les rendus déjà créés sont annulés eux aussi. Une création de personnage, elle, continue : la renvoyer à l'identique rend le même personnage, sans rien facturer deux fois (voir Personnages).

Les prompts sont journalisés de notre côté, comme pour l'application, à des fins de sécurité.

Windows · Mac · Cloud ou local

Génère en privé. Ce soir.

Télécharge tendre.AI gratuitement et génère sans limites, en privé, sur ton propre GPU.

OS Windows 10/11GPU NVIDIA 8 Go+VRAM 12 Go recommandésDisque 20 Go

Mac : puce Apple (M1 ou plus récent), macOS 13 minimum. Les Mac Intel ne sont pas pris en charge.

Sur Mac, la génération d'images en local demande un M4 avec 24 Go de mémoire, ou un M2 ou M3 Pro, Max ou Ultra avec 24 Go. En dessous, tout fonctionne en ligne avec les crédits. La retouche et la vidéo se font en ligne sur Mac pour l'instant.

Tout sur tendre.AI pour Mac

Pas de GPU NVIDIA ? Démarre à 100 % dans le cloud : 5 images et 1 vidéo gratuites chaque jour. Une carte NVIDIA (8 Go+) débloque la génération locale illimitée.