{
  "aboutHtml": "<p>Alibaba Wan 3.0 est un profil de création vidéo tout-en-un conçu pour transformer un brief et des matériaux complémentaires en scène avec son audio. Le producteur identifie le modèle standard sous le nom wan3.0-video. La génération à partir de texte seul, les images d’ouverture et de fin, les références multimodales, la modification et le prolongement utilisent des configurations d’entrée différentes dans ce profil. Les livrables utiles comprennent une courte narration, une présentation de produit, une transition basée sur des images ou un clip source révisé dont les changements suivent une direction créative précise.</p><p>Pour une scène à partir de texte uniquement, préparez le sujet, le lieu, l’action, la caméra, le style visuel et le son. Le producteur prend en charge les plans uniques et les storyboards à plusieurs plans, avec une structure recommandée d’environ quatre à six secondes par plan et des plages temporelles facultatives. Pour une courte histoire, présentez un petit oiseau mécanique sur un établi, suivez son premier mouvement et terminez sur un gros plan maintenu pendant que l’ambiance sonore de la pièce se poursuit. Décrivez la relation visuelle entre ces moments afin que les trente secondes autorisées servent une histoire cohérente plutôt qu’une liste d’actions sans lien.</p><p>La génération à partir d’une première image anime une image fixe fournie. Celle-ci définit la composition initiale, tandis que le prompt explique le mouvement et le travail de caméra. La génération avec première et dernière image fixe aussi la fin et décrit la transition entre les deux images. Préparez des extrémités avec une scène compatible et le cadrage souhaité. Le guide recommande la sélection adaptative du rapport largeur/hauteur pour ces modes. Leurs images d’entrée restent séparées des configurations d’images, de vidéos et de sons de référence, de fichiers et de liens web : choisissez donc le mode de matériaux correspondant au plan prévu.</p><p>Le mode de références combine jusqu’à dix images, cinq clips vidéo et cinq clips audio, dans une limite totale de vingt matériaux. Les images de référence peuvent identifier un personnage, un objet, un décor ou un style ; la vidéo peut guider le mouvement ou le travail de caméra, et le son peut guider l’interprétation ou le rythme. Les étiquettes propres au type, telles que Image 1, Video 1 et Audio 1, suivent indépendamment l’ordre d’entrée. Donnez un rôle à chaque référence et décrivez ses interactions avec les autres. Un personnage dont l’apparence est correcte dans le mauvais décor constitue un échec différent d’une caméra qui manque le mouvement prévu.</p><p>Les limites documentées des fichiers de référence sont de 20 Mo par image, 100 Mo par vidéo et 15 Mo par clip audio. Les vidéos de référence sont limitées ensemble à quinze secondes, et les références audio ont une limite totale distincte de quinze secondes. Un document ou une référence de page web publique peut accompagner les références ; un document et un lien s’excluent mutuellement. La source doit être accessible publiquement sans connexion. Préparez une source ciblée et précisez le contenu qui doit informer le clip, surtout lorsqu’un document contient plus d’informations que la scène ne peut en utiliser.</p><p>Le son natif combine le dialogue, la musique de fond, l’ambiance et les effets sonores avec l’image générée. Précisez les mots à prononcer, la personne qui parle et son interprétation, les effets importants et la présence souhaitée ou non de musique de fond. Le son est activé par défaut dans le guide du producteur et peut être désactivé. Pour une scène de démonstration, une courte réplique d’introduction peut précéder un détail de produit tandis qu’un léger bruit mécanique marque le mouvement. Écoutez le clip terminé pour les mots réels, leur attribution et leur synchronisation, au lieu de juger le son à partir du brief écrit seul.</p><p>Pour une modification, décrivez le changement et le contenu à conserver. Le guide couvre l’ajout ou la suppression d’éléments, le remplacement d’attributs, les changements de style visuel ou d’éclairage et la révision des dialogues. Pour un prolongement, décrivez ce qui doit se produire avant, après ou autour du clip existant. Le cadrage adaptatif et la durée intelligente aident le processus avec vidéo source à préserver son format et l’intention temporelle. Lorsqu’une entrée vidéo est fournie, la durée combinée documentée de la vidéo d’entrée et de celle de sortie ne doit pas dépasser 30 secondes. Conservez la source originale et examinez la zone modifiée ainsi que la continuité de tout le clip.</p><p>La sortie est un MP4 à 30 images par seconde, en 480p, 720p ou 1080p. Les durées de nouvelle génération vont de deux à trente secondes, ou un réglage de durée intelligente peut laisser le modèle choisir la longueur. Les formats paysage, carré et portrait sont documentés, avec un cadrage adaptatif adapté aux matériaux fournis. Le producteur traite la requête comme une tâche et renvoie une adresse de vidéo terminée valide pendant vingt-quatre heures. Conservez le résultat lui-même, le brief et les références comme dossier de production, et vérifiez la durée et le cadrage renvoyés avant de l’assembler avec d’autres clips.</p><p>Wan 3.0 standard et sa variante Prime partagent les modes tout-en-un documentés ; Prime met l’accent sur la vitesse de génération. Wan 2.7 et 2.6 ont des règles de durée et de références distinctes selon la tâche : leurs interfaces ne doivent donc pas être considérées comme la configuration de cette édition. Examinez la scène terminée pour l’identité des personnages et des produits, la continuité spatiale, la parole, les effets, les détails issus des sources et le début et la fin souhaités. Une correction suivante précise préserve la direction réussie tout en traitant le défaut réel constaté dans le clip.</p>",
  "aboutText": "Alibaba Wan 3.0 est un profil de création vidéo tout-en-un conçu pour transformer un brief et des matériaux complémentaires en scène avec son audio. Le producteur identifie le modèle standard sous le nom wan3.0-video. La génération à partir de texte seul, les images d’ouverture et de fin, les références multimodales, la modification et le prolongement utilisent des configurations d’entrée différentes dans ce profil. Les livrables utiles comprennent une courte narration, une présentation de produit, une transition basée sur des images ou un clip source révisé dont les changements suivent une direction créative précise.\n\nPour une scène à partir de texte uniquement, préparez le sujet, le lieu, l’action, la caméra, le style visuel et le son. Le producteur prend en charge les plans uniques et les storyboards à plusieurs plans, avec une structure recommandée d’environ quatre à six secondes par plan et des plages temporelles facultatives. Pour une courte histoire, présentez un petit oiseau mécanique sur un établi, suivez son premier mouvement et terminez sur un gros plan maintenu pendant que l’ambiance sonore de la pièce se poursuit. Décrivez la relation visuelle entre ces moments afin que les trente secondes autorisées servent une histoire cohérente plutôt qu’une liste d’actions sans lien.\n\nLa génération à partir d’une première image anime une image fixe fournie. Celle-ci définit la composition initiale, tandis que le prompt explique le mouvement et le travail de caméra. La génération avec première et dernière image fixe aussi la fin et décrit la transition entre les deux images. Préparez des extrémités avec une scène compatible et le cadrage souhaité. Le guide recommande la sélection adaptative du rapport largeur/hauteur pour ces modes. Leurs images d’entrée restent séparées des configurations d’images, de vidéos et de sons de référence, de fichiers et de liens web : choisissez donc le mode de matériaux correspondant au plan prévu.\n\nLe mode de références combine jusqu’à dix images, cinq clips vidéo et cinq clips audio, dans une limite totale de vingt matériaux. Les images de référence peuvent identifier un personnage, un objet, un décor ou un style ; la vidéo peut guider le mouvement ou le travail de caméra, et le son peut guider l’interprétation ou le rythme. Les étiquettes propres au type, telles que Image 1, Video 1 et Audio 1, suivent indépendamment l’ordre d’entrée. Donnez un rôle à chaque référence et décrivez ses interactions avec les autres. Un personnage dont l’apparence est correcte dans le mauvais décor constitue un échec différent d’une caméra qui manque le mouvement prévu.\n\nLes limites documentées des fichiers de référence sont de 20 Mo par image, 100 Mo par vidéo et 15 Mo par clip audio. Les vidéos de référence sont limitées ensemble à quinze secondes, et les références audio ont une limite totale distincte de quinze secondes. Un document ou une référence de page web publique peut accompagner les références ; un document et un lien s’excluent mutuellement. La source doit être accessible publiquement sans connexion. Préparez une source ciblée et précisez le contenu qui doit informer le clip, surtout lorsqu’un document contient plus d’informations que la scène ne peut en utiliser.\n\nLe son natif combine le dialogue, la musique de fond, l’ambiance et les effets sonores avec l’image générée. Précisez les mots à prononcer, la personne qui parle et son interprétation, les effets importants et la présence souhaitée ou non de musique de fond. Le son est activé par défaut dans le guide du producteur et peut être désactivé. Pour une scène de démonstration, une courte réplique d’introduction peut précéder un détail de produit tandis qu’un léger bruit mécanique marque le mouvement. Écoutez le clip terminé pour les mots réels, leur attribution et leur synchronisation, au lieu de juger le son à partir du brief écrit seul.\n\nPour une modification, décrivez le changement et le contenu à conserver. Le guide couvre l’ajout ou la suppression d’éléments, le remplacement d’attributs, les changements de style visuel ou d’éclairage et la révision des dialogues. Pour un prolongement, décrivez ce qui doit se produire avant, après ou autour du clip existant. Le cadrage adaptatif et la durée intelligente aident le processus avec vidéo source à préserver son format et l’intention temporelle. Lorsqu’une entrée vidéo est fournie, la durée combinée documentée de la vidéo d’entrée et de celle de sortie ne doit pas dépasser 30 secondes. Conservez la source originale et examinez la zone modifiée ainsi que la continuité de tout le clip.\n\nLa sortie est un MP4 à 30 images par seconde, en 480p, 720p ou 1080p. Les durées de nouvelle génération vont de deux à trente secondes, ou un réglage de durée intelligente peut laisser le modèle choisir la longueur. Les formats paysage, carré et portrait sont documentés, avec un cadrage adaptatif adapté aux matériaux fournis. Le producteur traite la requête comme une tâche et renvoie une adresse de vidéo terminée valide pendant vingt-quatre heures. Conservez le résultat lui-même, le brief et les références comme dossier de production, et vérifiez la durée et le cadrage renvoyés avant de l’assembler avec d’autres clips.\n\nWan 3.0 standard et sa variante Prime partagent les modes tout-en-un documentés ; Prime met l’accent sur la vitesse de génération. Wan 2.7 et 2.6 ont des règles de durée et de références distinctes selon la tâche : leurs interfaces ne doivent donc pas être considérées comme la configuration de cette édition. Examinez la scène terminée pour l’identité des personnages et des produits, la continuité spatiale, la parole, les effets, les détails issus des sources et le début et la fin souhaités. Une correction suivante précise préserve la direction réussie tout en traitant le défaut réel constaté dans le clip.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "8ff25c90ed6eff5b9558c73ccdd2d757062da7c9227d328ce0830ae3c29401d4",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">Alibaba: Wan 3.0</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fermer\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>alibaba/wan-3.0</code><button type=\"button\" id=\"copy-id\">Copier l’ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Rubriques de la fiche modèle\"><button type=\"button\" data-card-jump=\"overview\">Premiers pas</button><button type=\"button\" data-card-jump=\"methods\">Entrées et méthodes</button><button type=\"button\" data-card-jump=\"pricing\">Tarifs</button><button type=\"button\" data-card-jump=\"examples\">Exemples</button><button type=\"button\" data-card-jump=\"results\">Résultats</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Méthodes API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|alibaba%2Fwan-3.0\">Vidéo</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Premiers pas</h3><p class=\"mdesc-full\">Alibaba Wan 3.0 crée des vidéos avec du son à partir d’un prompt, d’une première image ou d’images de début et de fin, ainsi que de références multimodales. Son profil producteur combine storyboard, modification à partir d’une source et prolongement dans un même modèle, avec des sorties MP4 de 2 à 30 secondes à 30 images par seconde en 480p, 720p ou 1080p.</p><dl class=\"card-io\" data-card-io><div><dt>Entrées acceptées</dt><dd>Texte · Images</dd></div><div><dt>Résultats</dt><dd>Vidéo</dd></div></dl><details class=\"card-about\"><summary>À propos du modèle</summary><p class=\"note-s\" data-model-method-boundary>Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.</p><div class=\"mabout\" id=\"m-about\"><p>Alibaba Wan 3.0 est un profil de création vidéo tout-en-un conçu pour transformer un brief et des matériaux complémentaires en scène avec son audio. Le producteur identifie le modèle standard sous le nom wan3.0-video. La génération à partir de texte seul, les images d’ouverture et de fin, les références multimodales, la modification et le prolongement utilisent des configurations d’entrée différentes dans ce profil. Les livrables utiles comprennent une courte narration, une présentation de produit, une transition basée sur des images ou un clip source révisé dont les changements suivent une direction créative précise.</p><p>Pour une scène à partir de texte uniquement, préparez le sujet, le lieu, l’action, la caméra, le style visuel et le son. Le producteur prend en charge les plans uniques et les storyboards à plusieurs plans, avec une structure recommandée d’environ quatre à six secondes par plan et des plages temporelles facultatives. Pour une courte histoire, présentez un petit oiseau mécanique sur un établi, suivez son premier mouvement et terminez sur un gros plan maintenu pendant que l’ambiance sonore de la pièce se poursuit. Décrivez la relation visuelle entre ces moments afin que les trente secondes autorisées servent une histoire cohérente plutôt qu’une liste d’actions sans lien.</p><p>La génération à partir d’une première image anime une image fixe fournie. Celle-ci définit la composition initiale, tandis que le prompt explique le mouvement et le travail de caméra. La génération avec première et dernière image fixe aussi la fin et décrit la transition entre les deux images. Préparez des extrémités avec une scène compatible et le cadrage souhaité. Le guide recommande la sélection adaptative du rapport largeur/hauteur pour ces modes. Leurs images d’entrée restent séparées des configurations d’images, de vidéos et de sons de référence, de fichiers et de liens web : choisissez donc le mode de matériaux correspondant au plan prévu.</p><p>Le mode de références combine jusqu’à dix images, cinq clips vidéo et cinq clips audio, dans une limite totale de vingt matériaux. Les images de référence peuvent identifier un personnage, un objet, un décor ou un style ; la vidéo peut guider le mouvement ou le travail de caméra, et le son peut guider l’interprétation ou le rythme. Les étiquettes propres au type, telles que Image 1, Video 1 et Audio 1, suivent indépendamment l’ordre d’entrée. Donnez un rôle à chaque référence et décrivez ses interactions avec les autres. Un personnage dont l’apparence est correcte dans le mauvais décor constitue un échec différent d’une caméra qui manque le mouvement prévu.</p><p>Les limites documentées des fichiers de référence sont de 20 Mo par image, 100 Mo par vidéo et 15 Mo par clip audio. Les vidéos de référence sont limitées ensemble à quinze secondes, et les références audio ont une limite totale distincte de quinze secondes. Un document ou une référence de page web publique peut accompagner les références ; un document et un lien s’excluent mutuellement. La source doit être accessible publiquement sans connexion. Préparez une source ciblée et précisez le contenu qui doit informer le clip, surtout lorsqu’un document contient plus d’informations que la scène ne peut en utiliser.</p><p>Le son natif combine le dialogue, la musique de fond, l’ambiance et les effets sonores avec l’image générée. Précisez les mots à prononcer, la personne qui parle et son interprétation, les effets importants et la présence souhaitée ou non de musique de fond. Le son est activé par défaut dans le guide du producteur et peut être désactivé. Pour une scène de démonstration, une courte réplique d’introduction peut précéder un détail de produit tandis qu’un léger bruit mécanique marque le mouvement. Écoutez le clip terminé pour les mots réels, leur attribution et leur synchronisation, au lieu de juger le son à partir du brief écrit seul.</p><p>Pour une modification, décrivez le changement et le contenu à conserver. Le guide couvre l’ajout ou la suppression d’éléments, le remplacement d’attributs, les changements de style visuel ou d’éclairage et la révision des dialogues. Pour un prolongement, décrivez ce qui doit se produire avant, après ou autour du clip existant. Le cadrage adaptatif et la durée intelligente aident le processus avec vidéo source à préserver son format et l’intention temporelle. Lorsqu’une entrée vidéo est fournie, la durée combinée documentée de la vidéo d’entrée et de celle de sortie ne doit pas dépasser 30 secondes. Conservez la source originale et examinez la zone modifiée ainsi que la continuité de tout le clip.</p><p>La sortie est un MP4 à 30 images par seconde, en 480p, 720p ou 1080p. Les durées de nouvelle génération vont de deux à trente secondes, ou un réglage de durée intelligente peut laisser le modèle choisir la longueur. Les formats paysage, carré et portrait sont documentés, avec un cadrage adaptatif adapté aux matériaux fournis. Le producteur traite la requête comme une tâche et renvoie une adresse de vidéo terminée valide pendant vingt-quatre heures. Conservez le résultat lui-même, le brief et les références comme dossier de production, et vérifiez la durée et le cadrage renvoyés avant de l’assembler avec d’autres clips.</p><p>Wan 3.0 standard et sa variante Prime partagent les modes tout-en-un documentés ; Prime met l’accent sur la vitesse de génération. Wan 2.7 et 2.6 ont des règles de durée et de références distinctes selon la tâche : leurs interfaces ne doivent donc pas être considérées comme la configuration de cette édition. Examinez la scène terminée pour l’identité des personnages et des produits, la continuité spatiale, la parole, les effets, les détails issus des sources et le début et la fin souhaités. Une correction suivante précise préserve la direction réussie tout en traitant le défaut réel constaté dans le clip.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible dans Ailoot · entrées et méthodes</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Vidéo</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Types d’entrée</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Types de sortie</dt><dd><code>video</code></dd></div><div><dt>Format de sortie</dt><dd>Octets MP4 d’origine ; sans normalisation ni transcodage</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Champ</th><th>Type</th><th>Exigence</th><th>Valeurs et limites</th><th>Par défaut</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>alibaba/wan-3.0</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>integer</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30</div><div>Minimum: 1</div><div>Maximum: 600</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>480p, 720p, 1080p</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>16:9, 4:3, 1:1, 3:4, 9:16</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>boolean</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>false, true</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>array</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Nombre minimal d’éléments: 1</div><div>Nombre maximal d’éléments: 1</div><div>Contenu en entrée: Tableau d’objets d’image. Chaque objet comporte type=image_url, image_url contenant url et frame_type. Utilisez une URL HTTPS pour l’image et définissez frame_type sur first_frame. Chaque rôle d’image apparaît au plus une fois.</div><div>Clés exactes: type, image_url, frame_type</div><div>Conditions: Ces clés décrivent chaque objet d’image ; image_url contient uniquement url. Omettez frame_images pour une requête contenant uniquement du texte.</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>array</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>integer</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Minimum: -9 223 372 036 854 775 808</div><div>Maximum: 9 223 372 036 854 775 807</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Motif: ^https://</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>object</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Facultatif</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaisons d’éléments d’entrée</summary><p class=\"note-s\"><b>Texte vers vidéo</b> · Une consigne écrite. · Obligatoire : model, prompt, duration</p><p class=\"note-s\"><code>Fournissez prompt sous forme de texte et duration en secondes entières. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Type : string · alibaba/wan-3.0</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Type : string · Nombre maximal d’octets UTF-8: 10 000 · Caractères autres que des espaces requis: Oui</p><p class=\"note-s\"><b>Image vers vidéo</b> · Une consigne écrite et une image initiale. · Obligatoire : model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images est un tableau. Chaque objet d’image contient type, image_url et frame_type ; image_url contient url. Définissez type sur image_url. Utilisez first_frame. Chaque rôle d’image apparaît au plus une fois. Fournissez une URL HTTPS publique pour chaque image. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.</code></p><p class=\"note-s\">Clés exactes : type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Type : string · alibaba/wan-3.0</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Type : string · Nombre maximal d’octets UTF-8: 10 000 · Caractères autres que des espaces requis: Oui</p><p class=\"note-s\"><b>Reference to video</b> · Une consigne écrite et des références image prises en charge. · Obligatoire : model, prompt, duration, input_references</p><p class=\"note-s\"><code>input_references est un tableau d’objets. Définissez type sur image_url et utilisez le champ correspondant contenant url. Utilisez des URL HTTPS publiques. Omettez frame_images pour sélectionner le mode avec références. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Type : string · alibaba/wan-3.0</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Type : string · Nombre maximal d’octets UTF-8: 10 000 · Caractères autres que des espaces requis: Oui</p></details><details class=\"note-s\" data-method-contract><summary>Paramètres et cycle de vie de la méthode</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Paramètre</th><th>Contrat</th></tr></thead><tbody><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>content_type</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>application/json</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>required</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>material_types</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>text, image</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>additional_properties</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>false</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>optional_controls</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, seed, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Cycle de vie : <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarifs</h3><div class=\"card-result-process\" data-billing-basis><h5>Calcul du coût final</h5><p class=\"note-s\">Les tarifs affichés servent à estimer le coût avant la génération. Le montant final est calculé à partir du coût enregistré pour la génération d’origine. La durée mesurée du résultat et les quantités prévisionnelles ne constituent pas la quantité finale facturable.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.</p><dl data-price-conditions><dt>Mode rapide</dt><dd>Non précisé <span class=\"note-s\">Lorsque le mode rapide est sélectionné</span></dd><dt>Mode Flex</dt><dd>Non précisé <span class=\"note-s\">Lorsque le mode flex est sélectionné</span></dd><dt>Effort de raisonnement maximal</dt><dd>Non précisé <span class=\"note-s\">Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarifs estimés à des fins de comparaison</h4><h4>Prix par configuration</h4><p class=\"note-s\">Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuration</th><th>Barème tarifaire</th><th>Quantité prévisionnelle</th><th>Unité de facturation</th><th>Conditions de facturation</th><th>Coût</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarifs de base par jeton</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>Tarif de base</td><td data-cell-label=\"Quantité prévisionnelle\"><span class=\"card-cell-label\">Quantité prévisionnelle</span>—</td><td data-cell-label=\"Unité de facturation\"><span class=\"card-cell-label\">Unité de facturation</span>—</td><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>—</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Entrée · Tokens en entrée · Estimation à des fins de comparaison uniquement</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Sortie · Tokens en sortie · Estimation à des fins de comparaison uniquement</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Lecture du cache · Estimation à des fins de comparaison uniquement</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Écriture dans le cache · Estimation à des fins de comparaison uniquement</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Écriture dans le cache, 1 h · Estimation à des fins de comparaison uniquement</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarif vidéo</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>—</td><td data-cell-label=\"Quantité prévisionnelle\"><span class=\"card-cell-label\">Quantité prévisionnelle</span>—</td><td data-cell-label=\"Unité de facturation\"><span class=\"card-cell-label\">Unité de facturation</span>par seconde de vidéo</td><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>resolution: 1080p</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Sortie · Tarif vidéo · Estimation à des fins de comparaison uniquement</span> <b>$0.4</b> <span class=\"price-unit\">par seconde de vidéo</span></div></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarif vidéo</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>—</td><td data-cell-label=\"Quantité prévisionnelle\"><span class=\"card-cell-label\">Quantité prévisionnelle</span>—</td><td data-cell-label=\"Unité de facturation\"><span class=\"card-cell-label\">Unité de facturation</span>par seconde de vidéo</td><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>resolution: 480p</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Sortie · Tarif vidéo · Estimation à des fins de comparaison uniquement</span> <b>$0.1</b> <span class=\"price-unit\">par seconde de vidéo</span></div></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarif vidéo</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>—</td><td data-cell-label=\"Quantité prévisionnelle\"><span class=\"card-cell-label\">Quantité prévisionnelle</span>—</td><td data-cell-label=\"Unité de facturation\"><span class=\"card-cell-label\">Unité de facturation</span>par seconde de vidéo</td><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>resolution: 720p</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Sortie · Tarif vidéo · Estimation à des fins de comparaison uniquement</span> <b>$0.2</b> <span class=\"price-unit\">par seconde de vidéo</span></div></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Coût de génération estimé</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>—</td><td data-cell-label=\"Quantité prévisionnelle\"><span class=\"card-cell-label\">Quantité prévisionnelle</span>Estimation pour une génération</td><td data-cell-label=\"Unité de facturation\"><span class=\"card-cell-label\">Unité de facturation</span>—</td><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>—</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Sortie · Coût estimé de génération · Estimation à des fins de comparaison uniquement</span> <b>$0.2</b> <span class=\"price-unit\">estimation avant génération</span></div><p class=\"note-s\">Cette estimation ne constitue ni des frais supplémentaires ni un tarif fixe pour la génération terminée.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. <a href=\"/docs/fr/billing/reserve/\">Fonctionnement de la réservation et du débit →</a></p><div data-declared-reference-pricing><h4>Détails du tarif de référence</h4><p class=\"note-s\">Les barèmes de référence du modèle ne modifient ni la sélection de méthode, ni les devis, ni les coûts. Les frais actifs utilisent les tarifs de la méthode Ailoot sélectionnée.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Références tarifaires des configurations vidéo</summary><h4>Prix par configuration</h4><p class=\"note-s\">Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuration</th><th>Conditions de facturation</th><th>Coût</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarif vidéo</th><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>resolution: 480p</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Sortie · Tarif vidéo</span> <b>$0.1</b> <span class=\"price-unit\">par seconde de vidéo</span></div><p class=\"note-s\">Tarif publié de référence pour la configuration affichée. Les frais définitifs correspondent à la configuration réellement facturée.</p></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarif vidéo</th><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>resolution: 720p</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Sortie · Tarif vidéo</span> <b>$0.2</b> <span class=\"price-unit\">par seconde de vidéo</span></div><p class=\"note-s\">Tarif publié de référence pour la configuration affichée. Les frais définitifs correspondent à la configuration réellement facturée.</p></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarif vidéo</th><td data-cell-label=\"Conditions de facturation\"><span class=\"card-cell-label\">Conditions de facturation</span>resolution: 1080p</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Sortie · Tarif vidéo</span> <b>$0.4</b> <span class=\"price-unit\">par seconde de vidéo</span></div><p class=\"note-s\">Tarif publié de référence pour la configuration affichée. Les frais définitifs correspondent à la configuration réellement facturée.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Exemples de requêtes</h3><h4>Ailoot Ultra · Vidéo</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes du code\"><button class=\"cg-tab\" id=\"model-code-1009-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1009-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · créer une vidéo</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copier le code\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1009-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1009-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;aspect_ratio&quot;:&quot;16:9&quot;,&quot;duration&quot;:8,&quot;model&quot;:&quot;alibaba/wan-3.0&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;resolution&quot;:&quot;720p&quot;}&#39;, encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recevoir et enregistrer les résultats</h3><h4>Ailoot Ultra · Vidéo</h4><p class=\"note-s\">URL signées de contenu vous appartenant</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{public_id}</code></li><li><code>GET /v1/videos/{public_id}/content</code></li></ul><h5>Vérifier l’état de la tâche</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes du code\"><button class=\"cg-tab\" id=\"model-code-1010-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1010-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET état de l’opération d’origine</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copier le code\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1010-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1010-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Autres lectures de contenu</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes du code\"><button class=\"cg-tab\" id=\"model-code-1011-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1011-panel-0\" aria-selected=\"true\" tabindex=\"0\">Enregistrer chaque sortie terminée dont vous êtes propriétaire</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copier le code\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1011-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1011-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Conserver tous les résultats terminés</h5><p class=\"note-s\">Enregistrez chaque vidéo terminée ou fichier renvoyé ; récupérez chaque URL de ressource effectivement renvoyée.</p><p class=\"note-s\">Conservez toutes les sorties réelles vous appartenant et les métadonnées mesurées renvoyées pour chacune.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Si la réponse d’origine doit être vérifiée</h5><p class=\"note-s\">503 result_pending_check + originalid + X-Should-Retry:false ; ne rejouez jamais la demande d’origine</p></div><details class=\"card-about\" data-output-fields><summary>Champs de la réponse</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Champ</th><th>Type</th><th>Signification</th></tr></thead><tbody><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Position de cette vidéo dans la liste des sorties, en commençant à zéro.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>URL HTTPS signée pour télécharger cette vidéo terminée.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Empreinte SHA-256 des octets vidéo d’origine ; null si indisponible.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Taille du fichier vidéo d’origine en octets ; null si indisponible.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Durée vidéo mesurée en millisecondes ; null si indisponible.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Largeur de la vidéo en pixels ; null si indisponible.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Hauteur de la vidéo en pixels ; null si indisponible.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Identifiant du codec vidéo ; null s’il n’est pas enregistré.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>boolean | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Indique si la vidéo contient une piste audio ; null si cela n’a pas été mesuré.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string | null</td><td data-cell-label=\"Signification\"><span class=\"card-cell-label\">Signification</span>Identifiant du codec audio ; null lorsqu’aucun identifiant n’est enregistré.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Erreurs et étapes suivantes</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Réponse</th><th>Condition</th><th>Étape suivante</th></tr></thead><tbody><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>L’accès vidéo n’est pas disponible, ou cet identifiant vidéo est introuvable.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Vérifiez l’accès vidéo. Pour une vidéo existante, utilisez son identifiant public d’origine et la même clé API.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La clé API ne correspond pas au compte authentifié.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Vérifiez votre clé API et l’accès à votre compte avant de soumettre la demande.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La requête n’a pas pu être lue ou l’index de téléchargement n’est pas valide.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Corrigez le corps de la requête. Pour un téléchargement, choisissez un index de sortie renvoyé par la tâche d’origine.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La configuration vidéo sélectionnée ne peut pas être tarifée.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Choisissez une configuration vidéo prise en charge et renseignez ses options obligatoires avant de soumettre une demande corrigée.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Une entrée vidéo ou une tâche de continuation d’origine n’est pas valide.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Utilisez des entrées HTTPS valides. Pour une continuation, utilisez l’identifiant vidéo public de votre original terminé avec la même clé API.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>402 · <code>billing_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le solde disponible ou les limites ne permettent pas de réserver les fonds nécessaires.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Vérifiez votre solde disponible et vos limites avant d’envoyer une nouvelle demande.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>503 · <code>server_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La vérification vidéo, le stockage ou l’accès au service est temporairement indisponible.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Attendez que le service soit disponible. Si vous possédez déjà un identifiant vidéo, consultez cette tâche d’origine au lieu de créer une autre génération.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le résultat vidéo d’origine et sa facturation nécessitent une vérification.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez l’identifiant vidéo renvoyé et consultez cette tâche. N’envoyez pas de demande de génération de remplacement tant que sa vérification est en cours.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le téléchargement de la vidéo existante est temporairement indisponible.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Consultez cette même tâche vidéo ultérieurement et téléchargez sa sortie existante. Une nouvelle génération crée une opération distincte.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le contenu vidéo n’a pas été publié.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Vérifiez le statut de la tâche d’origine. Téléchargez après l’apparition de completed ; si elle indique failed, suivez son avis de vérification de la facturation.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias du modèle</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=alibaba%2Fwan-3.0&amp;route=Ultra&amp;caller=alibaba%2Fwan-3.0&amp;fmt=videos\"><code>alibaba/wan-3.0</code></a></span></p><h4>Alias des chemins de méthode</h4><p class=\"note-s\">Utilisez les chemins de méthode indiqués ci-dessus.</p><h4>ID d’appel associés</h4><p class=\"note-s\"><a href=\"#m=alibaba%2Fwan-3.0&amp;route=Ultra&amp;caller=alibaba%2Fwan-3.0&amp;fmt=videos\"><code>alibaba/wan-3.0</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "alibaba/wan-3.0",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "alibaba/wan-3.0",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|alibaba%2Fwan-3.0",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Les tarifs affichés servent à estimer le coût avant la génération. Le montant final est calculé à partir du coût enregistré pour la génération d’origine. La durée mesurée du résultat et les quantités prévisionnelles ne constituent pas la quantité finale facturable.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Conservez toutes les sorties réelles vous appartenant et les métadonnées mesurées renvoyées pour chacune.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "L’accès vidéo n’est pas disponible, ou cet identifiant vidéo est introuvable.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez l’accès vidéo. Pour une vidéo existante, utilisez son identifiant public d’origine et la même clé API.",
                "type": "not_found_error"
              },
              {
                "condition": "La clé API ne correspond pas au compte authentifié.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez votre clé API et l’accès à votre compte avant de soumettre la demande.",
                "type": "authentication_error"
              },
              {
                "condition": "La requête n’a pas pu être lue ou l’index de téléchargement n’est pas valide.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Corrigez le corps de la requête. Pour un téléchargement, choisissez un index de sortie renvoyé par la tâche d’origine.",
                "type": "invalid_request_error"
              },
              {
                "condition": "La configuration vidéo sélectionnée ne peut pas être tarifée.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Choisissez une configuration vidéo prise en charge et renseignez ses options obligatoires avant de soumettre une demande corrigée.",
                "type": "price_unavailable"
              },
              {
                "condition": "Une entrée vidéo ou une tâche de continuation d’origine n’est pas valide.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Utilisez des entrées HTTPS valides. Pour une continuation, utilisez l’identifiant vidéo public de votre original terminé avec la même clé API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Le solde disponible ou les limites ne permettent pas de réserver les fonds nécessaires.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez votre solde disponible et vos limites avant d’envoyer une nouvelle demande.",
                "type": "billing_error"
              },
              {
                "condition": "La vérification vidéo, le stockage ou l’accès au service est temporairement indisponible.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Attendez que le service soit disponible. Si vous possédez déjà un identifiant vidéo, consultez cette tâche d’origine au lieu de créer une autre génération.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Le résultat vidéo d’origine et sa facturation nécessitent une vérification.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Conservez l’identifiant vidéo renvoyé et consultez cette tâche. N’envoyez pas de demande de génération de remplacement tant que sa vérification est en cours.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Le téléchargement de la vidéo existante est temporairement indisponible.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Consultez cette même tâche vidéo ultérieurement et téléchargez sa sortie existante. Une nouvelle génération crée une opération distincte.",
                "type": "server_error"
              },
              {
                "condition": "Le contenu vidéo n’a pas été publié.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez le statut de la tâche d’origine. Téléchargez après l’apparition de completed ; si elle indique failed, suivez son avis de vérification de la facturation.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + originalid + X-Should-Retry:false ; ne rejouez jamais la demande d’origine"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "alibaba/wan-3.0"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Fournissez prompt sous forme de texte et duration en secondes entières. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Une consigne écrite."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "alibaba/wan-3.0"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images est un tableau. Chaque objet d’image contient type, image_url et frame_type ; image_url contient url. Définissez type sur image_url. Utilisez first_frame. Chaque rôle d’image apparaît au plus une fois. Fournissez une URL HTTPS publique pour chaque image. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Une consigne écrite et une image initiale."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "alibaba/wan-3.0"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references est un tableau d’objets. Définissez type sur image_url et utilisez le champ correspondant contenant url. Utilisez des URL HTTPS publiques. Omettez frame_images pour sélectionner le mode avec références. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Une consigne écrite et des références image prises en charge."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Position de cette vidéo dans la liste des sorties, en commençant à zéro.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL HTTPS signée pour télécharger cette vidéo terminée.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Empreinte SHA-256 des octets vidéo d’origine ; null si indisponible.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Taille du fichier vidéo d’origine en octets ; null si indisponible.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Durée vidéo mesurée en millisecondes ; null si indisponible.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Largeur de la vidéo en pixels ; null si indisponible.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Hauteur de la vidéo en pixels ; null si indisponible.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Identifiant du codec vidéo ; null s’il n’est pas enregistré.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Indique si la vidéo contient une piste audio ; null si cela n’a pas été mesuré.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Identifiant du codec audio ; null lorsqu’aucun identifiant n’est enregistré.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "URL signées de contenu vous appartenant",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "alibaba/wan-3.0"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "alibaba/wan-3.0"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  24,
                  25,
                  26,
                  27,
                  28,
                  29,
                  30
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    24,
                    25,
                    26,
                    27,
                    28,
                    29,
                    30
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Ces clés décrivent chaque objet d’image ; image_url contient uniquement url. Omettez frame_images pour une requête contenant uniquement du texte.",
                "content": "Tableau d’objets d’image. Chaque objet comporte type=image_url, image_url contenant url et frame_type. Utilisez une URL HTTPS pour l’image et définissez frame_type sur first_frame. Chaque rôle d’image apparaît au plus une fois.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 1,
                "max_items": 1,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    24,
                    25,
                    26,
                    27,
                    28,
                    29,
                    30
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "alibaba/wan-3.0"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": false,
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist."
              ]
            },
            "unsupported": [
              "size",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 1080p",
              "quoted_unit": "per video second"
            },
            "label": "Tarif vidéo",
            "units": [
              {
                "amount": "0.4",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_1080p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.4",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Tarif vidéo",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Cette estimation ne constitue ni des frais supplémentaires ni un tarif fixe pour la génération terminée.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Coût de génération estimé",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"alibaba/wan-3.0\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 1080p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.4",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_1080p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.4",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "alibaba/wan-3.0",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.4",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_1080p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.4",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_480p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_720p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "alibaba/wan-3.0",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "fdca55e01530dbe5d64df2f600582d6b82fedca6d335d1498ed0878d71b537e1",
    "input_html_sha256": "eaf74a6c4274a7f48a5bde205a8364bd4a55bcfeb4f27baa263bc45ff59e04f5",
    "private_audit_sha256": "2a782ef904662376a386e3714b2b876d93282bcf55ebd2ab6726b526680a6d95",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr/alibaba-wan-3-0/",
    "description": "Alibaba Wan 3.0 crée des vidéos avec du son à partir d’un prompt, d’une première image ou d’images de début et de fin, ainsi que de références multimodales. Son profil producteur combine storyboard, modification à partir d’une source et prolongement dans un même modèle, avec des sorties MP4 de 2 à 30 secondes à 30 images par seconde en 480p, 720p ou 1080p.",
    "locale": "fr",
    "md_url": "https://ailoot.ai/models/fr/alibaba-wan-3-0/index.md",
    "title": "Alibaba: Wan 3.0 — Ailoot",
    "url": "https://ailoot.ai/models/fr/alibaba-wan-3-0/"
  },
  "rawModel": {
    "about": "Alibaba Wan 3.0 est un profil de création vidéo tout-en-un conçu pour transformer un brief et des matériaux complémentaires en scène avec son audio. Le producteur identifie le modèle standard sous le nom wan3.0-video. La génération à partir de texte seul, les images d’ouverture et de fin, les références multimodales, la modification et le prolongement utilisent des configurations d’entrée différentes dans ce profil. Les livrables utiles comprennent une courte narration, une présentation de produit, une transition basée sur des images ou un clip source révisé dont les changements suivent une direction créative précise.\n\nPour une scène à partir de texte uniquement, préparez le sujet, le lieu, l’action, la caméra, le style visuel et le son. Le producteur prend en charge les plans uniques et les storyboards à plusieurs plans, avec une structure recommandée d’environ quatre à six secondes par plan et des plages temporelles facultatives. Pour une courte histoire, présentez un petit oiseau mécanique sur un établi, suivez son premier mouvement et terminez sur un gros plan maintenu pendant que l’ambiance sonore de la pièce se poursuit. Décrivez la relation visuelle entre ces moments afin que les trente secondes autorisées servent une histoire cohérente plutôt qu’une liste d’actions sans lien.\n\nLa génération à partir d’une première image anime une image fixe fournie. Celle-ci définit la composition initiale, tandis que le prompt explique le mouvement et le travail de caméra. La génération avec première et dernière image fixe aussi la fin et décrit la transition entre les deux images. Préparez des extrémités avec une scène compatible et le cadrage souhaité. Le guide recommande la sélection adaptative du rapport largeur/hauteur pour ces modes. Leurs images d’entrée restent séparées des configurations d’images, de vidéos et de sons de référence, de fichiers et de liens web : choisissez donc le mode de matériaux correspondant au plan prévu.\n\nLe mode de références combine jusqu’à dix images, cinq clips vidéo et cinq clips audio, dans une limite totale de vingt matériaux. Les images de référence peuvent identifier un personnage, un objet, un décor ou un style ; la vidéo peut guider le mouvement ou le travail de caméra, et le son peut guider l’interprétation ou le rythme. Les étiquettes propres au type, telles que Image 1, Video 1 et Audio 1, suivent indépendamment l’ordre d’entrée. Donnez un rôle à chaque référence et décrivez ses interactions avec les autres. Un personnage dont l’apparence est correcte dans le mauvais décor constitue un échec différent d’une caméra qui manque le mouvement prévu.\n\nLes limites documentées des fichiers de référence sont de 20 Mo par image, 100 Mo par vidéo et 15 Mo par clip audio. Les vidéos de référence sont limitées ensemble à quinze secondes, et les références audio ont une limite totale distincte de quinze secondes. Un document ou une référence de page web publique peut accompagner les références ; un document et un lien s’excluent mutuellement. La source doit être accessible publiquement sans connexion. Préparez une source ciblée et précisez le contenu qui doit informer le clip, surtout lorsqu’un document contient plus d’informations que la scène ne peut en utiliser.\n\nLe son natif combine le dialogue, la musique de fond, l’ambiance et les effets sonores avec l’image générée. Précisez les mots à prononcer, la personne qui parle et son interprétation, les effets importants et la présence souhaitée ou non de musique de fond. Le son est activé par défaut dans le guide du producteur et peut être désactivé. Pour une scène de démonstration, une courte réplique d’introduction peut précéder un détail de produit tandis qu’un léger bruit mécanique marque le mouvement. Écoutez le clip terminé pour les mots réels, leur attribution et leur synchronisation, au lieu de juger le son à partir du brief écrit seul.\n\nPour une modification, décrivez le changement et le contenu à conserver. Le guide couvre l’ajout ou la suppression d’éléments, le remplacement d’attributs, les changements de style visuel ou d’éclairage et la révision des dialogues. Pour un prolongement, décrivez ce qui doit se produire avant, après ou autour du clip existant. Le cadrage adaptatif et la durée intelligente aident le processus avec vidéo source à préserver son format et l’intention temporelle. Lorsqu’une entrée vidéo est fournie, la durée combinée documentée de la vidéo d’entrée et de celle de sortie ne doit pas dépasser 30 secondes. Conservez la source originale et examinez la zone modifiée ainsi que la continuité de tout le clip.\n\nLa sortie est un MP4 à 30 images par seconde, en 480p, 720p ou 1080p. Les durées de nouvelle génération vont de deux à trente secondes, ou un réglage de durée intelligente peut laisser le modèle choisir la longueur. Les formats paysage, carré et portrait sont documentés, avec un cadrage adaptatif adapté aux matériaux fournis. Le producteur traite la requête comme une tâche et renvoie une adresse de vidéo terminée valide pendant vingt-quatre heures. Conservez le résultat lui-même, le brief et les références comme dossier de production, et vérifiez la durée et le cadrage renvoyés avant de l’assembler avec d’autres clips.\n\nWan 3.0 standard et sa variante Prime partagent les modes tout-en-un documentés ; Prime met l’accent sur la vitesse de génération. Wan 2.7 et 2.6 ont des règles de durée et de références distinctes selon la tâche : leurs interfaces ne doivent donc pas être considérées comme la configuration de cette édition. Examinez la scène terminée pour l’identité des personnages et des produits, la continuité spatiale, la parole, les effets, les détails issus des sources et le début et la fin souhaités. Une correction suivante précise préserve la direction réussie tout en traitant le défaut réel constaté dans le clip.",
    "alias_of": null,
    "aliases": [],
    "author": "Alibaba",
    "available": null,
    "canonical_model": "alibaba/wan-3.0",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "La tarification complète de la configuration figure dans les détails."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "60032db7110388d3f9b8af18",
        "label": "Références tarifaires des configurations vidéo",
        "profiles": [
          {
            "basis": "Tarif publié de référence pour la configuration affichée. Les frais définitifs correspondent à la configuration réellement facturée.",
            "dimensions": {
              "conditions": "resolution: 480p"
            },
            "label": "Tarif vidéo",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Tarif publié de référence pour la configuration affichée. Les frais définitifs correspondent à la configuration réellement facturée.",
            "dimensions": {
              "conditions": "resolution: 720p"
            },
            "label": "Tarif vidéo",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Tarif publié de référence pour la configuration affichée. Les frais définitifs correspondent à la configuration réellement facturée.",
            "dimensions": {
              "conditions": "resolution: 1080p"
            },
            "label": "Tarif vidéo",
            "units": [
              {
                "amount": "0.4",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "key": "video_second",
                "label": "Video price",
                "public_unit_label": "per video second",
                "quantity": 1,
                "rate_role": "typed_video_second_reference",
                "side": "out",
                "unit": "video_second"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "alibaba/wan-3.0",
    "input": [
      "text",
      "image"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Les tarifs affichés servent à estimer le coût avant la génération. Le montant final est calculé à partir du coût enregistré pour la génération d’origine. La durée mesurée du résultat et les quantités prévisionnelles ne constituent pas la quantité finale facturable.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Conservez toutes les sorties réelles vous appartenant et les métadonnées mesurées renvoyées pour chacune.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "L’accès vidéo n’est pas disponible, ou cet identifiant vidéo est introuvable.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez l’accès vidéo. Pour une vidéo existante, utilisez son identifiant public d’origine et la même clé API.",
                "type": "not_found_error"
              },
              {
                "condition": "La clé API ne correspond pas au compte authentifié.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez votre clé API et l’accès à votre compte avant de soumettre la demande.",
                "type": "authentication_error"
              },
              {
                "condition": "La requête n’a pas pu être lue ou l’index de téléchargement n’est pas valide.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Corrigez le corps de la requête. Pour un téléchargement, choisissez un index de sortie renvoyé par la tâche d’origine.",
                "type": "invalid_request_error"
              },
              {
                "condition": "La configuration vidéo sélectionnée ne peut pas être tarifée.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Choisissez une configuration vidéo prise en charge et renseignez ses options obligatoires avant de soumettre une demande corrigée.",
                "type": "price_unavailable"
              },
              {
                "condition": "Une entrée vidéo ou une tâche de continuation d’origine n’est pas valide.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Utilisez des entrées HTTPS valides. Pour une continuation, utilisez l’identifiant vidéo public de votre original terminé avec la même clé API.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Le solde disponible ou les limites ne permettent pas de réserver les fonds nécessaires.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez votre solde disponible et vos limites avant d’envoyer une nouvelle demande.",
                "type": "billing_error"
              },
              {
                "condition": "La vérification vidéo, le stockage ou l’accès au service est temporairement indisponible.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Attendez que le service soit disponible. Si vous possédez déjà un identifiant vidéo, consultez cette tâche d’origine au lieu de créer une autre génération.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Le résultat vidéo d’origine et sa facturation nécessitent une vérification.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Conservez l’identifiant vidéo renvoyé et consultez cette tâche. N’envoyez pas de demande de génération de remplacement tant que sa vérification est en cours.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Le téléchargement de la vidéo existante est temporairement indisponible.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Consultez cette même tâche vidéo ultérieurement et téléchargez sa sortie existante. Une nouvelle génération crée une opération distincte.",
                "type": "server_error"
              },
              {
                "condition": "Le contenu vidéo n’a pas été publié.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Vérifiez le statut de la tâche d’origine. Téléchargez après l’apparition de completed ; si elle indique failed, suivez son avis de vérification de la facturation.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + originalid + X-Should-Retry:false ; ne rejouez jamais la demande d’origine"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "alibaba/wan-3.0"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Fournissez prompt sous forme de texte et duration en secondes entières. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Une consigne écrite."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "alibaba/wan-3.0"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images est un tableau. Chaque objet d’image contient type, image_url et frame_type ; image_url contient url. Définissez type sur image_url. Utilisez first_frame. Chaque rôle d’image apparaît au plus une fois. Fournissez une URL HTTPS publique pour chaque image. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Une consigne écrite et une image initiale."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "alibaba/wan-3.0"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references est un tableau d’objets. Définissez type sur image_url et utilisez le champ correspondant contenant url. Utilisez des URL HTTPS publiques. Omettez frame_images pour sélectionner le mode avec références. Choisissez une résolution prise en charge et, si nécessaire, un rapport d’image.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Une consigne écrite et des références image prises en charge."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Position de cette vidéo dans la liste des sorties, en commençant à zéro.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL HTTPS signée pour télécharger cette vidéo terminée.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Empreinte SHA-256 des octets vidéo d’origine ; null si indisponible.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Taille du fichier vidéo d’origine en octets ; null si indisponible.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Durée vidéo mesurée en millisecondes ; null si indisponible.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Largeur de la vidéo en pixels ; null si indisponible.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Hauteur de la vidéo en pixels ; null si indisponible.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Identifiant du codec vidéo ; null s’il n’est pas enregistré.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Indique si la vidéo contient une piste audio ; null si cela n’a pas été mesuré.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Identifiant du codec audio ; null lorsqu’aucun identifiant n’est enregistré.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "URL signées de contenu vous appartenant",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "alibaba/wan-3.0"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "alibaba/wan-3.0"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  24,
                  25,
                  26,
                  27,
                  28,
                  29,
                  30
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    24,
                    25,
                    26,
                    27,
                    28,
                    29,
                    30
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Ces clés décrivent chaque objet d’image ; image_url contient uniquement url. Omettez frame_images pour une requête contenant uniquement du texte.",
                "content": "Tableau d’objets d’image. Chaque objet comporte type=image_url, image_url contenant url et frame_type. Utilisez une URL HTTPS pour l’image et définissez frame_type sur first_frame. Chaque rôle d’image apparaît au plus une fois.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 1,
                "max_items": 1,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    24,
                    25,
                    26,
                    27,
                    28,
                    29,
                    30
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "alibaba/wan-3.0"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": false,
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist."
              ]
            },
            "unsupported": [
              "size",
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 1080p",
              "quoted_unit": "per video second"
            },
            "label": "Tarif vidéo",
            "units": [
              {
                "amount": "0.4",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_1080p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.4",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Tarif vidéo",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "Cette estimation ne constitue ni des frais supplémentaires ni un tarif fixe pour la génération terminée.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Coût de génération estimé",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"alibaba/wan-3.0\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 1080p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.4",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_1080p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.4",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 480p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.1",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_480p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.1",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "dimensions": {
              "conditions": "resolution: 720p",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "duration_seconds_720p",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.2",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.2",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "alibaba/wan-3.0",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.4",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_1080p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.4",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.1",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_480p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.1",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "duration_seconds_720p",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "alibaba/wan-3.0",
        "request_model_id": "alibaba/wan-3.0",
        "route_label": "Ultra"
      }
    ],
    "name": "Alibaba: Wan 3.0",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.2,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.2,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "International",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.10",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "International",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "International",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.10",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "International",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "International",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.2",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "International",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 2,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "International",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.2",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "International",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 3,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "International",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.4",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "International",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 4,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "International",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.4",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "International",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 5,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 6,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 7,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 8,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 9,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 10,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 11,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 12,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 13,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 14,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 15,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 16,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 17,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 18,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 19,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 20,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 21,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 22,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 23,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 24,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 25,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 26,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 27,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 28,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 29,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 30,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "480P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.082512",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "480P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 31,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 32,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "720P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.165026",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "720P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 33,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_input_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "input_video_second",
            "label": "input video second",
            "profile_index": 34,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "Model ID": "wan3.0-video",
          "Output video resolution": "1080P",
          "Service deployment scope": "Global",
          "input_output_charged_separately_additive": true,
          "maker_published_model_id": "wan3.0-video"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.330050",
            "amount_unit": "usd_per_output_video_second",
            "conditions": {
              "Model ID": "wan3.0-video",
              "Output video resolution": "1080P",
              "Service deployment scope": "Global",
              "input_output_charged_separately_additive": true,
              "maker_published_model_id": "wan3.0-video"
            },
            "key": "output_video_second",
            "label": "output video second",
            "profile_index": 35,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "output_video_second"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.10",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=480p",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.10",
            "key": "duration_seconds_480p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.10",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.2",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=720p",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.2",
            "key": "duration_seconds_720p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.2",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          },
          {
            "amount": "0.4",
            "amount_unit": "usd_per_exact_physical_unit",
            "basis": "resolution=1080p",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.4",
            "key": "duration_seconds_1080p",
            "label": "output second",
            "native_amount_usd_per_unit": "0.4",
            "native_quantity": 1,
            "quantity": 1,
            "side": "out",
            "unit": "output_second"
          }
        ]
      }
    ],
    "public_id": "alibaba/wan-3.0",
    "short": "Alibaba Wan 3.0 crée des vidéos avec du son à partir d’un prompt, d’une première image ou d’images de début et de fin, ainsi que de références multimodales. Son profil producteur combine storyboard, modification à partir d’une source et prolongement dans un même modèle, avec des sorties MP4 de 2 à 30 secondes à 30 images par seconde en 480p, 720p ou 1080p."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Alibaba Wan 3.0 crée des vidéos avec du son à partir d’un prompt, d’une première image ou d’images de début et de fin, ainsi que de références multimodales. Son profil producteur combine storyboard, modification à partir d’une source et prolongement dans un même modèle, avec des sorties MP4 de 2 à 30 secondes à 30 images par seconde en 480p, 720p ou 1080p.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_exact_canonical_sha256": "b7b180b630409e4df6bd23b8dc3a5f11c1235d6cc70fa717e84c0334843de2fa",
    "raw_model_js_projection_sha256": "8d937b783535d614bca9c7598a269f4df2828d3428dc24258656d51e50336906",
    "raw_model_json_sha256": "b7b180b630409e4df6bd23b8dc3a5f11c1235d6cc70fa717e84c0334843de2fa",
    "renderer_sha256": "44d2db1deadc475e1793597083716540bae7bbc53606f05f58780fec5f115dd4"
  },
  "sourceRevision": "5554161f052be67fa037388de557f278bf8a522f6f987cb46f2ebc7406f163c4"
}
