{
  "aboutHtml": "<p>Seedance 2.5 erstellt Video anhand einer schriftlich beschriebenen Szene und multimodaler Referenzen. Der genaue Selektor doubao-seedance-2-5-260628 besitzt einen eigenen dokumentierten Bedienungsablauf und ein eigenes Beispiel. Dieser Ablauf beschreibt Videoerzeugung, Videobearbeitung und Videoverlängerung mit Bildern, Video, Audio und Text als Eingabemedien. Nutzen Sie die Referenzen, um Erscheinungsbild des Motivs, Aktion, Kamerabewegung, Stil und Ton zu vermitteln, und erläutern Sie dann das daraus zu erzeugende Ergebnis.</p><p>Zu den Eingabekombinationen gehören Text allein, Bilder oder Video mit optionalem Text, Bilder mit Audio, Video mit Audio sowie Bilder, Video und Audio gemeinsam. Die aufgeführten Kombinationen verbinden Audio mit visuellen Medien und beschreiben keine reine Audioanfrage. Ordnen Sie jedes Element nach seiner Rolle: Ein Bild legt ein Motiv oder Erscheinungsbild fest, ein Video zeigt Bewegung oder eine bestehende Szene und Audio liefert eine Tonreferenz. Geben Sie an, welche Rolle für die angeforderte Einstellung wichtig ist, damit eine Hintergrundreferenz nicht mit der Hauptfigur verwechselt wird.</p><p>Das konkrete 2.5-Beispiel ist eine Produktwerbesequenz. Es stellt ein Bild und mehrere Videoreferenzen bereit und beschreibt dann einen anfänglichen Fokus, geordnete Produktanordnungen, Detailaufnahmen, eine Zeitlupenaktion und eine abschließende Markenkomposition. Die Anfrage weist die Rollen reference_image und reference_video zu und nutzt einzelne Referenzen für Komposition, Bewegung, Kameraführung und Wirkung. Daraus ergibt sich eine praktische Struktur für ein Kampagnenkonzept: die sichtbaren Handlungsschritte planen, für jeden Schritt die Referenz benennen und die Schlussanordnung vorgeben.</p><p>Eine schriftliche Sequenz kann unterscheiden, was geschieht und wie es gefilmt wird. Beschreiben Sie zuerst die Produktaktion und dann Einstellungsgröße, Kameraweg, Tempo und Übergang zur nächsten Ansicht. Wenn eine Referenz das Produkt festlegt und eine andere eine Kamerabewegung zeigt, benennen Sie diese getrennten Zuständigkeiten. Erklären Sie bei einer Szene mit mehreren Objekten ihre Positionen und die Reihenfolge der Interaktionen. Prüfen Sie das generierte Ergebnis auf tatsächliche Produktform, Anordnung und Bewegung, statt anzunehmen, dass jedes Referenzdetail unverändert erscheint.</p><p>Benennen Sie für eine Bearbeitung das vorhandene Video und das zu überarbeitende Element, etwa Umgebung, Aktion oder visuellen Stil, und geben Sie zugleich die zu bewahrende Kontinuität an. Beschreiben Sie für eine Verlängerung, wie die Szene ausgehend vom bereitgestellten Filmmaterial weitergehen soll. Prüfen Sie sowohl den Übergang als auch den neuen Abschnitt: Erscheinungsbild des Motivs, Bewegungsrichtung, Kameraposition und zeitliche Tonabstimmung beeinflussen, ob das Ergebnis als eine zusammenhängende Szene wirkt. Halten Sie das Originalvideo und die fertige Überarbeitung zusammen, damit die Änderung anhand der beabsichtigten Kontinuität geprüft werden kann.</p><p>Das dokumentierte multimodale Beispiel für 2.5 setzt generate_audio=true und fordert eine fünfzehnsekündige Sequenz im Format 16:9 an. Diese Werte beschreiben das Beispiel und kein allgemeines Dauermaximum oder Limit für Referenzmaterial. Beschreiben Sie für die angeforderte Szene die gewünschte Klanggestaltung, einschließlich des Zusammenhangs zwischen Musik, Effekten und sichtbarer Aktion, und beurteilen Sie dann die tatsächliche audiovisuelle Ausgabe. Prüfen Sie Tonreferenz und generierte Tonspur gemeinsam auf das gewünschte Tempo und die gewünschte Darbietung.</p><p>Wählen Sie Dauer, Bildformat und Auflösung aus den für dieses konkrete Profil angebotenen Einstellungen. Bewahren Sie die angeforderte Konfiguration zusammen mit dem Prompt und vergleichen Sie sie mit den tatsächlich zurückgegebenen Aufgabenfeldern. Nutzen Sie die zurückgegebene Dauer, Auflösung und das zurückgegebene Seitenverhältnis bei der Vorbereitung des fertigen Clips für seinen Verwendungszweck. Bewahren Sie die genaue Profilkennung im Überarbeitungsnachweis, damit ein späterer Vergleich dieselbe ausgewählte Edition verwendet.</p><p>Der Video-Token-Verbrauch wird wie folgt berechnet: (Dauer des Eingabevideos + Dauer des Ausgabevideos) × Ausgabebreite × Ausgabehöhe × Ausgabebildrate / 1024. Anfragen mit Eingabevideo und Anfragen ohne Eingabevideo haben unterschiedliche Abrechnungskategorien. Die Aufgabenabfrage meldet usage.completion_tokens und usage.total_tokens; bewahren Sie diese gemeldeten Mengen zusammen mit dem fertigen Clip.</p><p>Die Generierung erfolgt asynchron. Das Absenden liefert eine Kennung, und der konfigurierte Aufgabenablauf stellt den Status sowie nach erfolgreichem Abschluss content.video_url bereit. Speichern Sie den fertigen Clip zusammen mit den Ausgangsmedien und der Sequenzbeschreibung. Prüfen Sie sämtliche geplanten Handlungsschritte, Objektinteraktionen, das Erscheinungsbild der Figuren, Bildausschnitte und die Tonabstimmung im gesamten Ergebnis. Benennen Sie für eine Überarbeitung das konkrete verfehlte Detail und bewahren Sie die erfolgreichen Teile der Szene, statt den gesamten Auftrag durch unverbundene Anweisungen zu ersetzen.</p>",
  "aboutText": "Seedance 2.5 erstellt Video anhand einer schriftlich beschriebenen Szene und multimodaler Referenzen. Der genaue Selektor doubao-seedance-2-5-260628 besitzt einen eigenen dokumentierten Bedienungsablauf und ein eigenes Beispiel. Dieser Ablauf beschreibt Videoerzeugung, Videobearbeitung und Videoverlängerung mit Bildern, Video, Audio und Text als Eingabemedien. Nutzen Sie die Referenzen, um Erscheinungsbild des Motivs, Aktion, Kamerabewegung, Stil und Ton zu vermitteln, und erläutern Sie dann das daraus zu erzeugende Ergebnis.\n\nZu den Eingabekombinationen gehören Text allein, Bilder oder Video mit optionalem Text, Bilder mit Audio, Video mit Audio sowie Bilder, Video und Audio gemeinsam. Die aufgeführten Kombinationen verbinden Audio mit visuellen Medien und beschreiben keine reine Audioanfrage. Ordnen Sie jedes Element nach seiner Rolle: Ein Bild legt ein Motiv oder Erscheinungsbild fest, ein Video zeigt Bewegung oder eine bestehende Szene und Audio liefert eine Tonreferenz. Geben Sie an, welche Rolle für die angeforderte Einstellung wichtig ist, damit eine Hintergrundreferenz nicht mit der Hauptfigur verwechselt wird.\n\nDas konkrete 2.5-Beispiel ist eine Produktwerbesequenz. Es stellt ein Bild und mehrere Videoreferenzen bereit und beschreibt dann einen anfänglichen Fokus, geordnete Produktanordnungen, Detailaufnahmen, eine Zeitlupenaktion und eine abschließende Markenkomposition. Die Anfrage weist die Rollen reference_image und reference_video zu und nutzt einzelne Referenzen für Komposition, Bewegung, Kameraführung und Wirkung. Daraus ergibt sich eine praktische Struktur für ein Kampagnenkonzept: die sichtbaren Handlungsschritte planen, für jeden Schritt die Referenz benennen und die Schlussanordnung vorgeben.\n\nEine schriftliche Sequenz kann unterscheiden, was geschieht und wie es gefilmt wird. Beschreiben Sie zuerst die Produktaktion und dann Einstellungsgröße, Kameraweg, Tempo und Übergang zur nächsten Ansicht. Wenn eine Referenz das Produkt festlegt und eine andere eine Kamerabewegung zeigt, benennen Sie diese getrennten Zuständigkeiten. Erklären Sie bei einer Szene mit mehreren Objekten ihre Positionen und die Reihenfolge der Interaktionen. Prüfen Sie das generierte Ergebnis auf tatsächliche Produktform, Anordnung und Bewegung, statt anzunehmen, dass jedes Referenzdetail unverändert erscheint.\n\nBenennen Sie für eine Bearbeitung das vorhandene Video und das zu überarbeitende Element, etwa Umgebung, Aktion oder visuellen Stil, und geben Sie zugleich die zu bewahrende Kontinuität an. Beschreiben Sie für eine Verlängerung, wie die Szene ausgehend vom bereitgestellten Filmmaterial weitergehen soll. Prüfen Sie sowohl den Übergang als auch den neuen Abschnitt: Erscheinungsbild des Motivs, Bewegungsrichtung, Kameraposition und zeitliche Tonabstimmung beeinflussen, ob das Ergebnis als eine zusammenhängende Szene wirkt. Halten Sie das Originalvideo und die fertige Überarbeitung zusammen, damit die Änderung anhand der beabsichtigten Kontinuität geprüft werden kann.\n\nDas dokumentierte multimodale Beispiel für 2.5 setzt generate_audio=true und fordert eine fünfzehnsekündige Sequenz im Format 16:9 an. Diese Werte beschreiben das Beispiel und kein allgemeines Dauermaximum oder Limit für Referenzmaterial. Beschreiben Sie für die angeforderte Szene die gewünschte Klanggestaltung, einschließlich des Zusammenhangs zwischen Musik, Effekten und sichtbarer Aktion, und beurteilen Sie dann die tatsächliche audiovisuelle Ausgabe. Prüfen Sie Tonreferenz und generierte Tonspur gemeinsam auf das gewünschte Tempo und die gewünschte Darbietung.\n\nWählen Sie Dauer, Bildformat und Auflösung aus den für dieses konkrete Profil angebotenen Einstellungen. Bewahren Sie die angeforderte Konfiguration zusammen mit dem Prompt und vergleichen Sie sie mit den tatsächlich zurückgegebenen Aufgabenfeldern. Nutzen Sie die zurückgegebene Dauer, Auflösung und das zurückgegebene Seitenverhältnis bei der Vorbereitung des fertigen Clips für seinen Verwendungszweck. Bewahren Sie die genaue Profilkennung im Überarbeitungsnachweis, damit ein späterer Vergleich dieselbe ausgewählte Edition verwendet.\n\nDer Video-Token-Verbrauch wird wie folgt berechnet: (Dauer des Eingabevideos + Dauer des Ausgabevideos) × Ausgabebreite × Ausgabehöhe × Ausgabebildrate / 1024. Anfragen mit Eingabevideo und Anfragen ohne Eingabevideo haben unterschiedliche Abrechnungskategorien. Die Aufgabenabfrage meldet usage.completion_tokens und usage.total_tokens; bewahren Sie diese gemeldeten Mengen zusammen mit dem fertigen Clip.\n\nDie Generierung erfolgt asynchron. Das Absenden liefert eine Kennung, und der konfigurierte Aufgabenablauf stellt den Status sowie nach erfolgreichem Abschluss content.video_url bereit. Speichern Sie den fertigen Clip zusammen mit den Ausgangsmedien und der Sequenzbeschreibung. Prüfen Sie sämtliche geplanten Handlungsschritte, Objektinteraktionen, das Erscheinungsbild der Figuren, Bildausschnitte und die Tonabstimmung im gesamten Ergebnis. Benennen Sie für eine Überarbeitung das konkrete verfehlte Detail und bewahren Sie die erfolgreichen Teile der Szene, statt den gesamten Auftrag durch unverbundene Anweisungen zu ersetzen.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "e8b834134d28d68af3e94c4765a5f491fc92c997a4fab4c72fed6a880d57b35f",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "de",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">ByteDance: Seedance 2.5</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Schließen\">×</button></div><div class=\"idline\"><span>ByteDance /</span><code>doubao-seedance-2-5-260628</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\">Start</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|doubao-seedance-2-5-260628\">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\">Start</h3><p class=\"mdesc-full\">Seedance 2.5 erstellt Video aus Text sowie Bild-, Video- oder Audioreferenzen, mit dokumentierten Abläufen zur Bearbeitung und Verlängerung. Sein konkretes 2.5-Beispiel verbindet ein Produktbild mit mehreren Bewegungsreferenzen und aktiviert generierten Ton für eine abgestimmte Werbesequenz.</p><dl class=\"card-io\" data-card-io><div><dt>Zulässige Eingaben</dt><dd>Text · Bilder · Video · Audio</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>Seedance 2.5 erstellt Video anhand einer schriftlich beschriebenen Szene und multimodaler Referenzen. Der genaue Selektor doubao-seedance-2-5-260628 besitzt einen eigenen dokumentierten Bedienungsablauf und ein eigenes Beispiel. Dieser Ablauf beschreibt Videoerzeugung, Videobearbeitung und Videoverlängerung mit Bildern, Video, Audio und Text als Eingabemedien. Nutzen Sie die Referenzen, um Erscheinungsbild des Motivs, Aktion, Kamerabewegung, Stil und Ton zu vermitteln, und erläutern Sie dann das daraus zu erzeugende Ergebnis.</p><p>Zu den Eingabekombinationen gehören Text allein, Bilder oder Video mit optionalem Text, Bilder mit Audio, Video mit Audio sowie Bilder, Video und Audio gemeinsam. Die aufgeführten Kombinationen verbinden Audio mit visuellen Medien und beschreiben keine reine Audioanfrage. Ordnen Sie jedes Element nach seiner Rolle: Ein Bild legt ein Motiv oder Erscheinungsbild fest, ein Video zeigt Bewegung oder eine bestehende Szene und Audio liefert eine Tonreferenz. Geben Sie an, welche Rolle für die angeforderte Einstellung wichtig ist, damit eine Hintergrundreferenz nicht mit der Hauptfigur verwechselt wird.</p><p>Das konkrete 2.5-Beispiel ist eine Produktwerbesequenz. Es stellt ein Bild und mehrere Videoreferenzen bereit und beschreibt dann einen anfänglichen Fokus, geordnete Produktanordnungen, Detailaufnahmen, eine Zeitlupenaktion und eine abschließende Markenkomposition. Die Anfrage weist die Rollen reference_image und reference_video zu und nutzt einzelne Referenzen für Komposition, Bewegung, Kameraführung und Wirkung. Daraus ergibt sich eine praktische Struktur für ein Kampagnenkonzept: die sichtbaren Handlungsschritte planen, für jeden Schritt die Referenz benennen und die Schlussanordnung vorgeben.</p><p>Eine schriftliche Sequenz kann unterscheiden, was geschieht und wie es gefilmt wird. Beschreiben Sie zuerst die Produktaktion und dann Einstellungsgröße, Kameraweg, Tempo und Übergang zur nächsten Ansicht. Wenn eine Referenz das Produkt festlegt und eine andere eine Kamerabewegung zeigt, benennen Sie diese getrennten Zuständigkeiten. Erklären Sie bei einer Szene mit mehreren Objekten ihre Positionen und die Reihenfolge der Interaktionen. Prüfen Sie das generierte Ergebnis auf tatsächliche Produktform, Anordnung und Bewegung, statt anzunehmen, dass jedes Referenzdetail unverändert erscheint.</p><p>Benennen Sie für eine Bearbeitung das vorhandene Video und das zu überarbeitende Element, etwa Umgebung, Aktion oder visuellen Stil, und geben Sie zugleich die zu bewahrende Kontinuität an. Beschreiben Sie für eine Verlängerung, wie die Szene ausgehend vom bereitgestellten Filmmaterial weitergehen soll. Prüfen Sie sowohl den Übergang als auch den neuen Abschnitt: Erscheinungsbild des Motivs, Bewegungsrichtung, Kameraposition und zeitliche Tonabstimmung beeinflussen, ob das Ergebnis als eine zusammenhängende Szene wirkt. Halten Sie das Originalvideo und die fertige Überarbeitung zusammen, damit die Änderung anhand der beabsichtigten Kontinuität geprüft werden kann.</p><p>Das dokumentierte multimodale Beispiel für 2.5 setzt generate_audio=true und fordert eine fünfzehnsekündige Sequenz im Format 16:9 an. Diese Werte beschreiben das Beispiel und kein allgemeines Dauermaximum oder Limit für Referenzmaterial. Beschreiben Sie für die angeforderte Szene die gewünschte Klanggestaltung, einschließlich des Zusammenhangs zwischen Musik, Effekten und sichtbarer Aktion, und beurteilen Sie dann die tatsächliche audiovisuelle Ausgabe. Prüfen Sie Tonreferenz und generierte Tonspur gemeinsam auf das gewünschte Tempo und die gewünschte Darbietung.</p><p>Wählen Sie Dauer, Bildformat und Auflösung aus den für dieses konkrete Profil angebotenen Einstellungen. Bewahren Sie die angeforderte Konfiguration zusammen mit dem Prompt und vergleichen Sie sie mit den tatsächlich zurückgegebenen Aufgabenfeldern. Nutzen Sie die zurückgegebene Dauer, Auflösung und das zurückgegebene Seitenverhältnis bei der Vorbereitung des fertigen Clips für seinen Verwendungszweck. Bewahren Sie die genaue Profilkennung im Überarbeitungsnachweis, damit ein späterer Vergleich dieselbe ausgewählte Edition verwendet.</p><p>Der Video-Token-Verbrauch wird wie folgt berechnet: (Dauer des Eingabevideos + Dauer des Ausgabevideos) × Ausgabebreite × Ausgabehöhe × Ausgabebildrate / 1024. Anfragen mit Eingabevideo und Anfragen ohne Eingabevideo haben unterschiedliche Abrechnungskategorien. Die Aufgabenabfrage meldet usage.completion_tokens und usage.total_tokens; bewahren Sie diese gemeldeten Mengen zusammen mit dem fertigen Clip.</p><p>Die Generierung erfolgt asynchron. Das Absenden liefert eine Kennung, und der konfigurierte Aufgabenablauf stellt den Status sowie nach erfolgreichem Abschluss content.video_url bereit. Speichern Sie den fertigen Clip zusammen mit den Ausgangsmedien und der Sequenzbeschreibung. Prüfen Sie sämtliche geplanten Handlungsschritte, Objektinteraktionen, das Erscheinungsbild der Figuren, Bildausschnitte und die Tonabstimmung im gesamten Ergebnis. Benennen Sie für eine Überarbeitung das konkrete verfehlte Detail und bewahren Sie die erfolgreichen Teile der Szene, statt den gesamten Auftrag durch unverbundene Anweisungen zu ersetzen.</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 · Videogenerierung</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Eingabetypen</dt><dd><code>text</code>, <code>image</code>, <code>video</code>, <code>audio</code></dd></div><div><dt>Ausgabetypen</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>doubao-seedance-2-5-260628</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\">content</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>array</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: Native Text- und Medienobjekte; das äußere Array darf nicht leer sein. Verschachtelte Knotentypen werden von diesem generischen Ailoot-Konstruktor nicht validiert.</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\">generate_audio</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>boolean</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: Das Beispiel für 2.5 setzt true, die kopierte Beschreibung der Auswahl nennt jedoch nur 2.0/fast/1.5; weitergehende Einstellungs- oder Standardwertzusicherungen bestehen nicht.</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>Bedingungen: Der wörtliche Wert 15 im Beispiel für 2.5 ist weder ein Höchst- noch ein Standardwert.</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\">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>Bedingungen: Aus kopierten Beschreibungen werden keine für 2.5 spezifischen Standard- oder Aufzählungswerte abgeleitet.</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\">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>Bedingungen: adaptive gilt ausdrücklich nur für 2.0/fast/1.5; das Beispiel für 2.5 verwendet ausschließlich 16:9.</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\">watermark</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>boolean</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></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>false</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>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: 4.294.967.295</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>-1</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\">execution_expires_after</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: 3.600</div><div>Maximum: 259.200</div><div>Einheit: Sekunden</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>172.800</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\">service_tier</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: 2.0/fast schließen den Offline-Modus flex aus; der Geltungsbereich für 2.5 ist nicht geklärt.</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\">safety_identifier</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></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationen von Eingabematerialien</summary><p class=\"note-s\"><b></b></p><p class=\"note-s\"><b></b></p><p class=\"note-s\"><b></b></p><p class=\"note-s\"><b></b></p><p class=\"note-s\"><b></b></p><p class=\"note-s\"><b></b></p><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>content, model</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>generate_audio, duration, resolution, ratio, watermark, seed, execution_expires_after, service_tier, safety_identifier</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, image, video, audio</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 prüft die erforderlichen Feldtypen und ein nicht leeres model/content-Array. Weitere Anfragefelder bleiben für das ausgewählte Modell erhalten.</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_combinations</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>text, image, video, image, audio, image, video, video, audio, image, video, audio</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_text_with_media</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>reference_media_count_and_size_limits</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>null</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 den Auftrag einmal und bewahren Sie die zurückgegebenen öffentlichen Werte id/polling_url auf.</p><p class=\"note-s\">Fragen Sie den ursprünglichen Auftrag regelmäßig ab; laden Sie nach succeeded die tatsächlichen, Ihnen zugeordneten Inhalte unter content.video_url herunter.</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>Abrechnungseinheit</th><th>Gebühr</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Basistarife für Token</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=\"Abrechnungseinheit\"><span class=\"card-cell-label\">Abrechnungseinheit</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 Token</span></div><div><span>Ausgabe · Ausgabetoken · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Token</span></div><div><span>Eingabe · Cache-Lesen · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Token</span></div><div><span>Eingabe · Cache-Schreiben · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Token</span></div><div><span>Eingabe · Cache-Schreiben, 1 Stunde · Schätzung nur zum Vergleich</span> <b>—</b> <span class=\"price-unit\">/ 1K Token</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Eingabe mit Videoreferenz.</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>—</td><td data-cell-label=\"Abrechnungseinheit\"><span class=\"card-cell-label\">Abrechnungseinheit</span>pro 1K Video-Token</td><td data-cell-label=\"Gebühr\"><span class=\"card-cell-label\">Gebühr</span><div><span>Ausgabe · Schätzung nur zum Vergleich</span> <b>$0.012</b> <span class=\"price-unit\">pro 1K Video-Token</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Eingabe ohne Videoreferenz.</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>—</td><td data-cell-label=\"Abrechnungseinheit\"><span class=\"card-cell-label\">Abrechnungseinheit</span>pro 1K Video-Token</td><td data-cell-label=\"Gebühr\"><span class=\"card-cell-label\">Gebühr</span><div><span>Ausgabe · Schätzung nur zum Vergleich</span> <b>$0.02</b> <span class=\"price-unit\">pro 1K Video-Token</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Geschätzte Generierungskosten</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=\"Abrechnungseinheit\"><span class=\"card-cell-label\">Abrechnungseinheit</span>—</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>$0.822402</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 abschließenden Verbrauchsdatensatzes. <a href=\"/docs/de/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 · Videogenerierung</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-2781-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2781-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · Video erstellen</button><button class=\"cg-tab\" id=\"model-code-2781-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2781-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · ursprünglichen Auftrag auslesen</button><button class=\"cg-tab\" id=\"model-code-2781-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2781-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · eigenes 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-2781-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2781-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;doubao-seedance-2-5-260628&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;女孩抱着狐狸，女孩睁开眼，温柔地看向镜头，狐狸友善地抱着，镜头缓缓拉出，女孩的头发被风吹动&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-2781-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2781-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.startswith(&quot;native302_&quot;):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 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-2781-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2781-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;status&quot;)!=&quot;succeeded&quot;:raise SystemExit(&quot;Poll same original job until an owned result is returned.&quot;)\nu=r.get(&quot;content&quot;,{}).get(&quot;video_url&quot;)\nurls=[u] if isinstance(u,str) else u\nif not isinstance(urls,list) or not urls:raise SystemExit(&quot;No completed video URL.&quot;)\nfor u in urls:\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 actual Ailoot-owned signed result.&quot;)\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 · Videogenerierung</h4><p class=\"note-s\">Natives JSON mit öffentlichen Werten id/polling_url. Nach der Veröffentlichung enthält content.video_url signierte, Ailoot zugeordnete URL(s); vor der Veröffentlichung werden ausgewählte Ausgabe-URLs geleert.</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\">Bewahren Sie jede tatsächliche URL in content.video_url auf; index muss eine tatsächlich zurückgegebene Ausgabe bezeichnen.</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\">Bewahren Sie die ursprüngliche Antwort, Header und id auf und fragen Sie diesen Vorgang regelmäßig ab; übermitteln Sie eine Erstellung mit unklarem Ausgang niemals erneut.</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></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></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></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></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">status</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string when supplied</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">content.video_url</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>string|string[]</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span>object when supplied</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, ungültige Pflichtfeldtypen oder 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 Ailoot-API-Schlüssel.</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>Aufgabe/Ausgabe fehlt oder ist nicht demselben Benutzer/API-Schlüssel/derselben Gruppe zugeordnet.</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>Ursprüngliche Übermittlung/Status unvollständig; ursprüngliche ID aufbewahren, nicht erneut übermitteln.</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>Ursprüngliche Medien, Route oder Abrechnung werden geprüft; setzen Sie den ursprünglichen Vorgang fort.</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=doubao-seedance-2-5-260628&amp;route=Ultra&amp;caller=doubao-seedance-2-5-260628&amp;fmt=videos\"><code>doubao-seedance-2-5-260628</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=doubao-seedance-2-5-260628&amp;route=Ultra&amp;caller=doubao-seedance-2-5-260628&amp;fmt=videos\"><code>doubao-seedance-2-5-260628</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "doubao-seedance-2-5-260628",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "doubao-seedance-2-5-260628",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|doubao-seedance-2-5-260628",
      "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, ungültige Pflichtfeldtypen oder ungültiger Inhaltsindex.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Ungültiger Ailoot-API-Schlüssel.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Aufgabe/Ausgabe fehlt oder ist nicht demselben Benutzer/API-Schlüssel/derselben Gruppe zugeordnet.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "Ursprüngliche Übermittlung/Status unvollständig; ursprüngliche ID aufbewahren, nicht erneut übermitteln.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Ursprüngliche Medien, Route oder Abrechnung werden geprüft; setzen Sie den ursprünglichen Vorgang fort.",
                "http_status": 503,
                "type": "result_pending_check"
              }
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "succeeded"
              ],
              "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": [
                "failed",
                "expired"
              ],
              "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "queued",
                "running"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "Bewahren Sie die ursprüngliche Antwort, Header und id auf und fragen Sie diesen Vorgang regelmäßig ab; übermitteln Sie eine Erstellung mit unklarem Ausgang niemals erneut.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ],
              [
                "image"
              ],
              [
                "video"
              ],
              [
                "image",
                "audio"
              ],
              [
                "image",
                "video"
              ],
              [
                "video",
                "audio"
              ],
              [
                "image",
                "video",
                "audio"
              ]
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video",
              "multimodal_reference",
              "video_edit_via_content",
              "video_extend_via_content"
            ],
            "outputs": {
              "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
              "all_results": "Bewahren Sie jede tatsächliche URL in content.video_url auf; index muss eine tatsächlich zurückgegebene Ausgabe bezeichnen.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string when supplied"
                },
                {
                  "description": null,
                  "name": "content.video_url",
                  "type": "string|string[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "Natives JSON mit öffentlichen Werten id/polling_url. Nach der Veröffentlichung enthält content.video_url signierte, Ailoot zugeordnete URL(s); vor der Veröffentlichung werden ausgewählte Ausgabe-URLs geleert."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "doubao-seedance-2-5-260628"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Native Text- und Medienobjekte; das äußere Array darf nicht leer sein. Verschachtelte Knotentypen werden von diesem generischen Ailoot-Konstruktor nicht validiert.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minItems": 1,
                "name": "content",
                "required": true,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Das Beispiel für 2.5 setzt true, die kopierte Beschreibung der Auswahl nennt jedoch nur 2.0/fast/1.5; weitergehende Einstellungs- oder Standardwertzusicherungen bestehen nicht.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "generate_audio",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Der wörtliche Wert 15 im Beispiel für 2.5 ist weder ein Höchst- noch ein Standardwert.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "duration",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Aus kopierten Beschreibungen werden keine für 2.5 spezifischen Standard- oder Aufzählungswerte abgeleitet.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "adaptive gilt ausdrücklich nur für 2.0/fast/1.5; das Beispiel für 2.5 verwendet ausschließlich 16:9.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "watermark",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "default": -1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 4294967295,
                "minimum": -1,
                "name": "seed",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": 172800,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 259200,
                "minimum": 3600,
                "name": "execution_expires_after",
                "required": false,
                "type": "integer",
                "unit": "Sekunden"
              },
              {
                "availability": "source_interface",
                "conditions": "2.0/fast schließen den Offline-Modus flex aus; der Geltungsbereich für 2.5 ist nicht geklärt.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "service_tier",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 64,
                "name": "safety_identifier",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact model ID and documented Ailoot video interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "content": {
                  "items": {
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "duration": {
                  "type": "integer"
                },
                "execution_expires_after": {
                  "maximum": 259200,
                  "minimum": 3600,
                  "type": "integer"
                },
                "generate_audio": {
                  "type": "boolean"
                },
                "model": {
                  "const": "doubao-seedance-2-5-260628",
                  "type": "string"
                },
                "ratio": {
                  "type": "string"
                },
                "resolution": {
                  "type": "string"
                },
                "safety_identifier": {
                  "maxLength": 64,
                  "type": "string"
                },
                "seed": {
                  "maximum": 4294967295,
                  "minimum": -1,
                  "type": "integer"
                },
                "service_tier": {
                  "type": "string"
                },
                "watermark": {
                  "type": "boolean"
                }
              },
              "required": [
                "content",
                "model"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "Shared content.items.required demands image_url+role even for published text nodes; intended combinations/examples and actual outer-array validation remain distinct.",
              "return_last_frame and callback_url exist upstream but current output ownership selects content.video_url only. No owned last-frame/callback contract is asserted.",
              "2.5 duration/resolution/default/adaptive/service-tier scopes are not explicitly enumerated; no inherited 2.0 limits.",
              "2.5 generate_audio example = true conflicts with copied support-selector prose.",
              "2.5 example1 is a JSON string with trailing comma; not copied as runnable JSON.",
              "2.5 camera_fixed/frames scope unresolved; draft/tools descriptions name other models. No uncertain control added."
            ],
            "unsupported": [
              "Separate cancel/delete for this generic method",
              "Separate edit/extension endpoint for this method"
            ]
          },
          "hints": [
            "Erstellen Sie den Auftrag einmal und bewahren Sie die zurückgegebenen öffentlichen Werte id/polling_url auf.",
            "Fragen Sie den ursprünglichen Auftrag regelmäßig ab; laden Sie nach succeeded die tatsächlichen, Ihnen zugeordneten Inhalte unter content.video_url herunter."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_combinations": [
              [
                "text"
              ],
              [
                "image"
              ],
              [
                "video"
              ],
              [
                "image",
                "audio"
              ],
              [
                "image",
                "video"
              ],
              [
                "video",
                "audio"
              ],
              [
                "image",
                "video",
                "audio"
              ]
            ],
            "material_types": [
              "text",
              "image",
              "video",
              "audio"
            ],
            "optional": [
              "generate_audio",
              "duration",
              "resolution",
              "ratio",
              "watermark",
              "seed",
              "execution_expires_after",
              "service_tier",
              "safety_identifier"
            ],
            "optional_text_with_media": true,
            "reference_media_count_and_size_limits": null,
            "required": [
              "content",
              "model"
            ],
            "validation_scope": "Ailoot prüft die erforderlichen Feldtypen und ein nicht leeres model/content-Array. Weitere Anfragefelder bleiben für das ausgewählte Modell erhalten."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "succeeded"
            ],
            "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": [
              "failed",
              "expired"
            ],
            "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "queued",
              "running"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "Preserve original response/headers/id and poll that operation; never resubmit unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text",
              "image",
              "video",
              "audio"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video",
            "image_to_video",
            "multimodal_reference",
            "video_edit_via_content",
            "video_extend_via_content"
          ],
          "output": {
            "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
            "all_results": "Retain every actual URL in content.video_url; index must identify a real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": "string"
              },
              {
                "description": null,
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": null,
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": null,
                "name": "status",
                "type": "string when supplied"
              },
              {
                "description": null,
                "name": "content.video_url",
                "type": "string|string[]"
              },
              {
                "description": null,
                "name": "usage",
                "type": "object when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "Native JSON with public id/polling_url. After publication content.video_url contains Ailoot-owned signed URL(s); before publication selected output URLs are blanked."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "present"
            },
            "label": "Eingabe mit Videoreferenz.",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_with_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "absent"
            },
            "label": "Eingabe ohne Videoreferenz.",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_without_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_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 Generierungskosten",
            "units": [
              {
                "amount": "0.822402",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.822402",
                "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\":\"doubao-seedance-2-5-260628\",\"content\":[{\"type\":\"text\",\"text\":\"女孩抱着狐狸，女孩睁开眼，温柔地看向镜头，狐狸友善地抱着，镜头缓缓拉出，女孩的头发被风吹动\"}]}\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.startswith(\"native302_\"):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 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(\"status\")!=\"succeeded\":raise SystemExit(\"Poll same original job until an owned result is returned.\")\nu=r.get(\"content\",{}).get(\"video_url\")\nurls=[u] if isinstance(u,str) else u\nif not isinstance(urls,list) or not urls:raise SystemExit(\"No completed video URL.\")\nfor u in urls:\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 actual Ailoot-owned signed result.\")\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 owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain returned public id/polling_url.",
          "Poll the original job; download actual owned content.video_url after succeeded."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "video",
          "audio"
        ],
        "label": "Videogenerierung",
        "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "present"
            },
            "label": "Input contains video.",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_with_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "absent"
            },
            "label": "Input contains no video.",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_without_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_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": "0.822402",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.822402",
                "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": "doubao-seedance-2-5-260628",
        "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": "0.012000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_with_video_input",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.02000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_without_video_input",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.00002",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.822402",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.822402",
            "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": "doubao-seedance-2-5-260628",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "94e3b23bb606834017f7b7f053a2558f129aea48b9ea68b39fe781deb9b6acc5",
    "input_html_sha256": "f09075628f99d2470a951cc167510e166028816e6f137cff27a62adaffea8dfb",
    "private_audit_sha256": "6c5cc3772304419769986a6369bfd3a2bd7f31c74f6763042c019154f3c2f3c9",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/de/doubao-seedance-2-5-260628/",
    "description": "Seedance 2.5 erstellt Video aus Text sowie Bild-, Video- oder Audioreferenzen, mit dokumentierten Abläufen zur Bearbeitung und Verlängerung. Sein konkretes 2.5-Beispiel verbindet ein Produktbild mit mehreren Bewegungsreferenzen und aktiviert generierten Ton für eine abgestimmte Werbesequenz.",
    "locale": "de",
    "md_url": "https://ailoot.ai/models/de/doubao-seedance-2-5-260628/index.md",
    "title": "ByteDance: Seedance 2.5 — Ailoot",
    "url": "https://ailoot.ai/models/de/doubao-seedance-2-5-260628/"
  },
  "rawModel": {
    "about": "Seedance 2.5 erstellt Video anhand einer schriftlich beschriebenen Szene und multimodaler Referenzen. Der genaue Selektor doubao-seedance-2-5-260628 besitzt einen eigenen dokumentierten Bedienungsablauf und ein eigenes Beispiel. Dieser Ablauf beschreibt Videoerzeugung, Videobearbeitung und Videoverlängerung mit Bildern, Video, Audio und Text als Eingabemedien. Nutzen Sie die Referenzen, um Erscheinungsbild des Motivs, Aktion, Kamerabewegung, Stil und Ton zu vermitteln, und erläutern Sie dann das daraus zu erzeugende Ergebnis.\n\nZu den Eingabekombinationen gehören Text allein, Bilder oder Video mit optionalem Text, Bilder mit Audio, Video mit Audio sowie Bilder, Video und Audio gemeinsam. Die aufgeführten Kombinationen verbinden Audio mit visuellen Medien und beschreiben keine reine Audioanfrage. Ordnen Sie jedes Element nach seiner Rolle: Ein Bild legt ein Motiv oder Erscheinungsbild fest, ein Video zeigt Bewegung oder eine bestehende Szene und Audio liefert eine Tonreferenz. Geben Sie an, welche Rolle für die angeforderte Einstellung wichtig ist, damit eine Hintergrundreferenz nicht mit der Hauptfigur verwechselt wird.\n\nDas konkrete 2.5-Beispiel ist eine Produktwerbesequenz. Es stellt ein Bild und mehrere Videoreferenzen bereit und beschreibt dann einen anfänglichen Fokus, geordnete Produktanordnungen, Detailaufnahmen, eine Zeitlupenaktion und eine abschließende Markenkomposition. Die Anfrage weist die Rollen reference_image und reference_video zu und nutzt einzelne Referenzen für Komposition, Bewegung, Kameraführung und Wirkung. Daraus ergibt sich eine praktische Struktur für ein Kampagnenkonzept: die sichtbaren Handlungsschritte planen, für jeden Schritt die Referenz benennen und die Schlussanordnung vorgeben.\n\nEine schriftliche Sequenz kann unterscheiden, was geschieht und wie es gefilmt wird. Beschreiben Sie zuerst die Produktaktion und dann Einstellungsgröße, Kameraweg, Tempo und Übergang zur nächsten Ansicht. Wenn eine Referenz das Produkt festlegt und eine andere eine Kamerabewegung zeigt, benennen Sie diese getrennten Zuständigkeiten. Erklären Sie bei einer Szene mit mehreren Objekten ihre Positionen und die Reihenfolge der Interaktionen. Prüfen Sie das generierte Ergebnis auf tatsächliche Produktform, Anordnung und Bewegung, statt anzunehmen, dass jedes Referenzdetail unverändert erscheint.\n\nBenennen Sie für eine Bearbeitung das vorhandene Video und das zu überarbeitende Element, etwa Umgebung, Aktion oder visuellen Stil, und geben Sie zugleich die zu bewahrende Kontinuität an. Beschreiben Sie für eine Verlängerung, wie die Szene ausgehend vom bereitgestellten Filmmaterial weitergehen soll. Prüfen Sie sowohl den Übergang als auch den neuen Abschnitt: Erscheinungsbild des Motivs, Bewegungsrichtung, Kameraposition und zeitliche Tonabstimmung beeinflussen, ob das Ergebnis als eine zusammenhängende Szene wirkt. Halten Sie das Originalvideo und die fertige Überarbeitung zusammen, damit die Änderung anhand der beabsichtigten Kontinuität geprüft werden kann.\n\nDas dokumentierte multimodale Beispiel für 2.5 setzt generate_audio=true und fordert eine fünfzehnsekündige Sequenz im Format 16:9 an. Diese Werte beschreiben das Beispiel und kein allgemeines Dauermaximum oder Limit für Referenzmaterial. Beschreiben Sie für die angeforderte Szene die gewünschte Klanggestaltung, einschließlich des Zusammenhangs zwischen Musik, Effekten und sichtbarer Aktion, und beurteilen Sie dann die tatsächliche audiovisuelle Ausgabe. Prüfen Sie Tonreferenz und generierte Tonspur gemeinsam auf das gewünschte Tempo und die gewünschte Darbietung.\n\nWählen Sie Dauer, Bildformat und Auflösung aus den für dieses konkrete Profil angebotenen Einstellungen. Bewahren Sie die angeforderte Konfiguration zusammen mit dem Prompt und vergleichen Sie sie mit den tatsächlich zurückgegebenen Aufgabenfeldern. Nutzen Sie die zurückgegebene Dauer, Auflösung und das zurückgegebene Seitenverhältnis bei der Vorbereitung des fertigen Clips für seinen Verwendungszweck. Bewahren Sie die genaue Profilkennung im Überarbeitungsnachweis, damit ein späterer Vergleich dieselbe ausgewählte Edition verwendet.\n\nDer Video-Token-Verbrauch wird wie folgt berechnet: (Dauer des Eingabevideos + Dauer des Ausgabevideos) × Ausgabebreite × Ausgabehöhe × Ausgabebildrate / 1024. Anfragen mit Eingabevideo und Anfragen ohne Eingabevideo haben unterschiedliche Abrechnungskategorien. Die Aufgabenabfrage meldet usage.completion_tokens und usage.total_tokens; bewahren Sie diese gemeldeten Mengen zusammen mit dem fertigen Clip.\n\nDie Generierung erfolgt asynchron. Das Absenden liefert eine Kennung, und der konfigurierte Aufgabenablauf stellt den Status sowie nach erfolgreichem Abschluss content.video_url bereit. Speichern Sie den fertigen Clip zusammen mit den Ausgangsmedien und der Sequenzbeschreibung. Prüfen Sie sämtliche geplanten Handlungsschritte, Objektinteraktionen, das Erscheinungsbild der Figuren, Bildausschnitte und die Tonabstimmung im gesamten Ergebnis. Benennen Sie für eine Überarbeitung das konkrete verfehlte Detail und bewahren Sie die erfolgreichen Teile der Szene, statt den gesamten Auftrag durch unverbundene Anweisungen zu ersetzen.",
    "alias_of": null,
    "aliases": [],
    "author": "ByteDance",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image",
        "video",
        "audio"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.822402",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.822402",
            "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": "ByteDance: Seedance 2.5",
    "formats": [
      "videos"
    ],
    "id": "doubao-seedance-2-5-260628",
    "input": [
      "text",
      "image",
      "video",
      "audio"
    ],
    "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, ungültige Pflichtfeldtypen oder ungültiger Inhaltsindex.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Ungültiger Ailoot-API-Schlüssel.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "Aufgabe/Ausgabe fehlt oder ist nicht demselben Benutzer/API-Schlüssel/derselben Gruppe zugeordnet.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "Ursprüngliche Übermittlung/Status unvollständig; ursprüngliche ID aufbewahren, nicht erneut übermitteln.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "Ursprüngliche Medien, Route oder Abrechnung werden geprüft; setzen Sie den ursprünglichen Vorgang fort.",
                "http_status": 503,
                "type": "result_pending_check"
              }
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "succeeded"
              ],
              "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": [
                "failed",
                "expired"
              ],
              "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "queued",
                "running"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "Bewahren Sie die ursprüngliche Antwort, Header und id auf und fragen Sie diesen Vorgang regelmäßig ab; übermitteln Sie eine Erstellung mit unklarem Ausgang niemals erneut.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ],
              [
                "image"
              ],
              [
                "video"
              ],
              [
                "image",
                "audio"
              ],
              [
                "image",
                "video"
              ],
              [
                "video",
                "audio"
              ],
              [
                "image",
                "video",
                "audio"
              ]
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video",
              "multimodal_reference",
              "video_edit_via_content",
              "video_extend_via_content"
            ],
            "outputs": {
              "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
              "all_results": "Bewahren Sie jede tatsächliche URL in content.video_url auf; index muss eine tatsächlich zurückgegebene Ausgabe bezeichnen.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string when supplied"
                },
                {
                  "description": null,
                  "name": "content.video_url",
                  "type": "string|string[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "Natives JSON mit öffentlichen Werten id/polling_url. Nach der Veröffentlichung enthält content.video_url signierte, Ailoot zugeordnete URL(s); vor der Veröffentlichung werden ausgewählte Ausgabe-URLs geleert."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "doubao-seedance-2-5-260628"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Native Text- und Medienobjekte; das äußere Array darf nicht leer sein. Verschachtelte Knotentypen werden von diesem generischen Ailoot-Konstruktor nicht validiert.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minItems": 1,
                "name": "content",
                "required": true,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Das Beispiel für 2.5 setzt true, die kopierte Beschreibung der Auswahl nennt jedoch nur 2.0/fast/1.5; weitergehende Einstellungs- oder Standardwertzusicherungen bestehen nicht.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "generate_audio",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Der wörtliche Wert 15 im Beispiel für 2.5 ist weder ein Höchst- noch ein Standardwert.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "duration",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Aus kopierten Beschreibungen werden keine für 2.5 spezifischen Standard- oder Aufzählungswerte abgeleitet.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "adaptive gilt ausdrücklich nur für 2.0/fast/1.5; das Beispiel für 2.5 verwendet ausschließlich 16:9.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "watermark",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "default": -1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 4294967295,
                "minimum": -1,
                "name": "seed",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": 172800,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 259200,
                "minimum": 3600,
                "name": "execution_expires_after",
                "required": false,
                "type": "integer",
                "unit": "Sekunden"
              },
              {
                "availability": "source_interface",
                "conditions": "2.0/fast schließen den Offline-Modus flex aus; der Geltungsbereich für 2.5 ist nicht geklärt.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "service_tier",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 64,
                "name": "safety_identifier",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact model ID and documented Ailoot video interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "content": {
                  "items": {
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "duration": {
                  "type": "integer"
                },
                "execution_expires_after": {
                  "maximum": 259200,
                  "minimum": 3600,
                  "type": "integer"
                },
                "generate_audio": {
                  "type": "boolean"
                },
                "model": {
                  "const": "doubao-seedance-2-5-260628",
                  "type": "string"
                },
                "ratio": {
                  "type": "string"
                },
                "resolution": {
                  "type": "string"
                },
                "safety_identifier": {
                  "maxLength": 64,
                  "type": "string"
                },
                "seed": {
                  "maximum": 4294967295,
                  "minimum": -1,
                  "type": "integer"
                },
                "service_tier": {
                  "type": "string"
                },
                "watermark": {
                  "type": "boolean"
                }
              },
              "required": [
                "content",
                "model"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "Shared content.items.required demands image_url+role even for published text nodes; intended combinations/examples and actual outer-array validation remain distinct.",
              "return_last_frame and callback_url exist upstream but current output ownership selects content.video_url only. No owned last-frame/callback contract is asserted.",
              "2.5 duration/resolution/default/adaptive/service-tier scopes are not explicitly enumerated; no inherited 2.0 limits.",
              "2.5 generate_audio example = true conflicts with copied support-selector prose.",
              "2.5 example1 is a JSON string with trailing comma; not copied as runnable JSON.",
              "2.5 camera_fixed/frames scope unresolved; draft/tools descriptions name other models. No uncertain control added."
            ],
            "unsupported": [
              "Separate cancel/delete for this generic method",
              "Separate edit/extension endpoint for this method"
            ]
          },
          "hints": [
            "Erstellen Sie den Auftrag einmal und bewahren Sie die zurückgegebenen öffentlichen Werte id/polling_url auf.",
            "Fragen Sie den ursprünglichen Auftrag regelmäßig ab; laden Sie nach succeeded die tatsächlichen, Ihnen zugeordneten Inhalte unter content.video_url herunter."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_combinations": [
              [
                "text"
              ],
              [
                "image"
              ],
              [
                "video"
              ],
              [
                "image",
                "audio"
              ],
              [
                "image",
                "video"
              ],
              [
                "video",
                "audio"
              ],
              [
                "image",
                "video",
                "audio"
              ]
            ],
            "material_types": [
              "text",
              "image",
              "video",
              "audio"
            ],
            "optional": [
              "generate_audio",
              "duration",
              "resolution",
              "ratio",
              "watermark",
              "seed",
              "execution_expires_after",
              "service_tier",
              "safety_identifier"
            ],
            "optional_text_with_media": true,
            "reference_media_count_and_size_limits": null,
            "required": [
              "content",
              "model"
            ],
            "validation_scope": "Ailoot prüft die erforderlichen Feldtypen und ein nicht leeres model/content-Array. Weitere Anfragefelder bleiben für das ausgewählte Modell erhalten."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "succeeded"
            ],
            "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": [
              "failed",
              "expired"
            ],
            "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "queued",
              "running"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "Preserve original response/headers/id and poll that operation; never resubmit unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text",
              "image",
              "video",
              "audio"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video",
            "image_to_video",
            "multimodal_reference",
            "video_edit_via_content",
            "video_extend_via_content"
          ],
          "output": {
            "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
            "all_results": "Retain every actual URL in content.video_url; index must identify a real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": "string"
              },
              {
                "description": null,
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": null,
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": null,
                "name": "status",
                "type": "string when supplied"
              },
              {
                "description": null,
                "name": "content.video_url",
                "type": "string|string[]"
              },
              {
                "description": null,
                "name": "usage",
                "type": "object when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "Native JSON with public id/polling_url. After publication content.video_url contains Ailoot-owned signed URL(s); before publication selected output URLs are blanked."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "present"
            },
            "label": "Eingabe mit Videoreferenz.",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_with_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "absent"
            },
            "label": "Eingabe ohne Videoreferenz.",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_without_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_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 Generierungskosten",
            "units": [
              {
                "amount": "0.822402",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.822402",
                "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\":\"doubao-seedance-2-5-260628\",\"content\":[{\"type\":\"text\",\"text\":\"女孩抱着狐狸，女孩睁开眼，温柔地看向镜头，狐狸友善地抱着，镜头缓缓拉出，女孩的头发被风吹动\"}]}\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.startswith(\"native302_\"):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 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(\"status\")!=\"succeeded\":raise SystemExit(\"Poll same original job until an owned result is returned.\")\nu=r.get(\"content\",{}).get(\"video_url\")\nurls=[u] if isinstance(u,str) else u\nif not isinstance(urls,list) or not urls:raise SystemExit(\"No completed video URL.\")\nfor u in urls:\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 actual Ailoot-owned signed result.\")\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 owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain returned public id/polling_url.",
          "Poll the original job; download actual owned content.video_url after succeeded."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "video",
          "audio"
        ],
        "label": "Videogenerierung",
        "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "present"
            },
            "label": "Input contains video.",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_with_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per 1,000 video tokens",
              "video_input": "absent"
            },
            "label": "Input contains no video.",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_without_video_input",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_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": "0.822402",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.822402",
                "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": "doubao-seedance-2-5-260628",
        "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": "0.012000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_with_video_input",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.02000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_without_video_input",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.00002",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.822402",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.822402",
            "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": "doubao-seedance-2-5-260628",
        "request_model_id": "doubao-seedance-2-5-260628",
        "route_label": "Ultra"
      }
    ],
    "name": "ByteDance: Seedance 2.5",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.822402,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.822402,
      "varies": false
    },
    "short": "Seedance 2.5 erstellt Video aus Text sowie Bild-, Video- oder Audioreferenzen, mit dokumentierten Abläufen zur Bearbeitung und Verlängerung. Sein konkretes 2.5-Beispiel verbindet ein Produktbild mit mehreren Bewegungsreferenzen und aktiviert generierten Ton für eine abgestimmte Werbesequenz."
  },
  "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": "Seedance 2.5 erstellt Video aus Text sowie Bild-, Video- oder Audioreferenzen, mit dokumentierten Abläufen zur Bearbeitung und Verlängerung. Sein konkretes 2.5-Beispiel verbindet ein Produktbild mit mehreren Bewegungsreferenzen und aktiviert generierten Ton für eine abgestimmte Werbesequenz.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "247d4dc11217ad2d8ba62140cc1b21343a1219cd10be800c813e4cc962adfa5d",
    "renderer_sha256": "8bd3076b303b7b3aa4d961032854071403a471ec26a4f50c64e3a32556ea2925"
  },
  "sourceRevision": "72704e903301dbde5a8557a80149cb18cd96eff7072f4376ee7b868791414708"
}
