{
  "aboutHtml": "<p>Vidu Q2 erstellt Video aus einer schriftlich beschriebenen Szene über das mit viduq2 ausgewählte Text-zu-Video-Profil. Erforderliche Eingaben sind die genaue Modellkennung und ein Prompt, der die Szene beschreibt. Nutzen Sie es für ein kurzes Produktkonzept, eine Übersichtsaufnahme oder eine Figurenaktion, deren Erscheinungsbild und Bewegung sich in Worten festlegen lassen. Diese konfigurierte Methode ist Text-zu-Video; ihre Beschreibung ordnet dem Selektor keinen separaten Bildreferenz- oder Videobearbeitungsmodus zu.</p><p>Bauen Sie den Auftrag um eine sichtbare Abfolge auf. Benennen Sie Motiv, Ort, Aktion, Einstellungsgrösse, Kamerabewegung und Schlusskomposition. Beschreiben Sie bei einem Produktkonzept ein Objekt auf einer Tischplatte, Licht, das über sein Material wandert, und eine langsame Kameraannäherung, die bei einem erkennbaren Detail endet. Führen Sie bei einer Ortsszene zunächst die Umgebung ein, bevor Sie sich dem Schwerpunkt nähern. Stimmen Sie die Aktion auf die gewählte Cliplänge ab, damit die Szene Platz für das beabsichtigte Ende besitzt.</p><p>Der Prompt ist auf 2’000 Zeichen begrenzt. Nennen Sie zuerst das wesentliche Motiv und die Aktion und ergänzen Sie dann Beleuchtung, Material, Umgebung und Kameradetails, die das gewünschte Ergebnis beeinflussen. Geben Sie den visuellen Stil im Prompt an. Laut Q2-spezifischem Leitfaden haben die separaten Parameter style und movement_amplitude bei diesem Modell keine Wirkung. Die Voreinstellung general oder anime und die Optionen zur Bewegungsamplitude ersetzen daher keine klare Szenenbeschreibung.</p><p>Die modellspezifische Dauereinstellung akzeptiert ganze Sekunden von eins bis zehn. Die Q2-spezifischen Auflösungsoptionen sind 540p, 720p und 1080p, wobei 720p als dokumentierter Standard gilt. Wählen Sie Dauer und Auflösung gemeinsam nach Aktion und Verwendungszweck. Eine kurze Enthüllung und eine längere Bewegung benötigen unterschiedliches Timing. Eine längere angeforderte Dauer sollte der sichtbaren Abfolge dienen, statt lediglich einen unveränderten Auftrag zu strecken. Prüfen Sie bei der Vorbereitung der abschliessenden Platzierung die tatsächlichen Abmessungen und die Länge des zurückgegebenen Clips.</p><p>Die dokumentierten Optionen für aspect_ratio sind 16:9, 9:16, 3:4, 4:3 und 1:1, standardmässig 16:9. Der Leitfaden schliesst 3:4 und 4:3 ausdrücklich für die Q2-Familie ein. Wählen Sie das Format vor der Generierung und beschreiben Sie eine dazu passende Komposition: Halten Sie das Hauptmotiv im Hochformat gut erkennbar oder nutzen Sie die Breite eines Querformats für die umgebende Szenerie. Lassen Sie die Schlussansicht klar genug für die vorgesehene Seite, Präsentation oder spätere Ergänzung von Beschriftungen.</p><p>Das Feld seed steuert Variationen. Wird es weggelassen oder 0 übergeben, wird ein zufälliger Wert gewählt; ein Wert ungleich null wählt die dokumentierte Option mit festem seed für eine wiederholbare Generierung. Bewahren Sie den zurückgegebenen seed beim Versionsvergleich zusammen mit Prompt und Einstellungen. Der gemeinsame Bedienungsablauf dokumentiert ausserdem die Steuerungen audio und off_peak ausdrücklich für Q3-Modelle. Diese Q3-Optionen sind diesem Q2-Profil nicht als Fähigkeiten zugeordnet. Planen Sie diese Anfrage anhand ihrer dokumentierten Texteingabe und Videoausgabe.</p><p>Die Generierung erfolgt asynchron. Das Absenden liefert task_id und einen Anfangszustand, wobei created für eine neu erstellte Aufgabe verwendet wird. Bewahren Sie diese Aufgabenkennung, während Sie die Verarbeitung verfolgen. Die dokumentierte Ergebnisabfrage verwendet state=success für ein erfolgreiches Ergebnis und gibt ein Array creations zurück. Jeder Eintrag enthält seine Video-URL in creations[].url. Speichern Sie jedes zurückgegebene Video, statt anzunehmen, dass eine Aufgabe immer genau ein einzelnes Ergebnis enthält.</p><p>Die Ergebnisdokumentation meldet ausserdem die tatsächliche Videodauer, fps sowie die Auflösung als Breite und Höhe. Bewahren Sie diese gemeldeten Werte zusammen mit dem fertigen Clip, statt die Bildrate oder Abmessungen eines Beispiels als feste Q2-Spezifikation zu behandeln. Die Antwort auf die Aufgabenerstellung enthält neben der Anfragekonfiguration einen Wert credits. Bewahren Sie diese gemeldeten Aufgabenmetadaten und die Kennung der abgeschlossenen Aufgabe zusammen mit dem Ergebnis, damit jedes Video mit seinen Generierungseinstellungen verknüpft bleibt.</p><p>Prüfen Sie die gesamte Sequenz anhand des ursprünglichen Auftrags: Erscheinungsbild des Motivs, Objektform, Bewegungsrichtung, Kamerakontinuität und beabsichtigte Schlussansicht. Benennen Sie für eine Überarbeitung das konkrete Detail, das den Auftrag verfehlt hat, und bewahren Sie die erfolgreichen Teile der Szene. Halten Sie Prompt, genauen Selektor, Einstellungen, Aufgabenkennung und fertige Videos zusammen, damit ein späterer Vergleich auf den tatsächlichen Ergebnissen beruht.</p>",
  "aboutText": "Vidu Q2 erstellt Video aus einer schriftlich beschriebenen Szene über das mit viduq2 ausgewählte Text-zu-Video-Profil. Erforderliche Eingaben sind die genaue Modellkennung und ein Prompt, der die Szene beschreibt. Nutzen Sie es für ein kurzes Produktkonzept, eine Übersichtsaufnahme oder eine Figurenaktion, deren Erscheinungsbild und Bewegung sich in Worten festlegen lassen. Diese konfigurierte Methode ist Text-zu-Video; ihre Beschreibung ordnet dem Selektor keinen separaten Bildreferenz- oder Videobearbeitungsmodus zu.\n\nBauen Sie den Auftrag um eine sichtbare Abfolge auf. Benennen Sie Motiv, Ort, Aktion, Einstellungsgrösse, Kamerabewegung und Schlusskomposition. Beschreiben Sie bei einem Produktkonzept ein Objekt auf einer Tischplatte, Licht, das über sein Material wandert, und eine langsame Kameraannäherung, die bei einem erkennbaren Detail endet. Führen Sie bei einer Ortsszene zunächst die Umgebung ein, bevor Sie sich dem Schwerpunkt nähern. Stimmen Sie die Aktion auf die gewählte Cliplänge ab, damit die Szene Platz für das beabsichtigte Ende besitzt.\n\nDer Prompt ist auf 2’000 Zeichen begrenzt. Nennen Sie zuerst das wesentliche Motiv und die Aktion und ergänzen Sie dann Beleuchtung, Material, Umgebung und Kameradetails, die das gewünschte Ergebnis beeinflussen. Geben Sie den visuellen Stil im Prompt an. Laut Q2-spezifischem Leitfaden haben die separaten Parameter style und movement_amplitude bei diesem Modell keine Wirkung. Die Voreinstellung general oder anime und die Optionen zur Bewegungsamplitude ersetzen daher keine klare Szenenbeschreibung.\n\nDie modellspezifische Dauereinstellung akzeptiert ganze Sekunden von eins bis zehn. Die Q2-spezifischen Auflösungsoptionen sind 540p, 720p und 1080p, wobei 720p als dokumentierter Standard gilt. Wählen Sie Dauer und Auflösung gemeinsam nach Aktion und Verwendungszweck. Eine kurze Enthüllung und eine längere Bewegung benötigen unterschiedliches Timing. Eine längere angeforderte Dauer sollte der sichtbaren Abfolge dienen, statt lediglich einen unveränderten Auftrag zu strecken. Prüfen Sie bei der Vorbereitung der abschliessenden Platzierung die tatsächlichen Abmessungen und die Länge des zurückgegebenen Clips.\n\nDie dokumentierten Optionen für aspect_ratio sind 16:9, 9:16, 3:4, 4:3 und 1:1, standardmässig 16:9. Der Leitfaden schliesst 3:4 und 4:3 ausdrücklich für die Q2-Familie ein. Wählen Sie das Format vor der Generierung und beschreiben Sie eine dazu passende Komposition: Halten Sie das Hauptmotiv im Hochformat gut erkennbar oder nutzen Sie die Breite eines Querformats für die umgebende Szenerie. Lassen Sie die Schlussansicht klar genug für die vorgesehene Seite, Präsentation oder spätere Ergänzung von Beschriftungen.\n\nDas Feld seed steuert Variationen. Wird es weggelassen oder 0 übergeben, wird ein zufälliger Wert gewählt; ein Wert ungleich null wählt die dokumentierte Option mit festem seed für eine wiederholbare Generierung. Bewahren Sie den zurückgegebenen seed beim Versionsvergleich zusammen mit Prompt und Einstellungen. Der gemeinsame Bedienungsablauf dokumentiert ausserdem die Steuerungen audio und off_peak ausdrücklich für Q3-Modelle. Diese Q3-Optionen sind diesem Q2-Profil nicht als Fähigkeiten zugeordnet. Planen Sie diese Anfrage anhand ihrer dokumentierten Texteingabe und Videoausgabe.\n\nDie Generierung erfolgt asynchron. Das Absenden liefert task_id und einen Anfangszustand, wobei created für eine neu erstellte Aufgabe verwendet wird. Bewahren Sie diese Aufgabenkennung, während Sie die Verarbeitung verfolgen. Die dokumentierte Ergebnisabfrage verwendet state=success für ein erfolgreiches Ergebnis und gibt ein Array creations zurück. Jeder Eintrag enthält seine Video-URL in creations[].url. Speichern Sie jedes zurückgegebene Video, statt anzunehmen, dass eine Aufgabe immer genau ein einzelnes Ergebnis enthält.\n\nDie Ergebnisdokumentation meldet ausserdem die tatsächliche Videodauer, fps sowie die Auflösung als Breite und Höhe. Bewahren Sie diese gemeldeten Werte zusammen mit dem fertigen Clip, statt die Bildrate oder Abmessungen eines Beispiels als feste Q2-Spezifikation zu behandeln. Die Antwort auf die Aufgabenerstellung enthält neben der Anfragekonfiguration einen Wert credits. Bewahren Sie diese gemeldeten Aufgabenmetadaten und die Kennung der abgeschlossenen Aufgabe zusammen mit dem Ergebnis, damit jedes Video mit seinen Generierungseinstellungen verknüpft bleibt.\n\nPrüfen Sie die gesamte Sequenz anhand des ursprünglichen Auftrags: Erscheinungsbild des Motivs, Objektform, Bewegungsrichtung, Kamerakontinuität und beabsichtigte Schlussansicht. Benennen Sie für eine Überarbeitung das konkrete Detail, das den Auftrag verfehlt hat, und bewahren Sie die erfolgreichen Teile der Szene. Halten Sie Prompt, genauen Selektor, Einstellungen, Aufgabenkennung und fertige Videos zusammen, damit ein späterer Vergleich auf den tatsächlichen Ergebnissen beruht.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f82e5116fa3d80e6106792ca7ed62f07403e53d6b1d66feccdce646dedfb5a70",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "de-ch",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Vidu: Q2 Text-to-Video</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Schliessen\">×</button></div><div class=\"idline\"><span>Vidu /</span><code>viduq2</code><button type=\"button\" id=\"copy-id\">ID kopieren</button></div><nav class=\"card-jump-nav\" aria-label=\"Bereiche der Modellkarte\"><button type=\"button\" data-card-jump=\"overview\">Einstieg</button><button type=\"button\" data-card-jump=\"methods\">Eingaben und Methoden</button><button type=\"button\" data-card-jump=\"pricing\">Tarife</button><button type=\"button\" data-card-jump=\"examples\">Beispiele</button><button type=\"button\" data-card-jump=\"results\">Ergebnisse</button><button type=\"button\" data-card-jump=\"aliases\">Aliasnamen</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-Methoden\"><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|viduq2\">Video</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\">Einstieg</h3><p class=\"mdesc-full\">Vidu Q2 erstellt Video aus einer textlichen Szenenbeschreibung, mit einer Dauer von 1–10 Sekunden, einer Ausgabe in 540p, 720p oder 1080p und fünf Seitenverhältnissen. Dieses konkrete Profil viduq2 verwendet den Prompt für Stil und Bewegung und liefert sein Ergebnis über eine asynchrone Aufgabe.</p><dl class=\"card-io\" data-card-io><div><dt>Zulässige Eingaben</dt><dd>Text</dd></div><div><dt>Ergebnisse</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Über das Modell</summary><p class=\"note-s\" data-model-method-boundary>Diese Beschreibung erläutert die Fähigkeiten des Modells. Die über Ailoot verfügbaren Eingaben, Ausgaben und Optionen sind unten für die ausgewählte Methode aufgeführt.</p><div class=\"mabout\" id=\"m-about\"><p>Vidu Q2 erstellt Video aus einer schriftlich beschriebenen Szene über das mit viduq2 ausgewählte Text-zu-Video-Profil. Erforderliche Eingaben sind die genaue Modellkennung und ein Prompt, der die Szene beschreibt. Nutzen Sie es für ein kurzes Produktkonzept, eine Übersichtsaufnahme oder eine Figurenaktion, deren Erscheinungsbild und Bewegung sich in Worten festlegen lassen. Diese konfigurierte Methode ist Text-zu-Video; ihre Beschreibung ordnet dem Selektor keinen separaten Bildreferenz- oder Videobearbeitungsmodus zu.</p><p>Bauen Sie den Auftrag um eine sichtbare Abfolge auf. Benennen Sie Motiv, Ort, Aktion, Einstellungsgrösse, Kamerabewegung und Schlusskomposition. Beschreiben Sie bei einem Produktkonzept ein Objekt auf einer Tischplatte, Licht, das über sein Material wandert, und eine langsame Kameraannäherung, die bei einem erkennbaren Detail endet. Führen Sie bei einer Ortsszene zunächst die Umgebung ein, bevor Sie sich dem Schwerpunkt nähern. Stimmen Sie die Aktion auf die gewählte Cliplänge ab, damit die Szene Platz für das beabsichtigte Ende besitzt.</p><p>Der Prompt ist auf 2’000 Zeichen begrenzt. Nennen Sie zuerst das wesentliche Motiv und die Aktion und ergänzen Sie dann Beleuchtung, Material, Umgebung und Kameradetails, die das gewünschte Ergebnis beeinflussen. Geben Sie den visuellen Stil im Prompt an. Laut Q2-spezifischem Leitfaden haben die separaten Parameter style und movement_amplitude bei diesem Modell keine Wirkung. Die Voreinstellung general oder anime und die Optionen zur Bewegungsamplitude ersetzen daher keine klare Szenenbeschreibung.</p><p>Die modellspezifische Dauereinstellung akzeptiert ganze Sekunden von eins bis zehn. Die Q2-spezifischen Auflösungsoptionen sind 540p, 720p und 1080p, wobei 720p als dokumentierter Standard gilt. Wählen Sie Dauer und Auflösung gemeinsam nach Aktion und Verwendungszweck. Eine kurze Enthüllung und eine längere Bewegung benötigen unterschiedliches Timing. Eine längere angeforderte Dauer sollte der sichtbaren Abfolge dienen, statt lediglich einen unveränderten Auftrag zu strecken. Prüfen Sie bei der Vorbereitung der abschliessenden Platzierung die tatsächlichen Abmessungen und die Länge des zurückgegebenen Clips.</p><p>Die dokumentierten Optionen für aspect_ratio sind 16:9, 9:16, 3:4, 4:3 und 1:1, standardmässig 16:9. Der Leitfaden schliesst 3:4 und 4:3 ausdrücklich für die Q2-Familie ein. Wählen Sie das Format vor der Generierung und beschreiben Sie eine dazu passende Komposition: Halten Sie das Hauptmotiv im Hochformat gut erkennbar oder nutzen Sie die Breite eines Querformats für die umgebende Szenerie. Lassen Sie die Schlussansicht klar genug für die vorgesehene Seite, Präsentation oder spätere Ergänzung von Beschriftungen.</p><p>Das Feld seed steuert Variationen. Wird es weggelassen oder 0 übergeben, wird ein zufälliger Wert gewählt; ein Wert ungleich null wählt die dokumentierte Option mit festem seed für eine wiederholbare Generierung. Bewahren Sie den zurückgegebenen seed beim Versionsvergleich zusammen mit Prompt und Einstellungen. Der gemeinsame Bedienungsablauf dokumentiert ausserdem die Steuerungen audio und off_peak ausdrücklich für Q3-Modelle. Diese Q3-Optionen sind diesem Q2-Profil nicht als Fähigkeiten zugeordnet. Planen Sie diese Anfrage anhand ihrer dokumentierten Texteingabe und Videoausgabe.</p><p>Die Generierung erfolgt asynchron. Das Absenden liefert task_id und einen Anfangszustand, wobei created für eine neu erstellte Aufgabe verwendet wird. Bewahren Sie diese Aufgabenkennung, während Sie die Verarbeitung verfolgen. Die dokumentierte Ergebnisabfrage verwendet state=success für ein erfolgreiches Ergebnis und gibt ein Array creations zurück. Jeder Eintrag enthält seine Video-URL in creations[].url. Speichern Sie jedes zurückgegebene Video, statt anzunehmen, dass eine Aufgabe immer genau ein einzelnes Ergebnis enthält.</p><p>Die Ergebnisdokumentation meldet ausserdem die tatsächliche Videodauer, fps sowie die Auflösung als Breite und Höhe. Bewahren Sie diese gemeldeten Werte zusammen mit dem fertigen Clip, statt die Bildrate oder Abmessungen eines Beispiels als feste Q2-Spezifikation zu behandeln. Die Antwort auf die Aufgabenerstellung enthält neben der Anfragekonfiguration einen Wert credits. Bewahren Sie diese gemeldeten Aufgabenmetadaten und die Kennung der abgeschlossenen Aufgabe zusammen mit dem Ergebnis, damit jedes Video mit seinen Generierungseinstellungen verknüpft bleibt.</p><p>Prüfen Sie die gesamte Sequenz anhand des ursprünglichen Auftrags: Erscheinungsbild des Motivs, Objektform, Bewegungsrichtung, Kamerakontinuität und beabsichtigte Schlussansicht. Benennen Sie für eine Überarbeitung das konkrete Detail, das den Auftrag verfehlt hat, und bewahren Sie die erfolgreichen Teile der Szene. Halten Sie Prompt, genauen Selektor, Einstellungen, Aufgabenkennung und fertige Videos zusammen, damit ein späterer Vergleich auf den tatsächlichen Ergebnissen beruht.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">In Ailoot verfügbar · Eingaben und Methoden</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Videoerzeugung</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Eingabe</dt><dd><code>text</code></dd></div><div><dt>Ausgabe</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Feld</th><th>Typ</th><th>Anforderung</th><th>Werte und Limits</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Erforderlich</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>viduq2</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Erforderlich</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>Bedingungen: Beschreiben Sie die zu erzeugende Szene. Die dokumentierte Grenze beträgt 2000 Zeichen; Ailoot prüft, ob die Zeichenkette nicht leer ist, und bewahrt den Text unverändert auf.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>integer</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Optional</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>Minimum: 1</div><div>Maximum: 10</div><div>Bedingungen: Die modellspezifische Beschreibung von viduq2 nennt 1–10 ganze Sekunden. Eine modellspezifische Standarddauer ist nicht dokumentiert.</div><div>Einheit: Sekunden</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Optional</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>Bedingungen: Für eine zufällige Auswahl weglassen oder die Zeichenkette &quot;0&quot; senden. Ein angegebener seed ungleich null wählt das dokumentierte Verhalten mit festem seed; ein numerischer Wertebereich ist nicht festgelegt.</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Optional</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>16:9, 9:16, 3:4, 4:3, 1:1</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>16:9</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Optional</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>540p, 720p, 1080p</div><div>Bedingungen: Die modellspezifische Liste von viduq2 dokumentiert diese Stufen für 1–10 Sekunden. Gemeinsame Enum-Werte und eine Tabelle nennen zusätzlich 360p; deren Anwendbarkeit widerspricht dieser Liste und wird hier nicht zugesichert.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>720p</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">style</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Optional</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>general, anime</div><div>Bedingungen: Das gemeinsame Anfrageformat akzeptiert dieses Feld; die Dokumentation hält jedoch ausdrücklich fest, dass es bei viduq2 keine Wirkung hat.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>general</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">movement_amplitude</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>string</code></td><td data-cell-label=\"Anforderung\"><span class=\"card-cell-label\">Anforderung</span>Optional</td><td data-cell-label=\"Werte und Limits\"><span class=\"card-cell-label\">Werte und Limits</span><div>auto, small, medium, large</div><div>Bedingungen: Das gemeinsame Anfrageformat akzeptiert dieses Feld; die Dokumentation hält jedoch ausdrücklich fest, dass es bei q2-Modellen keine Wirkung hat.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>auto</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationen von Eingabematerialien</summary><p class=\"note-s\"><b></b></p></details><details class=\"note-s\" data-method-contract><summary>Methodenparameter und Lebenszyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Vertrag</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>model, prompt</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>duration, seed, aspect_ratio, resolution, style, movement_amplitude</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>additional_properties</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>true</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>validation_scope</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>Ailoot validiert die nicht leeren Zeichenketten model/prompt. Die nachfolgenden optionalen Typen und Grenzen bilden den dokumentierten Anfragevertrag; weitere Anfragefelder bleiben für das ausgewählte Modell erhalten.</td></tr></tbody></table></div><p>Methodenaliasnamen: <code>/v1/videos/generations</code></p><p>Lebenszyklus: <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\">Erstellen Sie einmal und bewahren Sie die zurückgegebene öffentliche id und polling_url auf.</p><p class=\"note-s\">Fragen Sie den ursprünglichen Vorgang ab und lesen Sie state; success und ein Ihnen zugeordnetes Ergebnis in creations[].url bilden die Abschlussgrenze.</p><p class=\"note-s\">Laden Sie jede zurückgegebene URL eines Ihnen zugeordneten Videos herunter; leiten Sie aus dem Beispiel weder eine feste Anzahl von Ausgaben noch eine feste Dauer oder Bildrate ab.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarife</h3><div class=\"card-result-process\" data-billing-basis><h5>So wird die endgültige Gebühr berechnet</h5><p class=\"note-s\">Die angezeigten Tarife dienen zur Kostenschätzung vor der Generierung. Der endgültige Betrag wird aus den für die ursprüngliche Generierung erfassten Kosten berechnet. Die gemessene Ausgabedauer und prognostizierte Mengen sind nicht die endgültige abrechenbare Menge.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tarifangaben erweitern die Anfrageoptionen nicht. Unterstützte Parameter stehen bei der ausgewählten Methode.</p><dl data-price-conditions><dt>Schnellmodus</dt><dd>Nicht angegeben <span class=\"note-s\">Wenn der Schnellmodus ausgewählt ist</span></dd><dt>Flex-Modus</dt><dd>Nicht angegeben <span class=\"note-s\">Wenn der Modus flex ausgewählt ist</span></dd><dt>Maximaler Denkaufwand</dt><dd>Nicht angegeben <span class=\"note-s\">Wenn beim maximalen Denkaufwand die Standardanpassung (default) verwendet wird</span></dd></dl></div><div data-declared-tariff-pricing><h4>Geschätzte Tarife zum Vergleich</h4><h4>Preise nach Konfiguration</h4><p class=\"note-s\">Ordnen Sie jede Gebühr den angezeigten Bedingungen zu. Verwenden Sie für jede Gruppe alternativer Konfigurationen einen Tarif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguration</th><th>Tarifstaffel</th><th>Prognostizierte Menge</th><th>Gebühr</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Token-Basistarife</th><td data-cell-label=\"Tarifstaffel\"><span class=\"card-cell-label\">Tarifstaffel</span>Grundtarif</td><td data-cell-label=\"Prognostizierte Menge\"><span class=\"card-cell-label\">Prognostizierte Menge</span>—</td><td data-cell-label=\"Gebühr\"><span class=\"card-cell-label\">Gebühr</span><div><span>Eingabe · Eingabetoken · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Ausgabe · Ausgabetoken · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Eingabe · Cache lesen · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Eingabe · Cache schreiben · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Eingabe · Cache schreiben, 1 Stunde · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Geschätzte Erzeugungskosten</th><td data-cell-label=\"Tarifstaffel\"><span class=\"card-cell-label\">Tarifstaffel</span>—</td><td data-cell-label=\"Prognostizierte Menge\"><span class=\"card-cell-label\">Prognostizierte Menge</span>Schätzung für eine Generierung</td><td data-cell-label=\"Gebühr\"><span class=\"card-cell-label\">Gebühr</span><div><span>Ausgabe · Geschätzte Generierungskosten · Schätzung nur zum Vergleich</span> <b>$5.12</b> <span class=\"price-unit\">Schätzung vor der Generierung</span></div><p class=\"note-s\">Diese Schätzung ist weder eine zusätzliche Gebühr noch ein fester Tarif für die abgeschlossene Generierung.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserviert vor einer Anfrage einen geschätzten Betrag. Nach dem Ergebnis rechnet Ailoot die endgültige Gebühr anhand des gemessenen Verbrauchs ab. Bei Streaming erfolgt die Abrechnung anhand des abschliessenden Verbrauchsdatensatzes. <a href=\"/docs/de-ch/billing/reserve/\">So funktionieren Reservierung und Abrechnung →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Beispielanfragen</h3><h4>Ailoot Ultra · Videoerzeugung</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Codevarianten\"><button class=\"cg-tab\" id=\"model-code-2782-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · Video erstellen</button><button class=\"cg-tab\" id=\"model-code-2782-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · ursprünglichen Auftrag auslesen</button><button class=\"cg-tab\" id=\"model-code-2782-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · jedes eigene Video herunterladen</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Code kopieren\"><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-2782-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; request.json &lt;&lt;&#39;JSON_REQUEST&#39;\n{&quot;model&quot;:&quot;viduq2&quot;,&quot;prompt&quot;:&quot;In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.&quot;}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2782-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-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 class=\"cg-pane\" id=\"model-code-2782-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(&quot;status.json&quot;).read_text())\nif r.get(&quot;state&quot;)!=&quot;success&quot;:raise SystemExit(&quot;Poll the same original job until its owned result is returned.&quot;)\ncreations=r.get(&quot;creations&quot;)\nif not isinstance(creations,list) or not creations:raise SystemExit(&quot;No completed video creations.&quot;)\nurls=[]\nfor item in creations:\n    value=item.get(&quot;url&quot;) if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(&quot;No completed video URL.&quot;)\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(&quot;Invalid returned URL.&quot;)\n        p=urlsplit(u)\n        if p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/media/assets/&quot;) or not p.path.endswith(&quot;/content&quot;) or not p.query:raise SystemExit(&quot;Wait for the actual Ailoot-owned signed result.&quot;)\n        urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; -o &quot;video-${index}.bin&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Ergebnisse abrufen und speichern</h3><h4>Ailoot Ultra · Videoerzeugung</h4><p class=\"note-s\">JSON bewahrt den nativen Zustand und das creations-Array und ergänzt die öffentlichen id/provider_task_id/polling_url. Ausgewählte Video-URLs sind vor der Veröffentlichung leer und werden nach Abschluss zu signierten URLs unter Kontrolle von Ailoot.</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>Alle fertiggestellten Ergebnisse aufbewahren</h5><p class=\"note-s\">Speichern Sie jedes fertiggestellte Video oder jede zurückgegebene Datei; rufen Sie jede tatsächlich zurückgegebene Datei-URL ab.</p><p class=\"note-s\">Laden Sie jede tatsächlich in creations[].url zurückgegebene URL herunter; ein Inhaltsindex bezeichnet eine reale zurückgegebene Ausgabe.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Wenn die ursprüngliche Antwort geprüft werden muss</h5><p class=\"note-s\">Die festgelegte Deklaration führt keinen abschliessenden Fehlerzustand auf. Bewahren Sie die ursprüngliche Antwort, Header und id auf und prüfen Sie denselben Vorgang bei jedem unbekannten Zustand oder result_pending_check-Fehler; reichen Sie eine Erstellung mit unbekanntem Ausgang niemals erneut ein.</p></div><details class=\"card-about\" data-output-fields><summary>Antwortfelder</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Feld</th><th>Typ</th><th>Bedeutung</th></tr></thead><tbody><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Zurückgegebene öffentliche Aufgaben- oder Vorgangskennung von Ailoot.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Ursprüngliche Aufgabenkennung, getrennt von der öffentlichen id.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Zurückgegebener Abfragepfad von Ailoot für die ursprüngliche Aufgabe.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string when supplied</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Ursprüngliche Kennung aus der Erstellungsantwort.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string when supplied</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Nativer Aufgabenzustand: created für den festgelegten ausstehenden Zustand und success für den Abschluss.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">err_code</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string when supplied</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Aufgabendiagnose; die gespeicherte Spezifikation führt keine Fehlercodes als Liste auf.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">creations[].url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string|string[]</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Jede ausgewählte URL eines fertiggestellten Videos wird durch eine signierte URL unter Kontrolle von Ailoot ersetzt.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">creations[].video.duration</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>number when supplied</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Zurückgegebene Videodauer; prüfen Sie das tatsächliche fertiggestellte Ergebnis.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">creations[].video.fps</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer when supplied</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Zurückgegebene Bildrate; eine feste Bildrate wird nicht versprochen.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">creations[].video.resolution.width</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer when supplied</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Zurückgegebene Ausgabebreite in Pixeln.</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">creations[].video.resolution.height</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>integer when supplied</td><td data-cell-label=\"Bedeutung\"><span class=\"card-cell-label\">Bedeutung</span>Zurückgegebene Ausgabehöhe in Pixeln.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fehler und nächste Schritte</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Antwort</th><th>Bedingung</th><th>Nächster Schritt</th></tr></thead><tbody><tr><th data-cell-label=\"Antwort\" scope=\"row\"><span class=\"card-cell-label\">Antwort</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Bedingung\"><span class=\"card-cell-label\">Bedingung</span>Ungültiges JSON/Modell, fehlende oder leere erforderliche Zeichenketten oder ein ungültiger Inhaltsindex.</td><td data-cell-label=\"Nächster Schritt\"><span class=\"card-cell-label\">Nächster Schritt</span></td></tr><tr><th data-cell-label=\"Antwort\" scope=\"row\"><span class=\"card-cell-label\">Antwort</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Bedingung\"><span class=\"card-cell-label\">Bedingung</span>Ungültiger API-Schlüssel von Ailoot.</td><td data-cell-label=\"Nächster Schritt\"><span class=\"card-cell-label\">Nächster Schritt</span></td></tr><tr><th data-cell-label=\"Antwort\" scope=\"row\"><span class=\"card-cell-label\">Antwort</span>403 · <code>permission_error</code></th><td data-cell-label=\"Bedingung\"><span class=\"card-cell-label\">Bedingung</span>Die Gruppe des API-Schlüssels ist für diese Medienroute nicht zugelassen.</td><td data-cell-label=\"Nächster Schritt\"><span class=\"card-cell-label\">Nächster Schritt</span></td></tr><tr><th data-cell-label=\"Antwort\" scope=\"row\"><span class=\"card-cell-label\">Antwort</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Bedingung\"><span class=\"card-cell-label\">Bedingung</span>Die ursprüngliche Aufgabe oder die angeforderte Ausgabe fehlt oder gehört nicht demselben Benutzer, API-Schlüssel und derselben Gruppe.</td><td data-cell-label=\"Nächster Schritt\"><span class=\"card-cell-label\">Nächster Schritt</span></td></tr><tr><th data-cell-label=\"Antwort\" scope=\"row\"><span class=\"card-cell-label\">Antwort</span>502 · <code>result_pending_check</code></th><td data-cell-label=\"Bedingung\"><span class=\"card-cell-label\">Bedingung</span>Die ursprüngliche Einreichung oder der Status ist unvollständig oder lässt sich nicht abgleichen; bewahren Sie die ursprüngliche ID auf und reichen Sie den Auftrag nicht erneut ein.</td><td data-cell-label=\"Nächster Schritt\"><span class=\"card-cell-label\">Nächster Schritt</span></td></tr><tr><th data-cell-label=\"Antwort\" scope=\"row\"><span class=\"card-cell-label\">Antwort</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Bedingung\"><span class=\"card-cell-label\">Bedingung</span>Die ursprüngliche Zuordnung, Route oder das Ihnen zugeordnete Medium wird noch geprüft; setzen Sie die Prüfung dieses ursprünglichen Vorgangs fort.</td><td data-cell-label=\"Nächster Schritt\"><span class=\"card-cell-label\">Nächster Schritt</span></td></tr><tr><th data-cell-label=\"Antwort\" scope=\"row\"><span class=\"card-cell-label\">Antwort</span>503 · <code>server_error</code></th><td data-cell-label=\"Bedingung\"><span class=\"card-cell-label\">Bedingung</span>Der Mediendienst oder der Speicher der ursprünglichen Aufgaben ist nicht verfügbar.</td><td data-cell-label=\"Nächster Schritt\"><span class=\"card-cell-label\">Nächster Schritt</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasnamen</h3><h4>Modellaliasnamen</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></span></p><h4>Aliasnamen für Methodenpfade</h4><p class=\"note-s\"><code>/v1/videos/generations</code></p><h4>Zugehörige Aufrufer-IDs</h4><p class=\"note-s\"><a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "viduq2",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|viduq2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Die angezeigten Tarife dienen zur Kostenschätzung vor der Generierung. Der endgültige Betrag wird aus den für die ursprüngliche Generierung erfassten Kosten berechnet. Die gemessene Ausgabedauer und prognostizierte Mengen sind nicht die endgültige abrechenbare Menge.",
          "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": "Ungültiges JSON/Modell, fehlende oder leere erforderliche Zeichenketten oder ein ungültiger Inhaltsindex.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Ungültiger API-Schlüssel von Ailoot.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Die Gruppe des API-Schlüssels ist für diese Medienroute nicht zugelassen.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "Die ursprüngliche Aufgabe oder die angeforderte Ausgabe fehlt oder gehört nicht demselben Benutzer, API-Schlüssel und derselben Gruppe.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "Die ursprüngliche Einreichung oder der Status ist unvollständig oder lässt sich nicht abgleichen; bewahren Sie die ursprüngliche ID auf und reichen Sie den Auftrag nicht erneut ein.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Die ursprüngliche Zuordnung, Route oder das Ihnen zugeordnete Medium wird noch geprüft; setzen Sie die Prüfung dieses ursprünglichen Vorgangs fort.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Der Mediendienst oder der Speicher der ursprünglichen Aufgaben ist nicht verfügbar.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "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": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "Die festgelegte Deklaration führt keinen abschliessenden Fehlerzustand auf. Bewahren Sie die ursprüngliche Antwort, Header und id auf und prüfen Sie denselben Vorgang bei jedem unbekannten Zustand oder result_pending_check-Fehler; reichen Sie eine Erstellung mit unbekanntem Ausgang niemals erneut ein.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "Laden Sie jede tatsächlich in creations[].url zurückgegebene URL herunter; ein Inhaltsindex bezeichnet eine reale zurückgegebene Ausgabe.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Zurückgegebene öffentliche Aufgaben- oder Vorgangskennung von Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Ursprüngliche Aufgabenkennung, getrennt von der öffentlichen id.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Zurückgegebener Abfragepfad von Ailoot für die ursprüngliche Aufgabe.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Ursprüngliche Kennung aus der Erstellungsantwort.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Nativer Aufgabenzustand: created für den festgelegten ausstehenden Zustand und success für den Abschluss.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Aufgabendiagnose; die gespeicherte Spezifikation führt keine Fehlercodes als Liste auf.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Jede ausgewählte URL eines fertiggestellten Videos wird durch eine signierte URL unter Kontrolle von Ailoot ersetzt.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Zurückgegebene Videodauer; prüfen Sie das tatsächliche fertiggestellte Ergebnis.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Zurückgegebene Bildrate; eine feste Bildrate wird nicht versprochen.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zurückgegebene Ausgabebreite in Pixeln.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zurückgegebene Ausgabehöhe in Pixeln.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "JSON bewahrt den nativen Zustand und das creations-Array und ergänzt die öffentlichen id/provider_task_id/polling_url. Ausgewählte Video-URLs sind vor der Veröffentlichung leer und werden nach Abschluss zu signierten URLs unter Kontrolle von Ailoot."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Beschreiben Sie die zu erzeugende Szene. Die dokumentierte Grenze beträgt 2000 Zeichen; Ailoot prüft, ob die Zeichenkette nicht leer ist, und bewahrt den Text unverändert auf.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Die modellspezifische Beschreibung von viduq2 nennt 1–10 ganze Sekunden. Eine modellspezifische Standarddauer ist nicht dokumentiert.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "Sekunden"
              },
              {
                "availability": "source_interface",
                "conditions": "Für eine zufällige Auswahl weglassen oder die Zeichenkette \"0\" senden. Ein angegebener seed ungleich null wählt das dokumentierte Verhalten mit festem seed; ein numerischer Wertebereich ist nicht festgelegt.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Die modellspezifische Liste von viduq2 dokumentiert diese Stufen für 1–10 Sekunden. Gemeinsame Enum-Werte und eine Tabelle nennen zusätzlich 360p; deren Anwendbarkeit widerspricht dieser Liste und wird hier nicht zugesichert.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Das gemeinsame Anfrageformat akzeptiert dieses Feld; die Dokumentation hält jedoch ausdrücklich fest, dass es bei viduq2 keine Wirkung hat.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Das gemeinsame Anfrageformat akzeptiert dieses Feld; die Dokumentation hält jedoch ausdrücklich fest, dass es bei q2-Modellen keine Wirkung hat.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "Erstellen Sie einmal und bewahren Sie die zurückgegebene öffentliche id und polling_url auf.",
            "Fragen Sie den ursprünglichen Vorgang ab und lesen Sie state; success und ein Ihnen zugeordnetes Ergebnis in creations[].url bilden die Abschlussgrenze.",
            "Laden Sie jede zurückgegebene URL eines Ihnen zugeordneten Videos herunter; leiten Sie aus dem Beispiel weder eine feste Anzahl von Ausgaben noch eine feste Dauer oder Bildrate ab."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "Ailoot validiert die nicht leeren Zeichenketten model/prompt. Die nachfolgenden optionalen Typen und Grenzen bilden den dokumentierten Anfragevertrag; weitere Anfragefelder bleiben für das ausgewählte Modell erhalten."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "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": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned 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 for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "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": "Diese Schätzung ist weder eine zusätzliche Gebühr noch ein fester Tarif für die abgeschlossene Generierung.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Geschätzte Erzeugungskosten",
            "units": [
              {
                "amount": "5.12",
                "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": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "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"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Videoerzeugung",
        "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": "5.12",
                "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": "5.12",
                "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": "viduq2",
        "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": "5.12",
            "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": "5.12",
            "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": "viduq2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "d78911977a15a3c7abd08110f2cc4d5ce447d0006b238cc4fd751a9e3a64edb2",
    "input_html_sha256": "ff2103a321e48a4794b1feae3eae162f47ef0487bd0686382907b447f6d9b4d6",
    "private_audit_sha256": "92c4e98ec7915dc965e8fdd0b6626a4d6abb89365e942974f044327496a0fc9b",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/de-ch/viduq2/",
    "description": "Vidu Q2 erstellt Video aus einer textlichen Szenenbeschreibung, mit einer Dauer von 1–10 Sekunden, einer Ausgabe in 540p, 720p oder 1080p und fünf Seitenverhältnissen. Dieses konkrete Profil viduq2 verwendet den Prompt für Stil und Bewegung und liefert sein Ergebnis über eine asynchrone Aufgabe.",
    "locale": "de-ch",
    "md_url": "https://ailoot.ai/models/de-ch/viduq2/index.md",
    "title": "Vidu: Q2 Text-to-Video — Ailoot",
    "url": "https://ailoot.ai/models/de-ch/viduq2/"
  },
  "rawModel": {
    "about": "Vidu Q2 erstellt Video aus einer schriftlich beschriebenen Szene über das mit viduq2 ausgewählte Text-zu-Video-Profil. Erforderliche Eingaben sind die genaue Modellkennung und ein Prompt, der die Szene beschreibt. Nutzen Sie es für ein kurzes Produktkonzept, eine Übersichtsaufnahme oder eine Figurenaktion, deren Erscheinungsbild und Bewegung sich in Worten festlegen lassen. Diese konfigurierte Methode ist Text-zu-Video; ihre Beschreibung ordnet dem Selektor keinen separaten Bildreferenz- oder Videobearbeitungsmodus zu.\n\nBauen Sie den Auftrag um eine sichtbare Abfolge auf. Benennen Sie Motiv, Ort, Aktion, Einstellungsgrösse, Kamerabewegung und Schlusskomposition. Beschreiben Sie bei einem Produktkonzept ein Objekt auf einer Tischplatte, Licht, das über sein Material wandert, und eine langsame Kameraannäherung, die bei einem erkennbaren Detail endet. Führen Sie bei einer Ortsszene zunächst die Umgebung ein, bevor Sie sich dem Schwerpunkt nähern. Stimmen Sie die Aktion auf die gewählte Cliplänge ab, damit die Szene Platz für das beabsichtigte Ende besitzt.\n\nDer Prompt ist auf 2’000 Zeichen begrenzt. Nennen Sie zuerst das wesentliche Motiv und die Aktion und ergänzen Sie dann Beleuchtung, Material, Umgebung und Kameradetails, die das gewünschte Ergebnis beeinflussen. Geben Sie den visuellen Stil im Prompt an. Laut Q2-spezifischem Leitfaden haben die separaten Parameter style und movement_amplitude bei diesem Modell keine Wirkung. Die Voreinstellung general oder anime und die Optionen zur Bewegungsamplitude ersetzen daher keine klare Szenenbeschreibung.\n\nDie modellspezifische Dauereinstellung akzeptiert ganze Sekunden von eins bis zehn. Die Q2-spezifischen Auflösungsoptionen sind 540p, 720p und 1080p, wobei 720p als dokumentierter Standard gilt. Wählen Sie Dauer und Auflösung gemeinsam nach Aktion und Verwendungszweck. Eine kurze Enthüllung und eine längere Bewegung benötigen unterschiedliches Timing. Eine längere angeforderte Dauer sollte der sichtbaren Abfolge dienen, statt lediglich einen unveränderten Auftrag zu strecken. Prüfen Sie bei der Vorbereitung der abschliessenden Platzierung die tatsächlichen Abmessungen und die Länge des zurückgegebenen Clips.\n\nDie dokumentierten Optionen für aspect_ratio sind 16:9, 9:16, 3:4, 4:3 und 1:1, standardmässig 16:9. Der Leitfaden schliesst 3:4 und 4:3 ausdrücklich für die Q2-Familie ein. Wählen Sie das Format vor der Generierung und beschreiben Sie eine dazu passende Komposition: Halten Sie das Hauptmotiv im Hochformat gut erkennbar oder nutzen Sie die Breite eines Querformats für die umgebende Szenerie. Lassen Sie die Schlussansicht klar genug für die vorgesehene Seite, Präsentation oder spätere Ergänzung von Beschriftungen.\n\nDas Feld seed steuert Variationen. Wird es weggelassen oder 0 übergeben, wird ein zufälliger Wert gewählt; ein Wert ungleich null wählt die dokumentierte Option mit festem seed für eine wiederholbare Generierung. Bewahren Sie den zurückgegebenen seed beim Versionsvergleich zusammen mit Prompt und Einstellungen. Der gemeinsame Bedienungsablauf dokumentiert ausserdem die Steuerungen audio und off_peak ausdrücklich für Q3-Modelle. Diese Q3-Optionen sind diesem Q2-Profil nicht als Fähigkeiten zugeordnet. Planen Sie diese Anfrage anhand ihrer dokumentierten Texteingabe und Videoausgabe.\n\nDie Generierung erfolgt asynchron. Das Absenden liefert task_id und einen Anfangszustand, wobei created für eine neu erstellte Aufgabe verwendet wird. Bewahren Sie diese Aufgabenkennung, während Sie die Verarbeitung verfolgen. Die dokumentierte Ergebnisabfrage verwendet state=success für ein erfolgreiches Ergebnis und gibt ein Array creations zurück. Jeder Eintrag enthält seine Video-URL in creations[].url. Speichern Sie jedes zurückgegebene Video, statt anzunehmen, dass eine Aufgabe immer genau ein einzelnes Ergebnis enthält.\n\nDie Ergebnisdokumentation meldet ausserdem die tatsächliche Videodauer, fps sowie die Auflösung als Breite und Höhe. Bewahren Sie diese gemeldeten Werte zusammen mit dem fertigen Clip, statt die Bildrate oder Abmessungen eines Beispiels als feste Q2-Spezifikation zu behandeln. Die Antwort auf die Aufgabenerstellung enthält neben der Anfragekonfiguration einen Wert credits. Bewahren Sie diese gemeldeten Aufgabenmetadaten und die Kennung der abgeschlossenen Aufgabe zusammen mit dem Ergebnis, damit jedes Video mit seinen Generierungseinstellungen verknüpft bleibt.\n\nPrüfen Sie die gesamte Sequenz anhand des ursprünglichen Auftrags: Erscheinungsbild des Motivs, Objektform, Bewegungsrichtung, Kamerakontinuität und beabsichtigte Schlussansicht. Benennen Sie für eine Überarbeitung das konkrete Detail, das den Auftrag verfehlt hat, und bewahren Sie die erfolgreichen Teile der Szene. Halten Sie Prompt, genauen Selektor, Einstellungen, Aufgabenkennung und fertige Videos zusammen, damit ein späterer Vergleich auf den tatsächlichen Ergebnissen beruht.",
    "alias_of": null,
    "aliases": [],
    "author": "Vidu",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "5.12",
            "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": "5.12",
            "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": "Die vollständigen Preisangaben zur Konfiguration finden Sie in den Details."
      }
    ],
    "ctx": null,
    "display_name": "Vidu: Q2 Text-to-Video",
    "formats": [
      "videos"
    ],
    "id": "viduq2",
    "input": [
      "text"
    ],
    "kind": "video",
    "locale": "en",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Die angezeigten Tarife dienen zur Kostenschätzung vor der Generierung. Der endgültige Betrag wird aus den für die ursprüngliche Generierung erfassten Kosten berechnet. Die gemessene Ausgabedauer und prognostizierte Mengen sind nicht die endgültige abrechenbare Menge.",
          "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": "Ungültiges JSON/Modell, fehlende oder leere erforderliche Zeichenketten oder ein ungültiger Inhaltsindex.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Ungültiger API-Schlüssel von Ailoot.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Die Gruppe des API-Schlüssels ist für diese Medienroute nicht zugelassen.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "Die ursprüngliche Aufgabe oder die angeforderte Ausgabe fehlt oder gehört nicht demselben Benutzer, API-Schlüssel und derselben Gruppe.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "Die ursprüngliche Einreichung oder der Status ist unvollständig oder lässt sich nicht abgleichen; bewahren Sie die ursprüngliche ID auf und reichen Sie den Auftrag nicht erneut ein.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Die ursprüngliche Zuordnung, Route oder das Ihnen zugeordnete Medium wird noch geprüft; setzen Sie die Prüfung dieses ursprünglichen Vorgangs fort.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "Der Mediendienst oder der Speicher der ursprünglichen Aufgaben ist nicht verfügbar.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "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": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "Die festgelegte Deklaration führt keinen abschliessenden Fehlerzustand auf. Bewahren Sie die ursprüngliche Antwort, Header und id auf und prüfen Sie denselben Vorgang bei jedem unbekannten Zustand oder result_pending_check-Fehler; reichen Sie eine Erstellung mit unbekanntem Ausgang niemals erneut ein.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "Laden Sie jede tatsächlich in creations[].url zurückgegebene URL herunter; ein Inhaltsindex bezeichnet eine reale zurückgegebene Ausgabe.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Zurückgegebene öffentliche Aufgaben- oder Vorgangskennung von Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Ursprüngliche Aufgabenkennung, getrennt von der öffentlichen id.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Zurückgegebener Abfragepfad von Ailoot für die ursprüngliche Aufgabe.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Ursprüngliche Kennung aus der Erstellungsantwort.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Nativer Aufgabenzustand: created für den festgelegten ausstehenden Zustand und success für den Abschluss.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Aufgabendiagnose; die gespeicherte Spezifikation führt keine Fehlercodes als Liste auf.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Jede ausgewählte URL eines fertiggestellten Videos wird durch eine signierte URL unter Kontrolle von Ailoot ersetzt.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Zurückgegebene Videodauer; prüfen Sie das tatsächliche fertiggestellte Ergebnis.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Zurückgegebene Bildrate; eine feste Bildrate wird nicht versprochen.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zurückgegebene Ausgabebreite in Pixeln.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Zurückgegebene Ausgabehöhe in Pixeln.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "JSON bewahrt den nativen Zustand und das creations-Array und ergänzt die öffentlichen id/provider_task_id/polling_url. Ausgewählte Video-URLs sind vor der Veröffentlichung leer und werden nach Abschluss zu signierten URLs unter Kontrolle von Ailoot."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Beschreiben Sie die zu erzeugende Szene. Die dokumentierte Grenze beträgt 2000 Zeichen; Ailoot prüft, ob die Zeichenkette nicht leer ist, und bewahrt den Text unverändert auf.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Die modellspezifische Beschreibung von viduq2 nennt 1–10 ganze Sekunden. Eine modellspezifische Standarddauer ist nicht dokumentiert.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "Sekunden"
              },
              {
                "availability": "source_interface",
                "conditions": "Für eine zufällige Auswahl weglassen oder die Zeichenkette \"0\" senden. Ein angegebener seed ungleich null wählt das dokumentierte Verhalten mit festem seed; ein numerischer Wertebereich ist nicht festgelegt.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Die modellspezifische Liste von viduq2 dokumentiert diese Stufen für 1–10 Sekunden. Gemeinsame Enum-Werte und eine Tabelle nennen zusätzlich 360p; deren Anwendbarkeit widerspricht dieser Liste und wird hier nicht zugesichert.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Das gemeinsame Anfrageformat akzeptiert dieses Feld; die Dokumentation hält jedoch ausdrücklich fest, dass es bei viduq2 keine Wirkung hat.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Das gemeinsame Anfrageformat akzeptiert dieses Feld; die Dokumentation hält jedoch ausdrücklich fest, dass es bei q2-Modellen keine Wirkung hat.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "Erstellen Sie einmal und bewahren Sie die zurückgegebene öffentliche id und polling_url auf.",
            "Fragen Sie den ursprünglichen Vorgang ab und lesen Sie state; success und ein Ihnen zugeordnetes Ergebnis in creations[].url bilden die Abschlussgrenze.",
            "Laden Sie jede zurückgegebene URL eines Ihnen zugeordneten Videos herunter; leiten Sie aus dem Beispiel weder eine feste Anzahl von Ausgaben noch eine feste Dauer oder Bildrate ab."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "Ailoot validiert die nicht leeren Zeichenketten model/prompt. Die nachfolgenden optionalen Typen und Grenzen bilden den dokumentierten Anfragevertrag; weitere Anfragefelder bleiben für das ausgewählte Modell erhalten."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "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": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned 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 for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "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": "Diese Schätzung ist weder eine zusätzliche Gebühr noch ein fester Tarif für die abgeschlossene Generierung.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Geschätzte Erzeugungskosten",
            "units": [
              {
                "amount": "5.12",
                "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": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "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"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Videoerzeugung",
        "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": "5.12",
                "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": "5.12",
                "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": "viduq2",
        "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": "5.12",
            "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": "5.12",
            "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": "viduq2",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      }
    ],
    "name": "Vidu: Q2 Text-to-Video",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 5.12,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 5.12,
      "varies": false
    },
    "short": "Vidu Q2 erstellt Video aus einer textlichen Szenenbeschreibung, mit einer Dauer von 1–10 Sekunden, einer Ausgabe in 540p, 720p oder 1080p und fünf Seitenverhältnissen. Dieses konkrete Profil viduq2 verwendet den Prompt für Stil und Bewegung und liefert sein Ergebnis über eine asynchrone Aufgabe."
  },
  "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": "Vidu Q2 erstellt Video aus einer textlichen Szenenbeschreibung, mit einer Dauer von 1–10 Sekunden, einer Ausgabe in 540p, 720p oder 1080p und fünf Seitenverhältnissen. Dieses konkrete Profil viduq2 verwendet den Prompt für Stil und Bewegung und liefert sein Ergebnis über eine asynchrone Aufgabe.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "4f8ea36f796f12558004ce9bdedd7a43eb0e5dfee32b592db356021c69385283",
    "renderer_sha256": "76caa42c097db2ddc47d1e1e6fe7ca45c8363d7211296daf28e4352971e6c0c8"
  },
  "sourceRevision": "c5639ca54772cb1a4d270814e90ee1609ffebe4e27167c97a1e9b40687fd3ba7"
}
