{
  "aboutHtml": "<p>S2.1 Pro ist Fish Audios späteres Text-to-Speech-Modell der S2-Generation für ausdrucksstarke Sprecheraufnahmen und dialogorientierte Sprachanwendungen. Es verbessert Sprachqualität, Latenz und Durchsatz gegenüber S2 Pro und behält natürlichsprachliche Vortragssteuerung und native Dialoge mit mehreren Sprechenden bei. S2.1 Pro und S2.1 Pro Free teilen sich das zugrunde liegende Sprachmodell.</p><p>Stellen Sie für eine eingesprochene Erklärung den fertigen Wortlaut, die beabsichtigte Stimme und die Stellen bereit, an denen Geschwindigkeit oder Betonung wechseln sollen. Synthetisieren Sie für eine Gesprächsanwendung die von der Anwendung gewählte Antwort und halten Sie ihren sachlichen Inhalt von den Vortragsanweisungen getrennt. Definieren Sie für einen geskripteten Austausch die Sprechenden und ihre Stimmen, bevor Sie ihre Beiträge schreiben. Ein nützliches Ergebnis ist eine vollständige Audiopassage oder ein abspielbarer Stream, dessen Wörter, Vortrag und Sprecherrollen diesem Briefing entsprechen.</p><p>Schreiben Sie die Wörter, die tatsächlich gesprochen werden sollen, und setzen Sie eine Anweisung unmittelbar vor die Passage, deren Vortrag sich ändern soll. Anweisungen in eckigen Klammern können Flüstern, eine Pause, eine Reaktion, Betonung oder einen frei beschriebenen Sprechstil ausdrücken. Platzieren Sie einen Wechsel mitten im Satz genau dort, wo der Vortrag ihn benötigt, und lassen Sie auf beschreibende Anweisungen tatsächlichen Sprechtext folgen. Ein nützliches Briefing für eine Erklärung trennt den sachlichen Wortlaut von der gewünschten Wärme, Geschwindigkeit oder Betonung für die Zuhörenden.</p><p>Wählen Sie für eine einzelne sprechende Person eine gespeicherte Stimmenkennung aus oder stellen Sie eine Referenzaufnahme mit ihrer Transkription bereit. Der Sprachleitfaden des Herstellers empfiehlt eine saubere Probe von 10–30 Sekunden für die sofortige Stimmenkonditionierung. Wählen Sie eine Referenz mit dem zum Skript passenden Tonfall und der geeigneten Aufnahmequalität und behalten Sie dieselbe Referenz über zusammengehörige Passagen hinweg bei. Die Stimmenreferenz liefert den Klang der sprechenden Person; der Text und die darin eingefügten Anweisungen liefern Inhalt und Vortrag.</p><p>Die native Synthese mit mehreren Sprechenden verwendet Markierungen wie &lt;|speaker:0|&gt; und &lt;|speaker:1|&gt; zusammen mit einem geordneten Array von Stimmenkennungen oder separaten Referenzgruppen. Halten Sie die numerischen Sprecherbezeichnungen mit dieser Reihenfolge in Einklang. Schreiben Sie für einen erklärenden Dialog die jeweilige Sprecherzeile und setzen Sie die Vortragsanweisung hinter die zugehörige Sprechermarkierung. So entsteht innerhalb einer Anfrage ein Dialog; dies unterscheidet sich vom Ablauf bei S1 mit getrennten Segmenten für jeweils eine sprechende Person und anschließender Zusammenführung.</p><p>Der Ablauf des Herstellers bietet MP3, WAV, rohes PCM und Opus als Ausgabeformate; MP3 ist die Voreinstellung. MP3 unterstützt 64, 128 und 192 kbps; WAV und PCM verwenden die dokumentierten 16-Bit-Mono-Abtastformate, während Opus mit 48 kHz arbeitet. Wählen Sie das Format für eine gespeicherte Sprecherdatei, die Wiedergabe als Stream oder eine nachgelagerte Audiopipeline. Bewahren Sie das vollständige Skript und die Stimmenauswahl gemeinsam mit dem Audio auf, damit eine spätere Bearbeitung eine einzelne Zeile ändern kann, ohne den beabsichtigten Vortrag zu verlieren.</p><p>Die Geschwindigkeit lässt sich von 0.5 bis 2.0 anpassen; außerdem gibt es Lautstärkeregler. Die Textnormalisierung schreibt englische und chinesische Zahlen für eine natürliche Aussprache aus. Die Normalisierung der Ausgabelautheit ist standardmäßig auf true gesetzt und wird auf die S2-Familie angewendet; bei S1 hatte dasselbe Feld keine Wirkung. repetition_penalty aus S1 verändert das Audio von S2.1 Pro nicht, daher sollte eine alte Einstellung nicht als wirksamer Regler für dieses Modell betrachtet werden. Prüfen Sie wiederholte Laute und Wörter direkt, statt das Ergebnis anhand eines übernommenen Parameters zu beurteilen.</p><p>Längere Skripte werden in Abschnitten verarbeitet. Der dokumentierte Bereich für die Abschnittslänge beträgt 100–300, und max_new_tokens ist ein Audiotoken-Budget pro Abschnitt statt einer Garantie für die Gesamtdauer. Die Konditionierung anhand des vorigen Abschnitts kann den Stimmenkontext weitertragen. Der Auslieferungsablauf des Herstellers beschreibt vollständiges Audio, schrittweise gelieferte Audioabschnitte und Live-Textstreaming, wenn das Skript nach und nach eintrifft. Wählen Sie die Art der Audionutzung passend zur Anwendung und erhalten Sie genug Skriptkontext für Aussprache und Tonfall der nächsten Passage.</p><p>Hören Sie für ein nützliches fertiges Ergebnis auf ausgelassene oder wiederholte Wörter, die Aussprache von Zahlen, Sprecherwechsel, Pausen und die Intensität der Anweisungen. Verschiedene Stimmenreferenzen können eine Anweisung unterschiedlich stark umsetzen; beginnen Sie daher mit einer einfachen angeleiteten Zeile, bevor Sie konkurrierende Tags hinzufügen. Stellen Sie bei mehrsprachigen Aufgaben das Skript in der Zielsprache bereit, statt vom Sprachmodell zu erwarten, dass es dessen Inhalt erfindet oder übersetzt. Eine gezielte Überarbeitung ändert die für die Abweichung verantwortliche Zeile, Anweisung oder Referenz und erhält die bereits zum Briefing passenden Teile des Vortrags.</p>",
  "aboutText": "S2.1 Pro ist Fish Audios späteres Text-to-Speech-Modell der S2-Generation für ausdrucksstarke Sprecheraufnahmen und dialogorientierte Sprachanwendungen. Es verbessert Sprachqualität, Latenz und Durchsatz gegenüber S2 Pro und behält natürlichsprachliche Vortragssteuerung und native Dialoge mit mehreren Sprechenden bei. S2.1 Pro und S2.1 Pro Free teilen sich das zugrunde liegende Sprachmodell.\n\nStellen Sie für eine eingesprochene Erklärung den fertigen Wortlaut, die beabsichtigte Stimme und die Stellen bereit, an denen Geschwindigkeit oder Betonung wechseln sollen. Synthetisieren Sie für eine Gesprächsanwendung die von der Anwendung gewählte Antwort und halten Sie ihren sachlichen Inhalt von den Vortragsanweisungen getrennt. Definieren Sie für einen geskripteten Austausch die Sprechenden und ihre Stimmen, bevor Sie ihre Beiträge schreiben. Ein nützliches Ergebnis ist eine vollständige Audiopassage oder ein abspielbarer Stream, dessen Wörter, Vortrag und Sprecherrollen diesem Briefing entsprechen.\n\nSchreiben Sie die Wörter, die tatsächlich gesprochen werden sollen, und setzen Sie eine Anweisung unmittelbar vor die Passage, deren Vortrag sich ändern soll. Anweisungen in eckigen Klammern können Flüstern, eine Pause, eine Reaktion, Betonung oder einen frei beschriebenen Sprechstil ausdrücken. Platzieren Sie einen Wechsel mitten im Satz genau dort, wo der Vortrag ihn benötigt, und lassen Sie auf beschreibende Anweisungen tatsächlichen Sprechtext folgen. Ein nützliches Briefing für eine Erklärung trennt den sachlichen Wortlaut von der gewünschten Wärme, Geschwindigkeit oder Betonung für die Zuhörenden.\n\nWählen Sie für eine einzelne sprechende Person eine gespeicherte Stimmenkennung aus oder stellen Sie eine Referenzaufnahme mit ihrer Transkription bereit. Der Sprachleitfaden des Herstellers empfiehlt eine saubere Probe von 10–30 Sekunden für die sofortige Stimmenkonditionierung. Wählen Sie eine Referenz mit dem zum Skript passenden Tonfall und der geeigneten Aufnahmequalität und behalten Sie dieselbe Referenz über zusammengehörige Passagen hinweg bei. Die Stimmenreferenz liefert den Klang der sprechenden Person; der Text und die darin eingefügten Anweisungen liefern Inhalt und Vortrag.\n\nDie native Synthese mit mehreren Sprechenden verwendet Markierungen wie <|speaker:0|> und <|speaker:1|> zusammen mit einem geordneten Array von Stimmenkennungen oder separaten Referenzgruppen. Halten Sie die numerischen Sprecherbezeichnungen mit dieser Reihenfolge in Einklang. Schreiben Sie für einen erklärenden Dialog die jeweilige Sprecherzeile und setzen Sie die Vortragsanweisung hinter die zugehörige Sprechermarkierung. So entsteht innerhalb einer Anfrage ein Dialog; dies unterscheidet sich vom Ablauf bei S1 mit getrennten Segmenten für jeweils eine sprechende Person und anschließender Zusammenführung.\n\nDer Ablauf des Herstellers bietet MP3, WAV, rohes PCM und Opus als Ausgabeformate; MP3 ist die Voreinstellung. MP3 unterstützt 64, 128 und 192 kbps; WAV und PCM verwenden die dokumentierten 16-Bit-Mono-Abtastformate, während Opus mit 48 kHz arbeitet. Wählen Sie das Format für eine gespeicherte Sprecherdatei, die Wiedergabe als Stream oder eine nachgelagerte Audiopipeline. Bewahren Sie das vollständige Skript und die Stimmenauswahl gemeinsam mit dem Audio auf, damit eine spätere Bearbeitung eine einzelne Zeile ändern kann, ohne den beabsichtigten Vortrag zu verlieren.\n\nDie Geschwindigkeit lässt sich von 0.5 bis 2.0 anpassen; außerdem gibt es Lautstärkeregler. Die Textnormalisierung schreibt englische und chinesische Zahlen für eine natürliche Aussprache aus. Die Normalisierung der Ausgabelautheit ist standardmäßig auf true gesetzt und wird auf die S2-Familie angewendet; bei S1 hatte dasselbe Feld keine Wirkung. repetition_penalty aus S1 verändert das Audio von S2.1 Pro nicht, daher sollte eine alte Einstellung nicht als wirksamer Regler für dieses Modell betrachtet werden. Prüfen Sie wiederholte Laute und Wörter direkt, statt das Ergebnis anhand eines übernommenen Parameters zu beurteilen.\n\nLängere Skripte werden in Abschnitten verarbeitet. Der dokumentierte Bereich für die Abschnittslänge beträgt 100–300, und max_new_tokens ist ein Audiotoken-Budget pro Abschnitt statt einer Garantie für die Gesamtdauer. Die Konditionierung anhand des vorigen Abschnitts kann den Stimmenkontext weitertragen. Der Auslieferungsablauf des Herstellers beschreibt vollständiges Audio, schrittweise gelieferte Audioabschnitte und Live-Textstreaming, wenn das Skript nach und nach eintrifft. Wählen Sie die Art der Audionutzung passend zur Anwendung und erhalten Sie genug Skriptkontext für Aussprache und Tonfall der nächsten Passage.\n\nHören Sie für ein nützliches fertiges Ergebnis auf ausgelassene oder wiederholte Wörter, die Aussprache von Zahlen, Sprecherwechsel, Pausen und die Intensität der Anweisungen. Verschiedene Stimmenreferenzen können eine Anweisung unterschiedlich stark umsetzen; beginnen Sie daher mit einer einfachen angeleiteten Zeile, bevor Sie konkurrierende Tags hinzufügen. Stellen Sie bei mehrsprachigen Aufgaben das Skript in der Zielsprache bereit, statt vom Sprachmodell zu erwarten, dass es dessen Inhalt erfindet oder übersetzt. Eine gezielte Überarbeitung ändert die für die Abweichung verantwortliche Zeile, Anweisung oder Referenz und erhält die bereits zum Briefing passenden Teile des Vortrags.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "c952a61c67e23ff2ce9baed3a4640ade6155fde726d5ea7c4b55ae9e79bca81e",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "de-at",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: S2.1 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Schließen\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/s2.1-pro</code><button type=\"button\" id=\"copy-id\">ID kopieren</button></div><nav class=\"card-jump-nav\" aria-label=\"Bereiche der Modellkarte\"><button type=\"button\" data-card-jump=\"overview\">Einstieg</button><button type=\"button\" data-card-jump=\"methods\">Eingaben und Methoden</button><button type=\"button\" data-card-jump=\"pricing\">Tarife</button><button type=\"button\" data-card-jump=\"examples\">Beispiele</button><button type=\"button\" data-card-jump=\"results\">Ergebnisse</button><button type=\"button\" data-card-jump=\"aliases\">Aliasnamen</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-Methoden\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|fish-audio%2Fs2.1-pro\">Sprachausgabe</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Einstieg</h3><p class=\"mdesc-full\">Fish Audio S2.1 Pro erzeugt ausdrucksstarke mehrsprachige Sprache und native Dialoge mit mehreren Sprechenden und verbessert Qualität, Latenz und Durchsatz gegenüber S2 Pro. Steuern Sie den Vortrag im Skript und nutzen Sie Stimmenreferenzen für Sprecheraufnahmen oder Gesprächsaudio.</p><dl class=\"card-io\" data-card-io><div><dt>Zulässige Eingaben</dt><dd>Text</dd></div><div><dt>Ergebnisse</dt><dd>Audio</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>S2.1 Pro ist Fish Audios späteres Text-to-Speech-Modell der S2-Generation für ausdrucksstarke Sprecheraufnahmen und dialogorientierte Sprachanwendungen. Es verbessert Sprachqualität, Latenz und Durchsatz gegenüber S2 Pro und behält natürlichsprachliche Vortragssteuerung und native Dialoge mit mehreren Sprechenden bei. S2.1 Pro und S2.1 Pro Free teilen sich das zugrunde liegende Sprachmodell.</p><p>Stellen Sie für eine eingesprochene Erklärung den fertigen Wortlaut, die beabsichtigte Stimme und die Stellen bereit, an denen Geschwindigkeit oder Betonung wechseln sollen. Synthetisieren Sie für eine Gesprächsanwendung die von der Anwendung gewählte Antwort und halten Sie ihren sachlichen Inhalt von den Vortragsanweisungen getrennt. Definieren Sie für einen geskripteten Austausch die Sprechenden und ihre Stimmen, bevor Sie ihre Beiträge schreiben. Ein nützliches Ergebnis ist eine vollständige Audiopassage oder ein abspielbarer Stream, dessen Wörter, Vortrag und Sprecherrollen diesem Briefing entsprechen.</p><p>Schreiben Sie die Wörter, die tatsächlich gesprochen werden sollen, und setzen Sie eine Anweisung unmittelbar vor die Passage, deren Vortrag sich ändern soll. Anweisungen in eckigen Klammern können Flüstern, eine Pause, eine Reaktion, Betonung oder einen frei beschriebenen Sprechstil ausdrücken. Platzieren Sie einen Wechsel mitten im Satz genau dort, wo der Vortrag ihn benötigt, und lassen Sie auf beschreibende Anweisungen tatsächlichen Sprechtext folgen. Ein nützliches Briefing für eine Erklärung trennt den sachlichen Wortlaut von der gewünschten Wärme, Geschwindigkeit oder Betonung für die Zuhörenden.</p><p>Wählen Sie für eine einzelne sprechende Person eine gespeicherte Stimmenkennung aus oder stellen Sie eine Referenzaufnahme mit ihrer Transkription bereit. Der Sprachleitfaden des Herstellers empfiehlt eine saubere Probe von 10–30 Sekunden für die sofortige Stimmenkonditionierung. Wählen Sie eine Referenz mit dem zum Skript passenden Tonfall und der geeigneten Aufnahmequalität und behalten Sie dieselbe Referenz über zusammengehörige Passagen hinweg bei. Die Stimmenreferenz liefert den Klang der sprechenden Person; der Text und die darin eingefügten Anweisungen liefern Inhalt und Vortrag.</p><p>Die native Synthese mit mehreren Sprechenden verwendet Markierungen wie &lt;|speaker:0|&gt; und &lt;|speaker:1|&gt; zusammen mit einem geordneten Array von Stimmenkennungen oder separaten Referenzgruppen. Halten Sie die numerischen Sprecherbezeichnungen mit dieser Reihenfolge in Einklang. Schreiben Sie für einen erklärenden Dialog die jeweilige Sprecherzeile und setzen Sie die Vortragsanweisung hinter die zugehörige Sprechermarkierung. So entsteht innerhalb einer Anfrage ein Dialog; dies unterscheidet sich vom Ablauf bei S1 mit getrennten Segmenten für jeweils eine sprechende Person und anschließender Zusammenführung.</p><p>Der Ablauf des Herstellers bietet MP3, WAV, rohes PCM und Opus als Ausgabeformate; MP3 ist die Voreinstellung. MP3 unterstützt 64, 128 und 192 kbps; WAV und PCM verwenden die dokumentierten 16-Bit-Mono-Abtastformate, während Opus mit 48 kHz arbeitet. Wählen Sie das Format für eine gespeicherte Sprecherdatei, die Wiedergabe als Stream oder eine nachgelagerte Audiopipeline. Bewahren Sie das vollständige Skript und die Stimmenauswahl gemeinsam mit dem Audio auf, damit eine spätere Bearbeitung eine einzelne Zeile ändern kann, ohne den beabsichtigten Vortrag zu verlieren.</p><p>Die Geschwindigkeit lässt sich von 0.5 bis 2.0 anpassen; außerdem gibt es Lautstärkeregler. Die Textnormalisierung schreibt englische und chinesische Zahlen für eine natürliche Aussprache aus. Die Normalisierung der Ausgabelautheit ist standardmäßig auf true gesetzt und wird auf die S2-Familie angewendet; bei S1 hatte dasselbe Feld keine Wirkung. repetition_penalty aus S1 verändert das Audio von S2.1 Pro nicht, daher sollte eine alte Einstellung nicht als wirksamer Regler für dieses Modell betrachtet werden. Prüfen Sie wiederholte Laute und Wörter direkt, statt das Ergebnis anhand eines übernommenen Parameters zu beurteilen.</p><p>Längere Skripte werden in Abschnitten verarbeitet. Der dokumentierte Bereich für die Abschnittslänge beträgt 100–300, und max_new_tokens ist ein Audiotoken-Budget pro Abschnitt statt einer Garantie für die Gesamtdauer. Die Konditionierung anhand des vorigen Abschnitts kann den Stimmenkontext weitertragen. Der Auslieferungsablauf des Herstellers beschreibt vollständiges Audio, schrittweise gelieferte Audioabschnitte und Live-Textstreaming, wenn das Skript nach und nach eintrifft. Wählen Sie die Art der Audionutzung passend zur Anwendung und erhalten Sie genug Skriptkontext für Aussprache und Tonfall der nächsten Passage.</p><p>Hören Sie für ein nützliches fertiges Ergebnis auf ausgelassene oder wiederholte Wörter, die Aussprache von Zahlen, Sprecherwechsel, Pausen und die Intensität der Anweisungen. Verschiedene Stimmenreferenzen können eine Anweisung unterschiedlich stark umsetzen; beginnen Sie daher mit einer einfachen angeleiteten Zeile, bevor Sie konkurrierende Tags hinzufügen. Stellen Sie bei mehrsprachigen Aufgaben das Skript in der Zielsprache bereit, statt vom Sprachmodell zu erwarten, dass es dessen Inhalt erfindet oder übersetzt. Eine gezielte Überarbeitung ändert die für die Abweichung verantwortliche Zeile, Anweisung oder Referenz und erhält die bereits zum Briefing passenden Teile des Vortrags.</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 · Sprache</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Eingabe</dt><dd><code>text</code></dd></div><div><dt>Ausgabe</dt><dd><code>audio</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><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>fish-audio/s2.1-pro</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">input</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>Mindestlänge: 1</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">voice</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>b347db033a6549378b48d00acb0d06cd</div><div>Mindestlänge: 1</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">response_format</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>mp3, pcm</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>pcm</td></tr><tr><th data-cell-label=\"Feld\" scope=\"row\"><span class=\"card-cell-label\">Feld</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Typ\" data-field-type><span class=\"card-cell-label\">Typ</span><code>object</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=\"note-s\" data-method-contract><summary>Methodenparameter und Lebenszyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Vertrag</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>model, input, voice</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Vertrag\"><span class=\"card-cell-label\">Vertrag</span>text</td></tr></tbody></table></div><p>Lebenszyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · die tatsächlich zurückgegebene task_id oder ein Eintrag in der Medienbibliothek</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarife</h3><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>Ailoot-Tarife</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>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 Tokens</th><td data-cell-label=\"Tarifstaffel\"><span class=\"card-cell-label\">Tarifstaffel</span>Grundtarif</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</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Ausgabe · Ausgabetoken</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Eingabe · Cache lesen</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Eingabe · In Cache schreiben</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div><div><span>Eingabe · In Cache schreiben, 1 Stunde</span> <b>—</b> <span class=\"price-unit\">/ 1K Tokens</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>UTF-8-Eingabebyte</th><td data-cell-label=\"Tarifstaffel\"><span class=\"card-cell-label\">Tarifstaffel</span>—</td><td data-cell-label=\"Abrechnungseinheit\"><span class=\"card-cell-label\">Abrechnungseinheit</span>pro UTF-8-Byte der Eingabe</td><td data-cell-label=\"Gebühr\"><span class=\"card-cell-label\">Gebühr</span><div><span>Eingabe · UTF-8-Eingabebyte</span> <b>$0.00003</b> <span class=\"price-unit\">pro UTF-8-Byte der Eingabe</span></div></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-at/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 · Sprache</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-1357-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1357-panel-0\" aria-selected=\"true\" tabindex=\"0\">Echte Eingabedaten verwenden und das vollständige Ergebnis speichern</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-1357-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1357-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_TEXT:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_TEXT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;fish-audio/s2.1-pro&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;b347db033a6549378b48d00acb0d06cd&#39;, &#39;response_format&#39;: &#39;mp3&#39;}\nrequest[&#39;input&#39;]=os.environ[&#39;AILOOT_INPUT_TEXT&#39;]\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\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 · Sprache</h4><p class=\"note-s\">Vollständiges binäres Audio oder ursprüngliche audio_url-Antwort, Header und jedes Ihnen zugeordnete Asset.</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>Abrufe anderer Inhalte</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Codevarianten\"><button class=\"cg-tab\" id=\"model-code-1358-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1358-panel-0\" aria-selected=\"true\" tabindex=\"0\">Vorhandene eigene Dateien abrufen</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-1358-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1358-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Alle fertiggestellten Ergebnisse aufbewahren</h5><p class=\"note-s\">Bewahren Sie jede vollständig zurückgegebene Antwort, Datei und jeden Inhaltsteil auf.</p><p class=\"note-s\">Die vollständige Antwort und ihre Header, jede tatsächliche Ausgabe, die ursprünglich zurückgegebenen Kennungen und alle Nutzungsfelder aufbewahren. Den ursprünglichen Vorgang wiederaufnehmen, ohne die Erstellung erneut anzufordern.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Wenn die ursprüngliche Antwort geprüft werden muss</h5><p class=\"note-s\">Die zurückgegebene X-Client-Request-ID zum Abgleich aufbewahren. Nur tatsächlich zurückgegebene task_id-/asset_id-Werte oder die eigene Medienbibliothek abfragen; niemals eine Aufgaben-URL aus der Vorgangs-ID bilden und die Erstellung niemals erneut anfordern.</p></div></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=fish-audio%2Fs2.1-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro&amp;fmt=speech\"><code>fish-audio/s2.1-pro</code></a></span></p><h4>Aliasnamen für Methodenpfade</h4><p class=\"note-s\">Verwenden Sie die oben angezeigten Methodenpfade.</p><h4>Zugehörige Aufrufer-IDs</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Fs2.1-pro&amp;route=Ultra&amp;caller=fish-audio%2Fs2.1-pro&amp;fmt=speech\"><code>fish-audio/s2.1-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s2.1-pro",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs2.1-pro",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Die zurückgegebene X-Client-Request-ID zum Abgleich aufbewahren. Nur tatsächlich zurückgegebene task_id-/asset_id-Werte oder die eigene Medienbibliothek abfragen; niemals eine Aufgaben-URL aus der Vorgangs-ID bilden und die Erstellung niemals erneut anfordern."
            },
            "outputs": {
              "all_results": "Die vollständige Antwort und ihre Header, jede tatsächliche Ausgabe, die ursprünglich zurückgegebenen Kennungen und alle Nutzungsfelder aufbewahren. Den ursprünglichen Vorgang wiederaufnehmen, ohne die Erstellung erneut anzufordern.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Vollständiges binäres Audio oder ursprüngliche audio_url-Antwort, Header und jedes Ihnen zugeordnete Asset."
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2.1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2.1-pro"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2.1-pro",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "die tatsächlich zurückgegebene task_id oder ein Eintrag in der Medienbibliothek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2.1-pro', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Sprache",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "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": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s2.1-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "36b9b5e6effdd3efc1a832c61fcffc2f6741d547f1146077a61df585f140f376",
    "input_html_sha256": "569f1ba4a2fe6b529cb69560ea84f661b9903c3f4602d11b75b585efa4a18914",
    "private_audit_sha256": "2a45db10a3a28235e56b791cb29629c4e3d815f79a818a2d7dfc674959ee5583",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/de-at/fish-audio-s2-1-pro/",
    "description": "Fish Audio S2.1 Pro erzeugt ausdrucksstarke mehrsprachige Sprache und native Dialoge mit mehreren Sprechenden und verbessert Qualität, Latenz und Durchsatz gegenüber S2 Pro. Steuern Sie den Vortrag im Skript und nutzen Sie Stimmenreferenzen für Sprecheraufnahmen oder Gesprächsaudio.",
    "locale": "de-at",
    "md_url": "https://ailoot.ai/models/de-at/fish-audio-s2-1-pro/index.md",
    "title": "Fish Audio: S2.1 Pro — Ailoot",
    "url": "https://ailoot.ai/models/de-at/fish-audio-s2-1-pro/"
  },
  "rawModel": {
    "about": "S2.1 Pro ist Fish Audios späteres Text-to-Speech-Modell der S2-Generation für ausdrucksstarke Sprecheraufnahmen und dialogorientierte Sprachanwendungen. Es verbessert Sprachqualität, Latenz und Durchsatz gegenüber S2 Pro und behält natürlichsprachliche Vortragssteuerung und native Dialoge mit mehreren Sprechenden bei. S2.1 Pro und S2.1 Pro Free teilen sich das zugrunde liegende Sprachmodell.\n\nStellen Sie für eine eingesprochene Erklärung den fertigen Wortlaut, die beabsichtigte Stimme und die Stellen bereit, an denen Geschwindigkeit oder Betonung wechseln sollen. Synthetisieren Sie für eine Gesprächsanwendung die von der Anwendung gewählte Antwort und halten Sie ihren sachlichen Inhalt von den Vortragsanweisungen getrennt. Definieren Sie für einen geskripteten Austausch die Sprechenden und ihre Stimmen, bevor Sie ihre Beiträge schreiben. Ein nützliches Ergebnis ist eine vollständige Audiopassage oder ein abspielbarer Stream, dessen Wörter, Vortrag und Sprecherrollen diesem Briefing entsprechen.\n\nSchreiben Sie die Wörter, die tatsächlich gesprochen werden sollen, und setzen Sie eine Anweisung unmittelbar vor die Passage, deren Vortrag sich ändern soll. Anweisungen in eckigen Klammern können Flüstern, eine Pause, eine Reaktion, Betonung oder einen frei beschriebenen Sprechstil ausdrücken. Platzieren Sie einen Wechsel mitten im Satz genau dort, wo der Vortrag ihn benötigt, und lassen Sie auf beschreibende Anweisungen tatsächlichen Sprechtext folgen. Ein nützliches Briefing für eine Erklärung trennt den sachlichen Wortlaut von der gewünschten Wärme, Geschwindigkeit oder Betonung für die Zuhörenden.\n\nWählen Sie für eine einzelne sprechende Person eine gespeicherte Stimmenkennung aus oder stellen Sie eine Referenzaufnahme mit ihrer Transkription bereit. Der Sprachleitfaden des Herstellers empfiehlt eine saubere Probe von 10–30 Sekunden für die sofortige Stimmenkonditionierung. Wählen Sie eine Referenz mit dem zum Skript passenden Tonfall und der geeigneten Aufnahmequalität und behalten Sie dieselbe Referenz über zusammengehörige Passagen hinweg bei. Die Stimmenreferenz liefert den Klang der sprechenden Person; der Text und die darin eingefügten Anweisungen liefern Inhalt und Vortrag.\n\nDie native Synthese mit mehreren Sprechenden verwendet Markierungen wie <|speaker:0|> und <|speaker:1|> zusammen mit einem geordneten Array von Stimmenkennungen oder separaten Referenzgruppen. Halten Sie die numerischen Sprecherbezeichnungen mit dieser Reihenfolge in Einklang. Schreiben Sie für einen erklärenden Dialog die jeweilige Sprecherzeile und setzen Sie die Vortragsanweisung hinter die zugehörige Sprechermarkierung. So entsteht innerhalb einer Anfrage ein Dialog; dies unterscheidet sich vom Ablauf bei S1 mit getrennten Segmenten für jeweils eine sprechende Person und anschließender Zusammenführung.\n\nDer Ablauf des Herstellers bietet MP3, WAV, rohes PCM und Opus als Ausgabeformate; MP3 ist die Voreinstellung. MP3 unterstützt 64, 128 und 192 kbps; WAV und PCM verwenden die dokumentierten 16-Bit-Mono-Abtastformate, während Opus mit 48 kHz arbeitet. Wählen Sie das Format für eine gespeicherte Sprecherdatei, die Wiedergabe als Stream oder eine nachgelagerte Audiopipeline. Bewahren Sie das vollständige Skript und die Stimmenauswahl gemeinsam mit dem Audio auf, damit eine spätere Bearbeitung eine einzelne Zeile ändern kann, ohne den beabsichtigten Vortrag zu verlieren.\n\nDie Geschwindigkeit lässt sich von 0.5 bis 2.0 anpassen; außerdem gibt es Lautstärkeregler. Die Textnormalisierung schreibt englische und chinesische Zahlen für eine natürliche Aussprache aus. Die Normalisierung der Ausgabelautheit ist standardmäßig auf true gesetzt und wird auf die S2-Familie angewendet; bei S1 hatte dasselbe Feld keine Wirkung. repetition_penalty aus S1 verändert das Audio von S2.1 Pro nicht, daher sollte eine alte Einstellung nicht als wirksamer Regler für dieses Modell betrachtet werden. Prüfen Sie wiederholte Laute und Wörter direkt, statt das Ergebnis anhand eines übernommenen Parameters zu beurteilen.\n\nLängere Skripte werden in Abschnitten verarbeitet. Der dokumentierte Bereich für die Abschnittslänge beträgt 100–300, und max_new_tokens ist ein Audiotoken-Budget pro Abschnitt statt einer Garantie für die Gesamtdauer. Die Konditionierung anhand des vorigen Abschnitts kann den Stimmenkontext weitertragen. Der Auslieferungsablauf des Herstellers beschreibt vollständiges Audio, schrittweise gelieferte Audioabschnitte und Live-Textstreaming, wenn das Skript nach und nach eintrifft. Wählen Sie die Art der Audionutzung passend zur Anwendung und erhalten Sie genug Skriptkontext für Aussprache und Tonfall der nächsten Passage.\n\nHören Sie für ein nützliches fertiges Ergebnis auf ausgelassene oder wiederholte Wörter, die Aussprache von Zahlen, Sprecherwechsel, Pausen und die Intensität der Anweisungen. Verschiedene Stimmenreferenzen können eine Anweisung unterschiedlich stark umsetzen; beginnen Sie daher mit einer einfachen angeleiteten Zeile, bevor Sie konkurrierende Tags hinzufügen. Stellen Sie bei mehrsprachigen Aufgaben das Skript in der Zielsprache bereit, statt vom Sprachmodell zu erwarten, dass es dessen Inhalt erfindet oder übersetzt. Eine gezielte Überarbeitung ändert die für die Abweichung verantwortliche Zeile, Anweisung oder Referenz und erhält die bereits zum Briefing passenden Teile des Vortrags.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ],
        "summary": "Die vollständigen Preisangaben zur Konfiguration finden Sie in den Details."
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "fish-audio/s2.1-pro",
    "input": [
      "text"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Die zurückgegebene X-Client-Request-ID zum Abgleich aufbewahren. Nur tatsächlich zurückgegebene task_id-/asset_id-Werte oder die eigene Medienbibliothek abfragen; niemals eine Aufgaben-URL aus der Vorgangs-ID bilden und die Erstellung niemals erneut anfordern."
            },
            "outputs": {
              "all_results": "Die vollständige Antwort und ihre Header, jede tatsächliche Ausgabe, die ursprünglich zurückgegebenen Kennungen und alle Nutzungsfelder aufbewahren. Den ursprünglichen Vorgang wiederaufnehmen, ohne die Erstellung erneut anzufordern.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Vollständiges binäres Audio oder ursprüngliche audio_url-Antwort, Header und jedes Ihnen zugeordnete Asset."
            },
            "parameters": [
              {
                "enum": [
                  "fish-audio/s2.1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s2.1-pro"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "b347db033a6549378b48d00acb0d06cd"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "fish-audio/s2.1-pro",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "die tatsächlich zurückgegebene task_id oder ein Eintrag in der Medienbibliothek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s2.1-pro', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Sprache",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "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": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "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": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input UTF-8 byte"
            },
            "label": "input UTF-8 byte",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "input UTF-8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per input UTF-8 byte",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "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": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "input UTF-8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per input UTF-8 byte",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s2.1-pro",
        "request_model_id": "fish-audio/s2.1-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S2.1 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Fish Audio S2.1 Pro erzeugt ausdrucksstarke mehrsprachige Sprache und native Dialoge mit mehreren Sprechenden und verbessert Qualität, Latenz und Durchsatz gegenüber S2 Pro. Steuern Sie den Vortrag im Skript und nutzen Sie Stimmenreferenzen für Sprecheraufnahmen oder Gesprächsaudio."
  },
  "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": "Fish Audio S2.1 Pro erzeugt ausdrucksstarke mehrsprachige Sprache und native Dialoge mit mehreren Sprechenden und verbessert Qualität, Latenz und Durchsatz gegenüber S2 Pro. Steuern Sie den Vortrag im Skript und nutzen Sie Stimmenreferenzen für Sprecheraufnahmen oder Gesprächsaudio.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "b918c99643bc9ea578295c990af72a609ff380216acc15a44b58f92466648a2d",
    "renderer_sha256": "4915581496a34d8a27d706c57a04aa12aa22b4b136560828b2e1b9b8437d1eb0"
  },
  "sourceRevision": "09f42c12ee31fdc5d94dd055c4cc2883b05c9e335d1f753fa9f030cdabc1177d"
}
