{
  "aboutHtml": "<p>DOP Preview anime les images fournies selon le processus de conversion d’image en vidéo documenté par Higgsfield. Le sélecteur exact est dop-preview. Utilisez dop-preview pour sélectionner le modèle au niveau supérieur et comme valeur de model dans l’objet params documenté. L’image fournit le contenu visuel, tandis que les modèles de mouvement et les instructions écrites déterminent le mouvement et l’effet demandés.</p><p>Préparez une image de référence dans laquelle le sujet visé, les détails importants et l’espace environnant sont bien lisibles. Le guide recommande une image haute résolution pour obtenir des détails plus nets. Pour une scène de produit, choisissez une vue qui montre la forme de l’objet et les surfaces qui doivent rester reconnaissables pendant le mouvement. Pour une personne ou un environnement, identifiez la caractéristique visuelle que le mouvement doit mettre en valeur. Fournissez l’URL réelle de l’image de référence via l’entrée image utilisée dans l’exemple de la méthode.</p><p>L’opération documente l’utilisation d’un ou de deux modèles de mouvement. Lorsque deux modèles sont fournis, le guide indique que leurs effets se combinent. Les descriptions des préréglages comprennent des mouvements de caméra, la rotation du sujet et des transformations visuelles ; par exemple, Dolly In décrit un rapprochement de la caméra, tandis que 3D Rotation décrit un sujet ou un produit qui tourne sur place. Sélectionnez les identifiants documentés des modèles de mouvement correspondant à la séquence souhaitée et conservez chaque identifiant avec sa valeur d’intensité.</p><p>L’intensité du mouvement est un nombre compris entre 0 et 1, dont la valeur par défaut documentée est 0,8. Le guide décrit 0,3 comme un effet subtil et 1 comme un mouvement marqué. Choisissez l’intensité en fonction des détails qui doivent rester lisibles et examinez l’ensemble de l’action générée. La description d’un mouvement et son intensité ont des rôles distincts : le modèle de mouvement sélectionne l’effet, tandis que l’intensité en règle la force.</p><p>Le champ prompt doit être présent selon sa description, mais une chaîne vide est autorisée. Pour les effets pilotés par un modèle de mouvement, le guide recommande de laisser prompt vide ; lorsqu’un texte est fourni, il recommande d’inclure la description du modèle de mouvement, car le prompt peut fortement modifier le résultat. Le contrôle enhance_prompt active l’optimisation du prompt et sa valeur par défaut documentée est true. Conservez le texte et ce contrôle avec l’image de référence et les modèles de mouvement sélectionnés lorsque vous comparez des versions.</p><p>Le contrôle seed accepte un entier de 1 à 1 000 000. Enregistrez la valeur seed choisie avec les paramètres de génération. La requête expose également un champ seconds de type entier ; conservez la valeur utilisée avec le clip obtenu et examinez la durée et le cadrage réels du clip. Le booléen check_nsfw active le filtre de contenu documenté et vaut true par défaut. Ces contrôles appartiennent à la requête de conversion d’image en vidéo et doivent rester associés au modèle exact sélectionné.</p><p>La génération est asynchrone. Conservez l’identifiant de tâche renvoyé lors du suivi par les requêtes de statut et de résultat configurées. La correspondance utilisée à l’achèvement lit les entrées des traitements terminés et les URL brutes de leurs résultats. Enregistrez chaque vidéo terminée et conservez son identifiant de traitement avec l’URL renvoyée, en regroupant toutes les entrées terminées comme résultat de l’opération.</p><p>Examinez la vidéo entière au regard de l’image fournie, de l’effet choisi et des instructions écrites : apparence du sujet, mouvement, cadrage et vue de fin. Pour une révision, identifiez le détail visuel concret à modifier et conservez les éléments de la requête qui ont réussi. Conservez ensemble la référence de l’image d’origine, le sélecteur exact, le prompt, les identifiants de mouvement, les intensités, la valeur seed, les paramètres demandés et les ressources terminées afin que la comparaison suivante repose sur la génération réelle.</p>",
  "aboutText": "DOP Preview anime les images fournies selon le processus de conversion d’image en vidéo documenté par Higgsfield. Le sélecteur exact est dop-preview. Utilisez dop-preview pour sélectionner le modèle au niveau supérieur et comme valeur de model dans l’objet params documenté. L’image fournit le contenu visuel, tandis que les modèles de mouvement et les instructions écrites déterminent le mouvement et l’effet demandés.\n\nPréparez une image de référence dans laquelle le sujet visé, les détails importants et l’espace environnant sont bien lisibles. Le guide recommande une image haute résolution pour obtenir des détails plus nets. Pour une scène de produit, choisissez une vue qui montre la forme de l’objet et les surfaces qui doivent rester reconnaissables pendant le mouvement. Pour une personne ou un environnement, identifiez la caractéristique visuelle que le mouvement doit mettre en valeur. Fournissez l’URL réelle de l’image de référence via l’entrée image utilisée dans l’exemple de la méthode.\n\nL’opération documente l’utilisation d’un ou de deux modèles de mouvement. Lorsque deux modèles sont fournis, le guide indique que leurs effets se combinent. Les descriptions des préréglages comprennent des mouvements de caméra, la rotation du sujet et des transformations visuelles ; par exemple, Dolly In décrit un rapprochement de la caméra, tandis que 3D Rotation décrit un sujet ou un produit qui tourne sur place. Sélectionnez les identifiants documentés des modèles de mouvement correspondant à la séquence souhaitée et conservez chaque identifiant avec sa valeur d’intensité.\n\nL’intensité du mouvement est un nombre compris entre 0 et 1, dont la valeur par défaut documentée est 0,8. Le guide décrit 0,3 comme un effet subtil et 1 comme un mouvement marqué. Choisissez l’intensité en fonction des détails qui doivent rester lisibles et examinez l’ensemble de l’action générée. La description d’un mouvement et son intensité ont des rôles distincts : le modèle de mouvement sélectionne l’effet, tandis que l’intensité en règle la force.\n\nLe champ prompt doit être présent selon sa description, mais une chaîne vide est autorisée. Pour les effets pilotés par un modèle de mouvement, le guide recommande de laisser prompt vide ; lorsqu’un texte est fourni, il recommande d’inclure la description du modèle de mouvement, car le prompt peut fortement modifier le résultat. Le contrôle enhance_prompt active l’optimisation du prompt et sa valeur par défaut documentée est true. Conservez le texte et ce contrôle avec l’image de référence et les modèles de mouvement sélectionnés lorsque vous comparez des versions.\n\nLe contrôle seed accepte un entier de 1 à 1 000 000. Enregistrez la valeur seed choisie avec les paramètres de génération. La requête expose également un champ seconds de type entier ; conservez la valeur utilisée avec le clip obtenu et examinez la durée et le cadrage réels du clip. Le booléen check_nsfw active le filtre de contenu documenté et vaut true par défaut. Ces contrôles appartiennent à la requête de conversion d’image en vidéo et doivent rester associés au modèle exact sélectionné.\n\nLa génération est asynchrone. Conservez l’identifiant de tâche renvoyé lors du suivi par les requêtes de statut et de résultat configurées. La correspondance utilisée à l’achèvement lit les entrées des traitements terminés et les URL brutes de leurs résultats. Enregistrez chaque vidéo terminée et conservez son identifiant de traitement avec l’URL renvoyée, en regroupant toutes les entrées terminées comme résultat de l’opération.\n\nExaminez la vidéo entière au regard de l’image fournie, de l’effet choisi et des instructions écrites : apparence du sujet, mouvement, cadrage et vue de fin. Pour une révision, identifiez le détail visuel concret à modifier et conservez les éléments de la requête qui ont réussi. Conservez ensemble la référence de l’image d’origine, le sélecteur exact, le prompt, les identifiants de mouvement, les intensités, la valeur seed, les paramètres demandés et les ressources terminées afin que la comparaison suivante repose sur la génération réelle.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "e584d3325e617dbbbe7be6f4d656262e26b4512a2e323328367e1c797259e7f0",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr-be",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Higgsfield: DOP Preview</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fermer\">×</button></div><div class=\"idline\"><span>Higgsfield /</span><code>dop-preview</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|dop-preview\">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\">DOP Preview transforme les images fournies en vidéo selon le processus documenté de modèles de mouvement. Le sélecteur exact dop-preview prend en charge un ou deux effets, avec des contrôles d’intensité, de prompt et de seed conservés avec le résultat terminé.</p><dl class=\"card-io\" data-card-io><div><dt>Entrées acceptées</dt><dd>Images · Texte</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>DOP Preview anime les images fournies selon le processus de conversion d’image en vidéo documenté par Higgsfield. Le sélecteur exact est dop-preview. Utilisez dop-preview pour sélectionner le modèle au niveau supérieur et comme valeur de model dans l’objet params documenté. L’image fournit le contenu visuel, tandis que les modèles de mouvement et les instructions écrites déterminent le mouvement et l’effet demandés.</p><p>Préparez une image de référence dans laquelle le sujet visé, les détails importants et l’espace environnant sont bien lisibles. Le guide recommande une image haute résolution pour obtenir des détails plus nets. Pour une scène de produit, choisissez une vue qui montre la forme de l’objet et les surfaces qui doivent rester reconnaissables pendant le mouvement. Pour une personne ou un environnement, identifiez la caractéristique visuelle que le mouvement doit mettre en valeur. Fournissez l’URL réelle de l’image de référence via l’entrée image utilisée dans l’exemple de la méthode.</p><p>L’opération documente l’utilisation d’un ou de deux modèles de mouvement. Lorsque deux modèles sont fournis, le guide indique que leurs effets se combinent. Les descriptions des préréglages comprennent des mouvements de caméra, la rotation du sujet et des transformations visuelles ; par exemple, Dolly In décrit un rapprochement de la caméra, tandis que 3D Rotation décrit un sujet ou un produit qui tourne sur place. Sélectionnez les identifiants documentés des modèles de mouvement correspondant à la séquence souhaitée et conservez chaque identifiant avec sa valeur d’intensité.</p><p>L’intensité du mouvement est un nombre compris entre 0 et 1, dont la valeur par défaut documentée est 0,8. Le guide décrit 0,3 comme un effet subtil et 1 comme un mouvement marqué. Choisissez l’intensité en fonction des détails qui doivent rester lisibles et examinez l’ensemble de l’action générée. La description d’un mouvement et son intensité ont des rôles distincts : le modèle de mouvement sélectionne l’effet, tandis que l’intensité en règle la force.</p><p>Le champ prompt doit être présent selon sa description, mais une chaîne vide est autorisée. Pour les effets pilotés par un modèle de mouvement, le guide recommande de laisser prompt vide ; lorsqu’un texte est fourni, il recommande d’inclure la description du modèle de mouvement, car le prompt peut fortement modifier le résultat. Le contrôle enhance_prompt active l’optimisation du prompt et sa valeur par défaut documentée est true. Conservez le texte et ce contrôle avec l’image de référence et les modèles de mouvement sélectionnés lorsque vous comparez des versions.</p><p>Le contrôle seed accepte un entier de 1 à 1 000 000. Enregistrez la valeur seed choisie avec les paramètres de génération. La requête expose également un champ seconds de type entier ; conservez la valeur utilisée avec le clip obtenu et examinez la durée et le cadrage réels du clip. Le booléen check_nsfw active le filtre de contenu documenté et vaut true par défaut. Ces contrôles appartiennent à la requête de conversion d’image en vidéo et doivent rester associés au modèle exact sélectionné.</p><p>La génération est asynchrone. Conservez l’identifiant de tâche renvoyé lors du suivi par les requêtes de statut et de résultat configurées. La correspondance utilisée à l’achèvement lit les entrées des traitements terminés et les URL brutes de leurs résultats. Enregistrez chaque vidéo terminée et conservez son identifiant de traitement avec l’URL renvoyée, en regroupant toutes les entrées terminées comme résultat de l’opération.</p><p>Examinez la vidéo entière au regard de l’image fournie, de l’effet choisi et des instructions écrites : apparence du sujet, mouvement, cadrage et vue de fin. Pour une révision, identifiez le détail visuel concret à modifier et conservez les éléments de la requête qui ont réussi. Conservez ensemble la référence de l’image d’origine, le sélecteur exact, le prompt, les identifiants de mouvement, les intensités, la valeur seed, les paramètres demandés et les ressources terminées afin que la comparaison suivante repose sur la génération réelle.</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>Entrée</dt><dd><code>image</code>, <code>text</code></dd></div><div><dt>Sortie</dt><dd><code>video</code></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>dop-preview</div><div>Conditions: Sélecteur de modèle Ailoot.</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\">params</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>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Conditions: Paramètres de génération d’image vers vidéo ; conservez cette enveloppe.</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\">params.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>dop-preview</div><div>Conditions: Utilisez le même sélecteur que pour le modèle de niveau supérieur.</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\">params.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><div>Conditions: Conservez ce champ dans la requête ; une chaîne vide est documentée. Les indications écrites influencent fortement l’effet de mouvement sélectionné.</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\">params.seconds</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>Conditions: Durée demandée ; aucune plage ni valeur par défaut documentée n’est affirmée.</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\">params.motions</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>Conditions: Choisissez un ou deux modèles de mouvement documentés.</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\">params.motions[].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>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Conditions: Identifiant de mouvement dans l’exemple documenté de requête fonctionnelle.</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\">params.motions[].strength</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>number</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>Minimum: 0</div><div>Maximum: 1</div><div>Conditions: Intensité du mouvement : 0.3 est décrit comme subtil et 1 comme fort.</div></td><td data-cell-label=\"Par défaut\" data-default=\"known\"><span class=\"card-cell-label\">Par défaut</span>0,8</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\">params.input_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>Conditions: Images de référence, à l’aide du tableau d’objets image_url présenté dans l’exemple fonctionnel.</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\">params.input_images[].type</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>image_url</div><div>Conditions: Représentation de la référence.</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\">params.input_images[].image_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>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>Conditions: L’URL réelle et accessible de votre image de référence.</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\">params.enhance_prompt</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>Conditions: Amélioration de la consigne.</div></td><td data-cell-label=\"Par défaut\" data-default=\"known\"><span class=\"card-cell-label\">Par défaut</span>true</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\">params.check_nsfw</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>Conditions: Filtrage du contenu.</div></td><td data-cell-label=\"Par défaut\" data-default=\"known\"><span class=\"card-cell-label\">Par défaut</span>true</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\">params.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: 1</div><div>Maximum: 1 000 000</div><div>Conditions: Graine aléatoire pour obtenir des résultats cohérents.</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\">webhook</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><div>Conditions: Paramètres webhook facultatifs et documentés ; la récupération des résultats dont vous êtes propriétaire utilise les chemins des tâches Ailoot.</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\">webhook.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>Conditions: L’URL de votre destinataire.</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\">webhook.secret</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>Conditions: Le secret de votre destinataire.</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</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>Conditions: Destinataire facultatif du callback ; le destinataire documenté répond avec HTTP 200.</div></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></b></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, params</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>optional</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>params.seconds, params.motions, params.input_images, params.enhance_prompt, params.check_nsfw, params.seed, webhook, webhook.url, webhook.secret, callback</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>image, text</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>true</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>validation_scope</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>Le modèle détermine la route de la requête ; l’enveloppe des paramètres suit la requête de génération d’image vers vidéo présentée.</td></tr></tbody></table></div><p>Alias de méthode : <code>/v1/videos/generations</code></p><p>Cycle de vie : <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}/content</code></p><p class=\"note-s\">Utilisez le même sélecteur de modèle au niveau supérieur et dans params.</p><p class=\"note-s\">Créez une seule fois, puis utilisez l’id public et polling_url renvoyés pour l’opération d’origine.</p><p class=\"note-s\">Récupérez chaque vidéo terminée dont vous êtes propriétaire ; vérifiez sa durée et ses dimensions réelles dans le résultat.</p><p class=\"note-s\">Remplacez YOUR_ACCESSIBLE_IMAGE_URL dans l’exemple par l’URL réelle de votre image de référence.</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>Coût</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarifs de base des jetons</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=\"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>Coût estimé de la génération</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=\"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>$1.24</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-be/billing/reserve/\">Fonctionnement de la réservation et du débit →</a></p></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-2784-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2784-panel-0\" aria-selected=\"true\" tabindex=\"0\">JSON · créer une vidéo</button><button class=\"cg-tab\" id=\"model-code-2784-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2784-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · lire la tâche 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-2784-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2784-tab-0\"><pre data-lang=\"json\"><code>{\n  &quot;model&quot;: &quot;dop-preview&quot;,\n  &quot;params&quot;: {\n    &quot;model&quot;: &quot;dop-preview&quot;,\n    &quot;prompt&quot;: &quot;a cat&quot;,\n    &quot;seed&quot;: 500000,\n    &quot;motions&quot;: [\n      {\n        &quot;id&quot;: &quot;2bae49e6-ffe7-42a8-a73f-d44632c4acaa&quot;,\n        &quot;strength&quot;: 0.5\n      }\n    ],\n    &quot;input_images&quot;: [\n      {\n        &quot;type&quot;: &quot;image_url&quot;,\n        &quot;image_url&quot;: &quot;YOUR_ACCESSIBLE_IMAGE_URL&quot;\n      }\n    ],\n    &quot;enhance_prompt&quot;: true,\n    &quot;check_nsfw&quot;: true\n  }\n}</code></pre></div><div class=\"cg-pane\" id=\"model-code-2784-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2784-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_POLL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(&quot;result.json&quot;).read_text())\ni=r.get(&quot;id&quot;)\nif not isinstance(i,str) or not i:raise SystemExit(&quot;Keep original response/headers/id; do not resubmit creation.&quot;)\nu=urljoin(&quot;https://api.ailoot.ai&quot;,r.get(&quot;polling_url&quot;) or &quot;/v1/videos/&quot;+quote(i,safe=&quot;&quot;))\np=urlsplit(u)\nif p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/videos/&quot;):raise SystemExit(&quot;Use the actual Ailoot lookup path.&quot;)\nPath(&quot;poll-url.txt&quot;).write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error &quot;$(cat poll-url.txt)&quot; -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\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\">Conservez les tâches renvoyées et leurs états. Consultez chaque résultat vidéo terminé dont vous êtes propriétaire.</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/generations/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li><li><code>GET /v1/videos/generations/{request_id}/content</code></li></ul><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\">Récupérez chaque résultat réellement terminé ; ne supposez pas un nombre fixe.</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\">Conservez la réponse d’origine et l’identité de tâche renvoyée ; un état non reconnu ou un envoi au résultat ambigu n’autorise pas une nouvelle création.</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\">id</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>Identifiant public de tâche ou d’opération Ailoot.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">provider_task_id</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>Identifiant de la tâche d’origine, distinct de l’id public.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">polling_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>Chemin de consultation Ailoot renvoyé.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">jobs[].id</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>Identifiant réel de la tâche renvoyée.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">jobs[].status</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>État de chaque tâche renvoyée.</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">jobs[].results.raw.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>Chaque vidéo terminée est accessible par une URL signée appartenant à Ailoot.</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>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>JSON/modèle invalide ou index de contenu invalide.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span></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>Clé API Ailoot invalide.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span></td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>403 · <code>permission_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le groupe de la clé API n’est pas autorisé à utiliser cette route média.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span></td></tr><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>La tâche d’origine ou le résultat demandé est absent ou n’appartient pas au même utilisateur, à la même clé API et au même groupe.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span></td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>502 · <code>result_pending_check</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La soumission initiale ou son état est incomplet ou ne peut pas être rapproché des données disponibles ; conservez l’ID d’origine et ne soumettez pas de nouveau la requête.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span></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>L’association d’origine, la route ou le média dont vous êtes propriétaire fait encore l’objet de vérifications ; poursuivez la vérification de cette opération d’origine.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span></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>Le service de médias ou le stockage des tâches d’origine est indisponible.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span></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=dop-preview&amp;route=Ultra&amp;caller=dop-preview&amp;fmt=videos\"><code>dop-preview</code></a></span></p><h4>Alias des chemins de méthode</h4><p class=\"note-s\"><code>/v1/videos/generations</code></p><h4>ID d’appel associés</h4><p class=\"note-s\"><a href=\"#m=dop-preview&amp;route=Ultra&amp;caller=dop-preview&amp;fmt=videos\"><code>dop-preview</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "dop-preview",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "dop-preview",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|dop-preview",
      "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": {
            "errors": [
              {
                "condition": "JSON/modèle invalide ou index de contenu invalide.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Clé API Ailoot invalide.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Le groupe de la clé API n’est pas autorisé à utiliser cette route média.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "La tâche d’origine ou le résultat demandé est absent ou n’appartient pas au même utilisateur, à la même clé API et au même groupe.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "La soumission initiale ou son état est incomplet ou ne peut pas être rapproché des données disponibles ; conservez l’ID d’origine et ne soumettez pas de nouveau la requête.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "L’association d’origine, la route ou le média dont vous êtes propriétaire fait encore l’objet de vérifications ; poursuivez la vérification de cette opération d’origine.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Le service de médias ou le stockage des tâches d’origine est indisponible.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "completed"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "queued"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "jobs[].status",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "Conservez la réponse d’origine et l’identité de tâche renvoyée ; un état non reconnu ou un envoi au résultat ambigu n’autorise pas une nouvelle création.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "image",
                "text"
              ]
            ],
            "operation_modes": [
              "image_to_video"
            ],
            "outputs": {
              "all_results": "Récupérez chaque résultat réellement terminé ; ne supposez pas un nombre fixe.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Identifiant public de tâche ou d’opération Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Identifiant de la tâche d’origine, distinct de l’id public.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Chemin de consultation Ailoot renvoyé.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Identifiant réel de la tâche renvoyée.",
                  "name": "jobs[].id",
                  "type": "string"
                },
                {
                  "description": "État de chaque tâche renvoyée.",
                  "name": "jobs[].status",
                  "type": "string"
                },
                {
                  "description": "Chaque vidéo terminée est accessible par une URL signée appartenant à Ailoot.",
                  "name": "jobs[].results.raw.url",
                  "type": "string"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected outputs are copied and verified before owned publication.",
              "result": "Conservez les tâches renvoyées et leurs états. Consultez chaque résultat vidéo terminé dont vous êtes propriétaire."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "conditions": "Sélecteur de modèle Ailoot.",
                "default": null,
                "default_known": false,
                "enum": [
                  "dop-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Paramètres de génération d’image vers vidéo ; conservez cette enveloppe.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "conditions": "Utilisez le même sélecteur que pour le modèle de niveau supérieur.",
                "default": null,
                "default_known": false,
                "enum": [
                  "dop-preview"
                ],
                "enum_known": true,
                "name": "params.model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Conservez ce champ dans la requête ; une chaîne vide est documentée. Les indications écrites influencent fortement l’effet de mouvement sélectionné.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Durée demandée ; aucune plage ni valeur par défaut documentée n’est affirmée.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.seconds",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Choisissez un ou deux modèles de mouvement documentés.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 2,
                "minItems": 1,
                "name": "params.motions",
                "required": false,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Identifiant de mouvement dans l’exemple documenté de requête fonctionnelle.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.motions[].id",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Intensité du mouvement : 0.3 est décrit comme subtil et 1 comme fort.",
                "default": 0.8,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 1,
                "minimum": 0,
                "name": "params.motions[].strength",
                "required": true,
                "type": "number"
              },
              {
                "availability": "source_interface",
                "conditions": "Images de référence, à l’aide du tableau d’objets image_url présenté dans l’exemple fonctionnel.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.input_images",
                "required": false,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Représentation de la référence.",
                "default": null,
                "default_known": false,
                "enum": [
                  "image_url"
                ],
                "enum_known": true,
                "name": "params.input_images[].type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "L’URL réelle et accessible de votre image de référence.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.input_images[].image_url",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Amélioration de la consigne.",
                "default": true,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "params.enhance_prompt",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Filtrage du contenu.",
                "default": true,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "params.check_nsfw",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Graine aléatoire pour obtenir des résultats cohérents.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 1000000,
                "minimum": 1,
                "name": "params.seed",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Paramètres webhook facultatifs et documentés ; la récupération des résultats dont vous êtes propriétaire utilise les chemins des tâches Ailoot.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "webhook",
                "required": false,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "conditions": "L’URL de votre destinataire.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "webhook.url",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Le secret de votre destinataire.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "webhook.secret",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Destinataire facultatif du callback ; le destinataire documenté répond avec HTTP 200.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "callback": {
                  "type": "string"
                },
                "model": {
                  "const": "dop-preview",
                  "type": "string"
                },
                "params": {
                  "additionalProperties": true,
                  "properties": {
                    "check_nsfw": {
                      "default": true,
                      "type": "boolean"
                    },
                    "enhance_prompt": {
                      "default": true,
                      "type": "boolean"
                    },
                    "input_images": {
                      "items": {
                        "properties": {
                          "image_url": {
                            "type": "string"
                          },
                          "type": {
                            "const": "image_url",
                            "type": "string"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "model": {
                      "const": "dop-preview",
                      "type": "string"
                    },
                    "motions": {
                      "items": {
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "strength": {
                            "default": 0.8,
                            "maximum": 1,
                            "minimum": 0,
                            "type": "number"
                          }
                        },
                        "required": [
                          "id",
                          "strength"
                        ],
                        "type": "object"
                      },
                      "maxItems": 2,
                      "minItems": 1,
                      "type": "array"
                    },
                    "prompt": {
                      "type": "string"
                    },
                    "seconds": {
                      "type": "integer"
                    },
                    "seed": {
                      "maximum": 1000000,
                      "minimum": 1,
                      "type": "integer"
                    }
                  },
                  "required": [
                    "model",
                    "prompt"
                  ],
                  "type": "object"
                },
                "webhook": {
                  "properties": {
                    "secret": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "required": [
                "model",
                "params"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              {
                "field": "params.motions[].id",
                "meaning": "The demonstrated request uses id; the generated schema names motion_id. This card follows the working example."
              },
              {
                "field": "params.input_images",
                "meaning": "The demonstrated request uses an array of image_url objects; the generated schema shows a different object shape. This card follows the working example."
              }
            ],
            "unsupported": []
          },
          "hints": [
            "Utilisez le même sélecteur de modèle au niveau supérieur et dans params.",
            "Créez une seule fois, puis utilisez l’id public et polling_url renvoyés pour l’opération d’origine.",
            "Récupérez chaque vidéo terminée dont vous êtes propriétaire ; vérifiez sa durée et ses dimensions réelles dans le résultat.",
            "Remplacez YOUR_ACCESSIBLE_IMAGE_URL dans l’exemple par l’URL réelle de votre image de référence."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "image",
              "text"
            ],
            "optional": [
              "params.seconds",
              "params.motions",
              "params.input_images",
              "params.enhance_prompt",
              "params.check_nsfw",
              "params.seed",
              "webhook",
              "webhook.url",
              "webhook.secret",
              "callback"
            ],
            "required": [
              "model",
              "params"
            ],
            "validation_scope": "Le modèle détermine la route de la requête ; l’enveloppe des paramètres suit la requête de génération d’image vers vidéo présentée."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "completed"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "queued"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "jobs[].status",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "Keep the original response and returned task identity; an unrecognized state or ambiguous send does not authorize a new creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "image",
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "image_to_video"
          ],
          "output": {
            "all_results": "Fetch every actual completed output; do not assume a fixed count.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Actual returned job identifier.",
                "name": "jobs[].id",
                "type": "string"
              },
              {
                "description": "State of each returned job.",
                "name": "jobs[].status",
                "type": "string"
              },
              {
                "description": "Each completed video is exposed through an Ailoot-owned signed URL.",
                "name": "jobs[].results.raw.url",
                "type": "string"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected outputs are copied and verified before owned publication.",
            "result": "Keep the returned jobs and their states. Read every completed owned video result."
          }
        },
        "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"
              }
            ]
          },
          {
            "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 estimé de la génération",
            "units": [
              {
                "amount": "1.24",
                "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": "1.24",
                "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": "{\n  \"model\": \"dop-preview\",\n  \"params\": {\n    \"model\": \"dop-preview\",\n    \"prompt\": \"a cat\",\n    \"seed\": 500000,\n    \"motions\": [\n      {\n        \"id\": \"2bae49e6-ffe7-42a8-a73f-d44632c4acaa\",\n        \"strength\": 0.5\n      }\n    ],\n    \"input_images\": [\n      {\n        \"type\": \"image_url\",\n        \"image_url\": \"YOUR_ACCESSIBLE_IMAGE_URL\"\n      }\n    ],\n    \"enhance_prompt\": true,\n    \"check_nsfw\": true\n  }\n}",
            "label": "JSON · create video",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the same model selector at the top level and inside params.",
          "Create once, then use the returned public id and polling_url for the original operation.",
          "Retrieve every completed owned video; inspect actual duration and dimensions in the result.",
          "Replace YOUR_ACCESSIBLE_IMAGE_URL in the example with your actual reference image URL."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "image",
          "text"
        ],
        "label": "Vidéo",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "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"
              }
            ]
          },
          {
            "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": "1.24",
                "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": "1.24",
                "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": "dop-preview",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_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": "1.24",
            "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": "1.24",
            "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": "dop-preview",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "31ce4a97510d122bd52d190ad77b1e24760f8abf6875ea53c7af679e1e211ba0",
    "input_html_sha256": "d26d1c1b24fedf6e909284f801331b505d759f099f8551583bf17bb29b6cb514",
    "private_audit_sha256": "7d87e4123b2fe2365286d5388144c0d4dc6293326bbc9b4010f23859eaadc549",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr-be/dop-preview/",
    "description": "DOP Preview transforme les images fournies en vidéo selon le processus documenté de modèles de mouvement. Le sélecteur exact dop-preview prend en charge un ou deux effets, avec des contrôles d’intensité, de prompt et de seed conservés avec le résultat terminé.",
    "locale": "fr-be",
    "md_url": "https://ailoot.ai/models/fr-be/dop-preview/index.md",
    "title": "Higgsfield: DOP Preview — Ailoot",
    "url": "https://ailoot.ai/models/fr-be/dop-preview/"
  },
  "rawModel": {
    "about": "DOP Preview anime les images fournies selon le processus de conversion d’image en vidéo documenté par Higgsfield. Le sélecteur exact est dop-preview. Utilisez dop-preview pour sélectionner le modèle au niveau supérieur et comme valeur de model dans l’objet params documenté. L’image fournit le contenu visuel, tandis que les modèles de mouvement et les instructions écrites déterminent le mouvement et l’effet demandés.\n\nPréparez une image de référence dans laquelle le sujet visé, les détails importants et l’espace environnant sont bien lisibles. Le guide recommande une image haute résolution pour obtenir des détails plus nets. Pour une scène de produit, choisissez une vue qui montre la forme de l’objet et les surfaces qui doivent rester reconnaissables pendant le mouvement. Pour une personne ou un environnement, identifiez la caractéristique visuelle que le mouvement doit mettre en valeur. Fournissez l’URL réelle de l’image de référence via l’entrée image utilisée dans l’exemple de la méthode.\n\nL’opération documente l’utilisation d’un ou de deux modèles de mouvement. Lorsque deux modèles sont fournis, le guide indique que leurs effets se combinent. Les descriptions des préréglages comprennent des mouvements de caméra, la rotation du sujet et des transformations visuelles ; par exemple, Dolly In décrit un rapprochement de la caméra, tandis que 3D Rotation décrit un sujet ou un produit qui tourne sur place. Sélectionnez les identifiants documentés des modèles de mouvement correspondant à la séquence souhaitée et conservez chaque identifiant avec sa valeur d’intensité.\n\nL’intensité du mouvement est un nombre compris entre 0 et 1, dont la valeur par défaut documentée est 0,8. Le guide décrit 0,3 comme un effet subtil et 1 comme un mouvement marqué. Choisissez l’intensité en fonction des détails qui doivent rester lisibles et examinez l’ensemble de l’action générée. La description d’un mouvement et son intensité ont des rôles distincts : le modèle de mouvement sélectionne l’effet, tandis que l’intensité en règle la force.\n\nLe champ prompt doit être présent selon sa description, mais une chaîne vide est autorisée. Pour les effets pilotés par un modèle de mouvement, le guide recommande de laisser prompt vide ; lorsqu’un texte est fourni, il recommande d’inclure la description du modèle de mouvement, car le prompt peut fortement modifier le résultat. Le contrôle enhance_prompt active l’optimisation du prompt et sa valeur par défaut documentée est true. Conservez le texte et ce contrôle avec l’image de référence et les modèles de mouvement sélectionnés lorsque vous comparez des versions.\n\nLe contrôle seed accepte un entier de 1 à 1 000 000. Enregistrez la valeur seed choisie avec les paramètres de génération. La requête expose également un champ seconds de type entier ; conservez la valeur utilisée avec le clip obtenu et examinez la durée et le cadrage réels du clip. Le booléen check_nsfw active le filtre de contenu documenté et vaut true par défaut. Ces contrôles appartiennent à la requête de conversion d’image en vidéo et doivent rester associés au modèle exact sélectionné.\n\nLa génération est asynchrone. Conservez l’identifiant de tâche renvoyé lors du suivi par les requêtes de statut et de résultat configurées. La correspondance utilisée à l’achèvement lit les entrées des traitements terminés et les URL brutes de leurs résultats. Enregistrez chaque vidéo terminée et conservez son identifiant de traitement avec l’URL renvoyée, en regroupant toutes les entrées terminées comme résultat de l’opération.\n\nExaminez la vidéo entière au regard de l’image fournie, de l’effet choisi et des instructions écrites : apparence du sujet, mouvement, cadrage et vue de fin. Pour une révision, identifiez le détail visuel concret à modifier et conservez les éléments de la requête qui ont réussi. Conservez ensemble la référence de l’image d’origine, le sélecteur exact, le prompt, les identifiants de mouvement, les intensités, la valeur seed, les paramètres demandés et les ressources terminées afin que la comparaison suivante repose sur la génération réelle.",
    "alias_of": null,
    "aliases": [],
    "author": "Higgsfield",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "image",
        "text"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "1.24",
            "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": "1.24",
            "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,
    "formats": [
      "videos"
    ],
    "id": "dop-preview",
    "input": [
      "image",
      "text"
    ],
    "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": {
            "errors": [
              {
                "condition": "JSON/modèle invalide ou index de contenu invalide.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Clé API Ailoot invalide.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Le groupe de la clé API n’est pas autorisé à utiliser cette route média.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "La tâche d’origine ou le résultat demandé est absent ou n’appartient pas au même utilisateur, à la même clé API et au même groupe.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "La soumission initiale ou son état est incomplet ou ne peut pas être rapproché des données disponibles ; conservez l’ID d’origine et ne soumettez pas de nouveau la requête.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "L’association d’origine, la route ou le média dont vous êtes propriétaire fait encore l’objet de vérifications ; poursuivez la vérification de cette opération d’origine.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Le service de médias ou le stockage des tâches d’origine est indisponible.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "completed"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "queued"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "jobs[].status",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "Conservez la réponse d’origine et l’identité de tâche renvoyée ; un état non reconnu ou un envoi au résultat ambigu n’autorise pas une nouvelle création.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "image",
                "text"
              ]
            ],
            "operation_modes": [
              "image_to_video"
            ],
            "outputs": {
              "all_results": "Récupérez chaque résultat réellement terminé ; ne supposez pas un nombre fixe.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Identifiant public de tâche ou d’opération Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Identifiant de la tâche d’origine, distinct de l’id public.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Chemin de consultation Ailoot renvoyé.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Identifiant réel de la tâche renvoyée.",
                  "name": "jobs[].id",
                  "type": "string"
                },
                {
                  "description": "État de chaque tâche renvoyée.",
                  "name": "jobs[].status",
                  "type": "string"
                },
                {
                  "description": "Chaque vidéo terminée est accessible par une URL signée appartenant à Ailoot.",
                  "name": "jobs[].results.raw.url",
                  "type": "string"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected outputs are copied and verified before owned publication.",
              "result": "Conservez les tâches renvoyées et leurs états. Consultez chaque résultat vidéo terminé dont vous êtes propriétaire."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "conditions": "Sélecteur de modèle Ailoot.",
                "default": null,
                "default_known": false,
                "enum": [
                  "dop-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Paramètres de génération d’image vers vidéo ; conservez cette enveloppe.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "conditions": "Utilisez le même sélecteur que pour le modèle de niveau supérieur.",
                "default": null,
                "default_known": false,
                "enum": [
                  "dop-preview"
                ],
                "enum_known": true,
                "name": "params.model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Conservez ce champ dans la requête ; une chaîne vide est documentée. Les indications écrites influencent fortement l’effet de mouvement sélectionné.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Durée demandée ; aucune plage ni valeur par défaut documentée n’est affirmée.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.seconds",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Choisissez un ou deux modèles de mouvement documentés.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 2,
                "minItems": 1,
                "name": "params.motions",
                "required": false,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Identifiant de mouvement dans l’exemple documenté de requête fonctionnelle.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.motions[].id",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Intensité du mouvement : 0.3 est décrit comme subtil et 1 comme fort.",
                "default": 0.8,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 1,
                "minimum": 0,
                "name": "params.motions[].strength",
                "required": true,
                "type": "number"
              },
              {
                "availability": "source_interface",
                "conditions": "Images de référence, à l’aide du tableau d’objets image_url présenté dans l’exemple fonctionnel.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.input_images",
                "required": false,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Représentation de la référence.",
                "default": null,
                "default_known": false,
                "enum": [
                  "image_url"
                ],
                "enum_known": true,
                "name": "params.input_images[].type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "L’URL réelle et accessible de votre image de référence.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "params.input_images[].image_url",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Amélioration de la consigne.",
                "default": true,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "params.enhance_prompt",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Filtrage du contenu.",
                "default": true,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "params.check_nsfw",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Graine aléatoire pour obtenir des résultats cohérents.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 1000000,
                "minimum": 1,
                "name": "params.seed",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Paramètres webhook facultatifs et documentés ; la récupération des résultats dont vous êtes propriétaire utilise les chemins des tâches Ailoot.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "webhook",
                "required": false,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "conditions": "L’URL de votre destinataire.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "webhook.url",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Le secret de votre destinataire.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "webhook.secret",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Destinataire facultatif du callback ; le destinataire documenté répond avec HTTP 200.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "callback": {
                  "type": "string"
                },
                "model": {
                  "const": "dop-preview",
                  "type": "string"
                },
                "params": {
                  "additionalProperties": true,
                  "properties": {
                    "check_nsfw": {
                      "default": true,
                      "type": "boolean"
                    },
                    "enhance_prompt": {
                      "default": true,
                      "type": "boolean"
                    },
                    "input_images": {
                      "items": {
                        "properties": {
                          "image_url": {
                            "type": "string"
                          },
                          "type": {
                            "const": "image_url",
                            "type": "string"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "model": {
                      "const": "dop-preview",
                      "type": "string"
                    },
                    "motions": {
                      "items": {
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "strength": {
                            "default": 0.8,
                            "maximum": 1,
                            "minimum": 0,
                            "type": "number"
                          }
                        },
                        "required": [
                          "id",
                          "strength"
                        ],
                        "type": "object"
                      },
                      "maxItems": 2,
                      "minItems": 1,
                      "type": "array"
                    },
                    "prompt": {
                      "type": "string"
                    },
                    "seconds": {
                      "type": "integer"
                    },
                    "seed": {
                      "maximum": 1000000,
                      "minimum": 1,
                      "type": "integer"
                    }
                  },
                  "required": [
                    "model",
                    "prompt"
                  ],
                  "type": "object"
                },
                "webhook": {
                  "properties": {
                    "secret": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "required": [
                "model",
                "params"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              {
                "field": "params.motions[].id",
                "meaning": "The demonstrated request uses id; the generated schema names motion_id. This card follows the working example."
              },
              {
                "field": "params.input_images",
                "meaning": "The demonstrated request uses an array of image_url objects; the generated schema shows a different object shape. This card follows the working example."
              }
            ],
            "unsupported": []
          },
          "hints": [
            "Utilisez le même sélecteur de modèle au niveau supérieur et dans params.",
            "Créez une seule fois, puis utilisez l’id public et polling_url renvoyés pour l’opération d’origine.",
            "Récupérez chaque vidéo terminée dont vous êtes propriétaire ; vérifiez sa durée et ses dimensions réelles dans le résultat.",
            "Remplacez YOUR_ACCESSIBLE_IMAGE_URL dans l’exemple par l’URL réelle de votre image de référence."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "image",
              "text"
            ],
            "optional": [
              "params.seconds",
              "params.motions",
              "params.input_images",
              "params.enhance_prompt",
              "params.check_nsfw",
              "params.seed",
              "webhook",
              "webhook.url",
              "webhook.secret",
              "callback"
            ],
            "required": [
              "model",
              "params"
            ],
            "validation_scope": "Le modèle détermine la route de la requête ; l’enveloppe des paramètres suit la requête de génération d’image vers vidéo présentée."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "completed"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "queued"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "jobs[].status",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "Keep the original response and returned task identity; an unrecognized state or ambiguous send does not authorize a new creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "image",
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "image_to_video"
          ],
          "output": {
            "all_results": "Fetch every actual completed output; do not assume a fixed count.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Actual returned job identifier.",
                "name": "jobs[].id",
                "type": "string"
              },
              {
                "description": "State of each returned job.",
                "name": "jobs[].status",
                "type": "string"
              },
              {
                "description": "Each completed video is exposed through an Ailoot-owned signed URL.",
                "name": "jobs[].results.raw.url",
                "type": "string"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected outputs are copied and verified before owned publication.",
            "result": "Keep the returned jobs and their states. Read every completed owned video result."
          }
        },
        "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"
              }
            ]
          },
          {
            "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 estimé de la génération",
            "units": [
              {
                "amount": "1.24",
                "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": "1.24",
                "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": "{\n  \"model\": \"dop-preview\",\n  \"params\": {\n    \"model\": \"dop-preview\",\n    \"prompt\": \"a cat\",\n    \"seed\": 500000,\n    \"motions\": [\n      {\n        \"id\": \"2bae49e6-ffe7-42a8-a73f-d44632c4acaa\",\n        \"strength\": 0.5\n      }\n    ],\n    \"input_images\": [\n      {\n        \"type\": \"image_url\",\n        \"image_url\": \"YOUR_ACCESSIBLE_IMAGE_URL\"\n      }\n    ],\n    \"enhance_prompt\": true,\n    \"check_nsfw\": true\n  }\n}",
            "label": "JSON · create video",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the same model selector at the top level and inside params.",
          "Create once, then use the returned public id and polling_url for the original operation.",
          "Retrieve every completed owned video; inspect actual duration and dimensions in the result.",
          "Replace YOUR_ACCESSIBLE_IMAGE_URL in the example with your actual reference image URL."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "image",
          "text"
        ],
        "label": "Vidéo",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "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"
              }
            ]
          },
          {
            "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": "1.24",
                "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": "1.24",
                "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": "dop-preview",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_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": "1.24",
            "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": "1.24",
            "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": "dop-preview",
        "request_model_id": "dop-preview",
        "route_label": "Ultra"
      }
    ],
    "name": "Higgsfield: DOP Preview",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 1.24,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 1.24,
      "varies": false
    },
    "short": "DOP Preview transforme les images fournies en vidéo selon le processus documenté de modèles de mouvement. Le sélecteur exact dop-preview prend en charge un ou deux effets, avec des contrôles d’intensité, de prompt et de seed conservés avec le résultat terminé."
  },
  "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": "DOP Preview transforme les images fournies en vidéo selon le processus documenté de modèles de mouvement. Le sélecteur exact dop-preview prend en charge un ou deux effets, avec des contrôles d’intensité, de prompt et de seed conservés avec le résultat terminé.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "58954ab651f80eb889f9791e8c3c2f604b286b8c6ce195ad5d01219ae2c9cf2f",
    "renderer_sha256": "9d578ff8df69ef70403308c9943a1179a11b94114c10b333bf1c012005d4a7f4"
  },
  "sourceRevision": "30bdf63468601eb8b5c177688531a5a2dd9e7f33f2e039446e9a98b7f9cfb1e2"
}
