{
  "aboutHtml": "<p>Qwen-Audio-3.0-TTS-Plus zet tekst om in expressieve spraak. Alibaba richt het op professionele gesproken content, audioboeken, video en materiaal met een herkenbaar stemkarakter. De invoer is tekst en de uitvoer audio; audio kan ook worden teruggegeven terwijl de synthese plaatsvindt.</p><h4>De spreekstijl als onderdeel van de opdracht</h4><p>De voordracht kan worden ingesteld met instructies in natuurlijke taal en gedetailleerde sturingsmarkeringen. Die bepalen emotie, toon, karakter, tempo, volume en spreekstijl. Zo kan dezelfde zin uiteenlopend worden uitgevoerd: van rustige vertelling tot een energiekere of emotionelere voordracht.</p><p>Expressiviteit hangt samen met de gekozen stem en de inhoud van de tekst. Voor een consistente uitspraak moet de taal van het materiaal overeenkomen met de talen die de stem ondersteunt. Het model is bedoeld om geschreven materiaal uit te spreken; het begrijpen van een gesprek en het transcriberen van een bronopname zijn andere audiotaken.</p><h4>Een bestaande stem en een stem op basis van een voorbeeld</h4><p>Er zijn twee systeemstemmen: een warme vrouwenstem en een opgewekte mannenstem. Ze ondersteunen Chinees en Engels. Daarnaast zijn er meer dan 500 basisstemmen en de mogelijkheid om een stem uit een spraakvoorbeeld te reproduceren. De fabrikant beveelt de systeemstemmen aan wanneer een consistent geluid belangrijk is.</p><p>Een stem op basis van een voorbeeld ondersteunt Chinees met regionale uitspraakvarianten, Engels, Frans, Duits, Japans, Koreaans, Russisch, Portugees, Thai, Indonesisch, Vietnamees, Italiaans, Spaans, Maleis, Filipino en Arabisch. Dit is de taaldekking van de betreffende modus en geldt niet automatisch voor elke bestaande stem.</p><p>De eisen aan het voorbeeld horen bij een afzonderlijke manier om bij de fabrikant een stem te maken; spraaksynthese gebruikt een al voorbereide stem. Die stem moet passen bij het gekozen spraakmodel: een stem van een ander model veroorzaakt bij de fabrikant een synthesefout. Voor het voorbeeld wordt zuivere spraak van 10–20 seconden aanbevolen. De totale grens is 60 seconden en 10 MB; minimaal vijf seconden onafgebroken spraak zijn vereist. WAV met 16-bits representatie, MP3 en M4A worden ondersteund bij een samplefrequentie van minimaal 16 kHz. Eén of twee kanalen zijn toegestaan, maar bij twee wordt het eerste gebruikt.</p><p>Het spraakvoorbeeld moet één stem bevatten, zonder mensen die tegelijk spreken, muziek of zang. De eisen van de fabrikant beperken korte pauzes in het voorbeeld tot twee seconden. Dit helpt het timbre en de uitspraakkenmerken te onderscheiden die voor de verdere synthese nodig zijn. Sturing van de voordracht en reproductie van een stem uit een voorbeeld beschrijven verschillende kanten van het model en kunnen worden gebruikt om de klank van hetzelfde materiaal voor te bereiden.</p>",
  "aboutText": "Qwen-Audio-3.0-TTS-Plus zet tekst om in expressieve spraak. Alibaba richt het op professionele gesproken content, audioboeken, video en materiaal met een herkenbaar stemkarakter. De invoer is tekst en de uitvoer audio; audio kan ook worden teruggegeven terwijl de synthese plaatsvindt.\n\n### De spreekstijl als onderdeel van de opdracht\n\nDe voordracht kan worden ingesteld met instructies in natuurlijke taal en gedetailleerde sturingsmarkeringen. Die bepalen emotie, toon, karakter, tempo, volume en spreekstijl. Zo kan dezelfde zin uiteenlopend worden uitgevoerd: van rustige vertelling tot een energiekere of emotionelere voordracht.\n\nExpressiviteit hangt samen met de gekozen stem en de inhoud van de tekst. Voor een consistente uitspraak moet de taal van het materiaal overeenkomen met de talen die de stem ondersteunt. Het model is bedoeld om geschreven materiaal uit te spreken; het begrijpen van een gesprek en het transcriberen van een bronopname zijn andere audiotaken.\n\n### Een bestaande stem en een stem op basis van een voorbeeld\n\nEr zijn twee systeemstemmen: een warme vrouwenstem en een opgewekte mannenstem. Ze ondersteunen Chinees en Engels. Daarnaast zijn er meer dan 500 basisstemmen en de mogelijkheid om een stem uit een spraakvoorbeeld te reproduceren. De fabrikant beveelt de systeemstemmen aan wanneer een consistent geluid belangrijk is.\n\nEen stem op basis van een voorbeeld ondersteunt Chinees met regionale uitspraakvarianten, Engels, Frans, Duits, Japans, Koreaans, Russisch, Portugees, Thai, Indonesisch, Vietnamees, Italiaans, Spaans, Maleis, Filipino en Arabisch. Dit is de taaldekking van de betreffende modus en geldt niet automatisch voor elke bestaande stem.\n\nDe eisen aan het voorbeeld horen bij een afzonderlijke manier om bij de fabrikant een stem te maken; spraaksynthese gebruikt een al voorbereide stem. Die stem moet passen bij het gekozen spraakmodel: een stem van een ander model veroorzaakt bij de fabrikant een synthesefout. Voor het voorbeeld wordt zuivere spraak van 10–20 seconden aanbevolen. De totale grens is 60 seconden en 10 MB; minimaal vijf seconden onafgebroken spraak zijn vereist. WAV met 16-bits representatie, MP3 en M4A worden ondersteund bij een samplefrequentie van minimaal 16 kHz. Eén of twee kanalen zijn toegestaan, maar bij twee wordt het eerste gebruikt.\n\nHet spraakvoorbeeld moet één stem bevatten, zonder mensen die tegelijk spreken, muziek of zang. De eisen van de fabrikant beperken korte pauzes in het voorbeeld tot twee seconden. Dit helpt het timbre en de uitspraakkenmerken te onderscheiden die voor de verdere synthese nodig zijn. Sturing van de voordracht en reproductie van een stem uit een voorbeeld beschrijven verschillende kanten van het model en kunnen worden gebruikt om de klank van hetzelfde materiaal voor te bereiden.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "ed2255c007a9e0bde967835ba57c50b7264918831f993b10204efee4fdb7f1d4",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "nl-be",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">qwen-audio-3.0-tts-plus</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sluiten\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-audio-3.0-tts-plus</code><button type=\"button\" id=\"copy-id\">ID kopiëren</button></div><nav class=\"card-jump-nav\" aria-label=\"Onderdelen van de modelkaart\"><button type=\"button\" data-card-jump=\"overview\">Aan de slag</button><button type=\"button\" data-card-jump=\"methods\">Invoer en methoden</button><button type=\"button\" data-card-jump=\"pricing\">Tarieven</button><button type=\"button\" data-card-jump=\"examples\">Voorbeelden</button><button type=\"button\" data-card-jump=\"results\">Resultaten</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=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\">Spraakgeneratie</button></div><div class=\"idline\"><label for=\"card-model-id\">Model-ID</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\" selected>qwen-audio-3.0-tts-plus</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts\">qwen-tts</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts-latest\">qwen-tts-latest</option></select></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\">Aan de slag</h3><p class=\"mdesc-full\">Een model voor expressieve tekst-naar-spraak voor video&#39;s, audioboeken en gesproken materiaal. Het ondersteunt sturing van de spreekstijl en de keuze van een bestaande stem of een stem op basis van een voorbeeld.</p><dl class=\"card-io\" data-card-io><div><dt>Toegestane invoer</dt><dd>Tekst</dd></div><div><dt>Resultaten</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Over het model</summary><p class=\"note-s\" data-model-method-boundary>Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus zet tekst om in expressieve spraak. Alibaba richt het op professionele gesproken content, audioboeken, video en materiaal met een herkenbaar stemkarakter. De invoer is tekst en de uitvoer audio; audio kan ook worden teruggegeven terwijl de synthese plaatsvindt.</p><h4>De spreekstijl als onderdeel van de opdracht</h4><p>De voordracht kan worden ingesteld met instructies in natuurlijke taal en gedetailleerde sturingsmarkeringen. Die bepalen emotie, toon, karakter, tempo, volume en spreekstijl. Zo kan dezelfde zin uiteenlopend worden uitgevoerd: van rustige vertelling tot een energiekere of emotionelere voordracht.</p><p>Expressiviteit hangt samen met de gekozen stem en de inhoud van de tekst. Voor een consistente uitspraak moet de taal van het materiaal overeenkomen met de talen die de stem ondersteunt. Het model is bedoeld om geschreven materiaal uit te spreken; het begrijpen van een gesprek en het transcriberen van een bronopname zijn andere audiotaken.</p><h4>Een bestaande stem en een stem op basis van een voorbeeld</h4><p>Er zijn twee systeemstemmen: een warme vrouwenstem en een opgewekte mannenstem. Ze ondersteunen Chinees en Engels. Daarnaast zijn er meer dan 500 basisstemmen en de mogelijkheid om een stem uit een spraakvoorbeeld te reproduceren. De fabrikant beveelt de systeemstemmen aan wanneer een consistent geluid belangrijk is.</p><p>Een stem op basis van een voorbeeld ondersteunt Chinees met regionale uitspraakvarianten, Engels, Frans, Duits, Japans, Koreaans, Russisch, Portugees, Thai, Indonesisch, Vietnamees, Italiaans, Spaans, Maleis, Filipino en Arabisch. Dit is de taaldekking van de betreffende modus en geldt niet automatisch voor elke bestaande stem.</p><p>De eisen aan het voorbeeld horen bij een afzonderlijke manier om bij de fabrikant een stem te maken; spraaksynthese gebruikt een al voorbereide stem. Die stem moet passen bij het gekozen spraakmodel: een stem van een ander model veroorzaakt bij de fabrikant een synthesefout. Voor het voorbeeld wordt zuivere spraak van 10–20 seconden aanbevolen. De totale grens is 60 seconden en 10 MB; minimaal vijf seconden onafgebroken spraak zijn vereist. WAV met 16-bits representatie, MP3 en M4A worden ondersteund bij een samplefrequentie van minimaal 16 kHz. Eén of twee kanalen zijn toegestaan, maar bij twee wordt het eerste gebruikt.</p><p>Het spraakvoorbeeld moet één stem bevatten, zonder mensen die tegelijk spreken, muziek of zang. De eisen van de fabrikant beperken korte pauzes in het voorbeeld tot twee seconden. Dit helpt het timbre en de uitspraakkenmerken te onderscheiden die voor de verdere synthese nodig zijn. Sturing van de voordracht en reproductie van een stem uit een voorbeeld beschrijven verschillende kanten van het model en kunnen worden gebruikt om de klank van hetzelfde materiaal voor te bereiden.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Beschikbaar in Ailoot · invoer en methoden</h3><details class=\"card-method\" open><summary><b>Ailoot · Spraakgeneratie</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Invoer</dt><dd><code>text</code></dd></div><div><dt>Uitvoer</dt><dd><code>speech</code></dd></div><div><dt>Uitvoerformaat</dt><dd>geselecteerd mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Veld</th><th>Type</th><th>Vereiste</th><th>Waarden en limieten</th><th>Standaard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>qwen-audio-3.0-tts-plus</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Minimumlengte: 1</div><div>Maximumlengte: 600</div><div>Eenheid: Unicode-tekens</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Voorbeelden: longanlingxin, longanlufeng</div><div>Toegestaan aangepast patroon: ^qwen-audio-3\\.0-tts-plus-</div><div>Voorwaarden: Werkelijke ID&#39;s van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">sample_rate</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>integer</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>16.000, 24.000, 48.000</div><div>Eenheid: Hz</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>24.000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaties van invoermaterialen</summary><p class=\"note-s\"><b>text_to_speech</b> · Vereist: input</p></details><details class=\"note-s\" data-method-contract><summary>Methodeparameters en levenscyclus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Contract</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>text</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=\"Contract\"><span class=\"card-cell-label\">Contract</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>null</td></tr></tbody></table></div><p>Levenscyclus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · daadwerkelijk teruggegeven task_id of record in de mediabibliotheek</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><p class=\"note-s\">De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarieven</h3><h4>Ailoot-methodetarieven</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Spraakgeneratie</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Invoer</dt><dd>US$ 20,00 <em>per 1 miljoen tekens</em></dd></div><div><dt>Uitvoer</dt><dd>US$ 0,00 <em>per verzoek</em></dd></div></dl><p class=\"note-s\">US$ 20,00 per 1 miljoen meegetelde tekens. Een CJK-ideogram telt als 2 meegetelde tekens: US$ 40,00 per 1 miljoen ideogrammen. Gewicht van andere Unicode-tekens: 1. Audiouitvoer: US$ 0,00. </p><details class=\"note-s\"><summary>Exacte voorwaardelijke berekening uit de catalogus</summary><pre><code>{\n  &quot;cjk_ideograph_weight&quot;: 2,\n  &quot;input_usd_per_10000_counted_characters&quot;: 0.2,\n  &quot;other_unicode_character_weight&quot;: 1,\n  &quot;output_audio_usd&quot;: 0,\n  &quot;unit&quot;: &quot;counted_unicode_characters&quot;\n}</code></pre></details></section><p class=\"note-s\">Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. <a href=\"/docs/nl-be/billing/reserve/\">Zo werken reservering en afrekening →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Voorbeeldverzoeken</h3><h4>Ailoot · Spraakgeneratie</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-41-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-41-panel-0\" aria-selected=\"true\" tabindex=\"0\">Spraakvoorbeeld</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Code kopiëren\"><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-41-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-41-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;qwen-audio-3.0-tts-plus&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Resultaten ophalen en opslaan</h3><h4>Ailoot · Spraakgeneratie</h4><p class=\"note-s\">geselecteerd mp3/wav/pcm</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><div class=\"card-result-process\" data-all-results><h5>Alle voltooide resultaten bewaren</h5><p class=\"note-s\">Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.</p><p class=\"note-s\">Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Als het oorspronkelijke antwoord moet worden gecontroleerd</h5><p class=\"note-s\">Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen.</p></div><details class=\"card-about\" data-output-fields><summary>Antwoordvelden</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Veld</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>bytes</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fouten en vervolgstappen</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Antwoord</th><th>Voorwaarde</th><th>Volgende stap</th></tr></thead><tbody><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span>Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.</td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span><code>server_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span>Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasnamen</h3><h4>Modelaliasnamen</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></span></p><h4>Aliasnamen voor methodepaden</h4><p class=\"note-s\">Gebruik de hierboven getoonde methodepaden.</p><h4>Gerelateerde aanroeper-ID’s</h4><p class=\"note-s\"><a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "qwen-audio-3.0-tts-plus",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig",
                "http_status": 400,
                "recovery": "Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden",
                "http_status": null,
                "recovery": "Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "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": "Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "geselecteerd mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-audio-3.0-tts-plus"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tekens"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Werkelijke ID's van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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": "daadwerkelijk teruggegeven task_id of record in de mediabibliotheek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-audio-3.0-tts-plus\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Spraakgeneratie",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">qwen-audio-3.0-tts-plus</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sluiten\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-tts</code><button type=\"button\" id=\"copy-id\">ID kopiëren</button></div><nav class=\"card-jump-nav\" aria-label=\"Onderdelen van de modelkaart\"><button type=\"button\" data-card-jump=\"overview\">Aan de slag</button><button type=\"button\" data-card-jump=\"methods\">Invoer en methoden</button><button type=\"button\" data-card-jump=\"pricing\">Tarieven</button><button type=\"button\" data-card-jump=\"examples\">Voorbeelden</button><button type=\"button\" data-card-jump=\"results\">Resultaten</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=\"Core|speech|/v1/audio/speech|qwen-tts\">Spraakgeneratie</button></div><div class=\"idline\"><label for=\"card-model-id\">Model-ID</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\">qwen-audio-3.0-tts-plus</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts\" selected>qwen-tts</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts-latest\">qwen-tts-latest</option></select></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\">Aan de slag</h3><p class=\"mdesc-full\">Een model voor expressieve tekst-naar-spraak voor video&#39;s, audioboeken en gesproken materiaal. Het ondersteunt sturing van de spreekstijl en de keuze van een bestaande stem of een stem op basis van een voorbeeld.</p><dl class=\"card-io\" data-card-io><div><dt>Toegestane invoer</dt><dd>Tekst</dd></div><div><dt>Resultaten</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Over het model</summary><p class=\"note-s\" data-model-method-boundary>Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus zet tekst om in expressieve spraak. Alibaba richt het op professionele gesproken content, audioboeken, video en materiaal met een herkenbaar stemkarakter. De invoer is tekst en de uitvoer audio; audio kan ook worden teruggegeven terwijl de synthese plaatsvindt.</p><h4>De spreekstijl als onderdeel van de opdracht</h4><p>De voordracht kan worden ingesteld met instructies in natuurlijke taal en gedetailleerde sturingsmarkeringen. Die bepalen emotie, toon, karakter, tempo, volume en spreekstijl. Zo kan dezelfde zin uiteenlopend worden uitgevoerd: van rustige vertelling tot een energiekere of emotionelere voordracht.</p><p>Expressiviteit hangt samen met de gekozen stem en de inhoud van de tekst. Voor een consistente uitspraak moet de taal van het materiaal overeenkomen met de talen die de stem ondersteunt. Het model is bedoeld om geschreven materiaal uit te spreken; het begrijpen van een gesprek en het transcriberen van een bronopname zijn andere audiotaken.</p><h4>Een bestaande stem en een stem op basis van een voorbeeld</h4><p>Er zijn twee systeemstemmen: een warme vrouwenstem en een opgewekte mannenstem. Ze ondersteunen Chinees en Engels. Daarnaast zijn er meer dan 500 basisstemmen en de mogelijkheid om een stem uit een spraakvoorbeeld te reproduceren. De fabrikant beveelt de systeemstemmen aan wanneer een consistent geluid belangrijk is.</p><p>Een stem op basis van een voorbeeld ondersteunt Chinees met regionale uitspraakvarianten, Engels, Frans, Duits, Japans, Koreaans, Russisch, Portugees, Thai, Indonesisch, Vietnamees, Italiaans, Spaans, Maleis, Filipino en Arabisch. Dit is de taaldekking van de betreffende modus en geldt niet automatisch voor elke bestaande stem.</p><p>De eisen aan het voorbeeld horen bij een afzonderlijke manier om bij de fabrikant een stem te maken; spraaksynthese gebruikt een al voorbereide stem. Die stem moet passen bij het gekozen spraakmodel: een stem van een ander model veroorzaakt bij de fabrikant een synthesefout. Voor het voorbeeld wordt zuivere spraak van 10–20 seconden aanbevolen. De totale grens is 60 seconden en 10 MB; minimaal vijf seconden onafgebroken spraak zijn vereist. WAV met 16-bits representatie, MP3 en M4A worden ondersteund bij een samplefrequentie van minimaal 16 kHz. Eén of twee kanalen zijn toegestaan, maar bij twee wordt het eerste gebruikt.</p><p>Het spraakvoorbeeld moet één stem bevatten, zonder mensen die tegelijk spreken, muziek of zang. De eisen van de fabrikant beperken korte pauzes in het voorbeeld tot twee seconden. Dit helpt het timbre en de uitspraakkenmerken te onderscheiden die voor de verdere synthese nodig zijn. Sturing van de voordracht en reproductie van een stem uit een voorbeeld beschrijven verschillende kanten van het model en kunnen worden gebruikt om de klank van hetzelfde materiaal voor te bereiden.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Beschikbaar in Ailoot · invoer en methoden</h3><details class=\"card-method\" open><summary><b>Ailoot · Spraakgeneratie</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Invoer</dt><dd><code>text</code></dd></div><div><dt>Uitvoer</dt><dd><code>speech</code></dd></div><div><dt>Uitvoerformaat</dt><dd>geselecteerd mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Veld</th><th>Type</th><th>Vereiste</th><th>Waarden en limieten</th><th>Standaard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>qwen-tts</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Minimumlengte: 1</div><div>Maximumlengte: 600</div><div>Eenheid: Unicode-tekens</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Voorbeelden: longanlingxin, longanlufeng</div><div>Toegestaan aangepast patroon: ^qwen-audio-3\\.0-tts-plus-</div><div>Voorwaarden: Werkelijke ID&#39;s van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">sample_rate</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>integer</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>16.000, 24.000, 48.000</div><div>Eenheid: Hz</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>24.000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaties van invoermaterialen</summary><p class=\"note-s\"><b>text_to_speech</b> · Vereist: input</p></details><details class=\"note-s\" data-method-contract><summary>Methodeparameters en levenscyclus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Contract</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>text</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=\"Contract\"><span class=\"card-cell-label\">Contract</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>null</td></tr></tbody></table></div><p>Levenscyclus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · daadwerkelijk teruggegeven task_id of record in de mediabibliotheek</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><p class=\"note-s\">De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarieven</h3><h4>Ailoot-methodetarieven</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Spraakgeneratie</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Invoer</dt><dd>US$ 20,00 <em>per 1 miljoen tekens</em></dd></div><div><dt>Uitvoer</dt><dd>US$ 0,00 <em>per verzoek</em></dd></div></dl><p class=\"note-s\">US$ 20,00 per 1 miljoen meegetelde tekens. Een CJK-ideogram telt als 2 meegetelde tekens: US$ 40,00 per 1 miljoen ideogrammen. Gewicht van andere Unicode-tekens: 1. Audiouitvoer: US$ 0,00. </p><details class=\"note-s\"><summary>Exacte voorwaardelijke berekening uit de catalogus</summary><pre><code>{\n  &quot;cjk_ideograph_weight&quot;: 2,\n  &quot;input_usd_per_10000_counted_characters&quot;: 0.2,\n  &quot;other_unicode_character_weight&quot;: 1,\n  &quot;output_audio_usd&quot;: 0,\n  &quot;unit&quot;: &quot;counted_unicode_characters&quot;\n}</code></pre></details></section><p class=\"note-s\">Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. <a href=\"/docs/nl-be/billing/reserve/\">Zo werken reservering en afrekening →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Voorbeeldverzoeken</h3><h4>Ailoot · Spraakgeneratie</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-42-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-42-panel-0\" aria-selected=\"true\" tabindex=\"0\">Spraakvoorbeeld</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Code kopiëren\"><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-42-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-42-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;qwen-tts&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Resultaten ophalen en opslaan</h3><h4>Ailoot · Spraakgeneratie</h4><p class=\"note-s\">geselecteerd mp3/wav/pcm</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><div class=\"card-result-process\" data-all-results><h5>Alle voltooide resultaten bewaren</h5><p class=\"note-s\">Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.</p><p class=\"note-s\">Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Als het oorspronkelijke antwoord moet worden gecontroleerd</h5><p class=\"note-s\">Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen.</p></div><details class=\"card-about\" data-output-fields><summary>Antwoordvelden</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Veld</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>bytes</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fouten en vervolgstappen</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Antwoord</th><th>Voorwaarde</th><th>Volgende stap</th></tr></thead><tbody><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span>Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.</td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span><code>server_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span>Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasnamen</h3><h4>Modelaliasnamen</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></span></p><h4>Aliasnamen voor methodepaden</h4><p class=\"note-s\">Gebruik de hierboven getoonde methodepaden.</p><h4>Gerelateerde aanroeper-ID’s</h4><p class=\"note-s\"><a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "qwen-tts",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "qwen-tts",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|qwen-tts",
      "ordinal": 1,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig",
                "http_status": 400,
                "recovery": "Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden",
                "http_status": null,
                "recovery": "Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "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": "Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "geselecteerd mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tekens"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Werkelijke ID's van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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": "daadwerkelijk teruggegeven task_id of record in de mediabibliotheek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Spraakgeneratie",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">qwen-audio-3.0-tts-plus</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sluiten\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-tts-latest</code><button type=\"button\" id=\"copy-id\">ID kopiëren</button></div><nav class=\"card-jump-nav\" aria-label=\"Onderdelen van de modelkaart\"><button type=\"button\" data-card-jump=\"overview\">Aan de slag</button><button type=\"button\" data-card-jump=\"methods\">Invoer en methoden</button><button type=\"button\" data-card-jump=\"pricing\">Tarieven</button><button type=\"button\" data-card-jump=\"examples\">Voorbeelden</button><button type=\"button\" data-card-jump=\"results\">Resultaten</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=\"Core|speech|/v1/audio/speech|qwen-tts-latest\">Spraakgeneratie</button></div><div class=\"idline\"><label for=\"card-model-id\">Model-ID</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\">qwen-audio-3.0-tts-plus</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts\">qwen-tts</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts-latest\" selected>qwen-tts-latest</option></select></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\">Aan de slag</h3><p class=\"mdesc-full\">Een model voor expressieve tekst-naar-spraak voor video&#39;s, audioboeken en gesproken materiaal. Het ondersteunt sturing van de spreekstijl en de keuze van een bestaande stem of een stem op basis van een voorbeeld.</p><dl class=\"card-io\" data-card-io><div><dt>Toegestane invoer</dt><dd>Tekst</dd></div><div><dt>Resultaten</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Over het model</summary><p class=\"note-s\" data-model-method-boundary>Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus zet tekst om in expressieve spraak. Alibaba richt het op professionele gesproken content, audioboeken, video en materiaal met een herkenbaar stemkarakter. De invoer is tekst en de uitvoer audio; audio kan ook worden teruggegeven terwijl de synthese plaatsvindt.</p><h4>De spreekstijl als onderdeel van de opdracht</h4><p>De voordracht kan worden ingesteld met instructies in natuurlijke taal en gedetailleerde sturingsmarkeringen. Die bepalen emotie, toon, karakter, tempo, volume en spreekstijl. Zo kan dezelfde zin uiteenlopend worden uitgevoerd: van rustige vertelling tot een energiekere of emotionelere voordracht.</p><p>Expressiviteit hangt samen met de gekozen stem en de inhoud van de tekst. Voor een consistente uitspraak moet de taal van het materiaal overeenkomen met de talen die de stem ondersteunt. Het model is bedoeld om geschreven materiaal uit te spreken; het begrijpen van een gesprek en het transcriberen van een bronopname zijn andere audiotaken.</p><h4>Een bestaande stem en een stem op basis van een voorbeeld</h4><p>Er zijn twee systeemstemmen: een warme vrouwenstem en een opgewekte mannenstem. Ze ondersteunen Chinees en Engels. Daarnaast zijn er meer dan 500 basisstemmen en de mogelijkheid om een stem uit een spraakvoorbeeld te reproduceren. De fabrikant beveelt de systeemstemmen aan wanneer een consistent geluid belangrijk is.</p><p>Een stem op basis van een voorbeeld ondersteunt Chinees met regionale uitspraakvarianten, Engels, Frans, Duits, Japans, Koreaans, Russisch, Portugees, Thai, Indonesisch, Vietnamees, Italiaans, Spaans, Maleis, Filipino en Arabisch. Dit is de taaldekking van de betreffende modus en geldt niet automatisch voor elke bestaande stem.</p><p>De eisen aan het voorbeeld horen bij een afzonderlijke manier om bij de fabrikant een stem te maken; spraaksynthese gebruikt een al voorbereide stem. Die stem moet passen bij het gekozen spraakmodel: een stem van een ander model veroorzaakt bij de fabrikant een synthesefout. Voor het voorbeeld wordt zuivere spraak van 10–20 seconden aanbevolen. De totale grens is 60 seconden en 10 MB; minimaal vijf seconden onafgebroken spraak zijn vereist. WAV met 16-bits representatie, MP3 en M4A worden ondersteund bij een samplefrequentie van minimaal 16 kHz. Eén of twee kanalen zijn toegestaan, maar bij twee wordt het eerste gebruikt.</p><p>Het spraakvoorbeeld moet één stem bevatten, zonder mensen die tegelijk spreken, muziek of zang. De eisen van de fabrikant beperken korte pauzes in het voorbeeld tot twee seconden. Dit helpt het timbre en de uitspraakkenmerken te onderscheiden die voor de verdere synthese nodig zijn. Sturing van de voordracht en reproductie van een stem uit een voorbeeld beschrijven verschillende kanten van het model en kunnen worden gebruikt om de klank van hetzelfde materiaal voor te bereiden.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Beschikbaar in Ailoot · invoer en methoden</h3><details class=\"card-method\" open><summary><b>Ailoot · Spraakgeneratie</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Invoer</dt><dd><code>text</code></dd></div><div><dt>Uitvoer</dt><dd><code>speech</code></dd></div><div><dt>Uitvoerformaat</dt><dd>geselecteerd mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Veld</th><th>Type</th><th>Vereiste</th><th>Waarden en limieten</th><th>Standaard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>qwen-tts-latest</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Minimumlengte: 1</div><div>Maximumlengte: 600</div><div>Eenheid: Unicode-tekens</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Voorbeelden: longanlingxin, longanlufeng</div><div>Toegestaan aangepast patroon: ^qwen-audio-3\\.0-tts-plus-</div><div>Voorwaarden: Werkelijke ID&#39;s van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">sample_rate</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>integer</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>16.000, 24.000, 48.000</div><div>Eenheid: Hz</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>24.000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaties van invoermaterialen</summary><p class=\"note-s\"><b>text_to_speech</b> · Vereist: input</p></details><details class=\"note-s\" data-method-contract><summary>Methodeparameters en levenscyclus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Contract</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>text</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=\"Contract\"><span class=\"card-cell-label\">Contract</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>null</td></tr></tbody></table></div><p>Levenscyclus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · daadwerkelijk teruggegeven task_id of record in de mediabibliotheek</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><p class=\"note-s\">De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarieven</h3><h4>Ailoot-methodetarieven</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Spraakgeneratie</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Invoer</dt><dd>US$ 20,00 <em>per 1 miljoen tekens</em></dd></div><div><dt>Uitvoer</dt><dd>US$ 0,00 <em>per verzoek</em></dd></div></dl><p class=\"note-s\">US$ 20,00 per 1 miljoen meegetelde tekens. Een CJK-ideogram telt als 2 meegetelde tekens: US$ 40,00 per 1 miljoen ideogrammen. Gewicht van andere Unicode-tekens: 1. Audiouitvoer: US$ 0,00. </p><details class=\"note-s\"><summary>Exacte voorwaardelijke berekening uit de catalogus</summary><pre><code>{\n  &quot;cjk_ideograph_weight&quot;: 2,\n  &quot;input_usd_per_10000_counted_characters&quot;: 0.2,\n  &quot;other_unicode_character_weight&quot;: 1,\n  &quot;output_audio_usd&quot;: 0,\n  &quot;unit&quot;: &quot;counted_unicode_characters&quot;\n}</code></pre></details></section><p class=\"note-s\">Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. <a href=\"/docs/nl-be/billing/reserve/\">Zo werken reservering en afrekening →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Voorbeeldverzoeken</h3><h4>Ailoot · Spraakgeneratie</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-43-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-43-panel-0\" aria-selected=\"true\" tabindex=\"0\">Spraakvoorbeeld</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Code kopiëren\"><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-43-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-43-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;qwen-tts-latest&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Resultaten ophalen en opslaan</h3><h4>Ailoot · Spraakgeneratie</h4><p class=\"note-s\">geselecteerd mp3/wav/pcm</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><div class=\"card-result-process\" data-all-results><h5>Alle voltooide resultaten bewaren</h5><p class=\"note-s\">Bewaar elk volledig teruggegeven antwoord, bestand en inhoudsonderdeel.</p><p class=\"note-s\">Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Als het oorspronkelijke antwoord moet worden gecontroleerd</h5><p class=\"note-s\">Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen.</p></div><details class=\"card-about\" data-output-fields><summary>Antwoordvelden</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Veld</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>bytes</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fouten en vervolgstappen</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Antwoord</th><th>Voorwaarde</th><th>Volgende stap</th></tr></thead><tbody><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span>Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.</td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span><code>server_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span>Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasnamen</h3><h4>Modelaliasnamen</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></span></p><h4>Aliasnamen voor methodepaden</h4><p class=\"note-s\">Gebruik de hierboven getoonde methodepaden.</p><h4>Gerelateerde aanroeper-ID’s</h4><p class=\"note-s\"><a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "qwen-tts-latest",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|qwen-tts-latest",
      "ordinal": 2,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig",
                "http_status": 400,
                "recovery": "Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden",
                "http_status": null,
                "recovery": "Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "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": "Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "geselecteerd mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tekens"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Werkelijke ID's van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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": "daadwerkelijk teruggegeven task_id of record in de mediabibliotheek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts-latest\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Spraakgeneratie",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    }
  ],
  "model_id": "qwen-audio-3.0-tts-plus",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "23782138ad8c682f8060de6b2f40d2ba76a15d13bcec6700852d07deeb5c73fa",
    "input_html_sha256": "aa990ae35e334547a45ded56b2efa3ff39faa59e6601fd5d0608b2ad79a643a4",
    "private_audit_sha256": "0711d1ec776864f4efb5466cfec4c4872809e36a6a4f187245947ed447b73fb6",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/nl-be/qwen-audio-3-0-tts-plus/",
    "description": "Een model voor expressieve tekst-naar-spraak voor video's, audioboeken en gesproken materiaal. Het ondersteunt sturing van de spreekstijl en de keuze van een bestaande stem of een stem op basis van een voorbeeld.",
    "locale": "nl-be",
    "md_url": "https://ailoot.ai/models/nl-be/qwen-audio-3-0-tts-plus/index.md",
    "title": "qwen-audio-3.0-tts-plus — Ailoot",
    "url": "https://ailoot.ai/models/nl-be/qwen-audio-3-0-tts-plus/"
  },
  "rawModel": {
    "about": "Qwen-Audio-3.0-TTS-Plus zet tekst om in expressieve spraak. Alibaba richt het op professionele gesproken content, audioboeken, video en materiaal met een herkenbaar stemkarakter. De invoer is tekst en de uitvoer audio; audio kan ook worden teruggegeven terwijl de synthese plaatsvindt.\n\n### De spreekstijl als onderdeel van de opdracht\n\nDe voordracht kan worden ingesteld met instructies in natuurlijke taal en gedetailleerde sturingsmarkeringen. Die bepalen emotie, toon, karakter, tempo, volume en spreekstijl. Zo kan dezelfde zin uiteenlopend worden uitgevoerd: van rustige vertelling tot een energiekere of emotionelere voordracht.\n\nExpressiviteit hangt samen met de gekozen stem en de inhoud van de tekst. Voor een consistente uitspraak moet de taal van het materiaal overeenkomen met de talen die de stem ondersteunt. Het model is bedoeld om geschreven materiaal uit te spreken; het begrijpen van een gesprek en het transcriberen van een bronopname zijn andere audiotaken.\n\n### Een bestaande stem en een stem op basis van een voorbeeld\n\nEr zijn twee systeemstemmen: een warme vrouwenstem en een opgewekte mannenstem. Ze ondersteunen Chinees en Engels. Daarnaast zijn er meer dan 500 basisstemmen en de mogelijkheid om een stem uit een spraakvoorbeeld te reproduceren. De fabrikant beveelt de systeemstemmen aan wanneer een consistent geluid belangrijk is.\n\nEen stem op basis van een voorbeeld ondersteunt Chinees met regionale uitspraakvarianten, Engels, Frans, Duits, Japans, Koreaans, Russisch, Portugees, Thai, Indonesisch, Vietnamees, Italiaans, Spaans, Maleis, Filipino en Arabisch. Dit is de taaldekking van de betreffende modus en geldt niet automatisch voor elke bestaande stem.\n\nDe eisen aan het voorbeeld horen bij een afzonderlijke manier om bij de fabrikant een stem te maken; spraaksynthese gebruikt een al voorbereide stem. Die stem moet passen bij het gekozen spraakmodel: een stem van een ander model veroorzaakt bij de fabrikant een synthesefout. Voor het voorbeeld wordt zuivere spraak van 10–20 seconden aanbevolen. De totale grens is 60 seconden en 10 MB; minimaal vijf seconden onafgebroken spraak zijn vereist. WAV met 16-bits representatie, MP3 en M4A worden ondersteund bij een samplefrequentie van minimaal 16 kHz. Eén of twee kanalen zijn toegestaan, maar bij twee wordt het eerste gebruikt.\n\nHet spraakvoorbeeld moet één stem bevatten, zonder mensen die tegelijk spreken, muziek of zang. De eisen van de fabrikant beperken korte pauzes in het voorbeeld tot twee seconden. Dit helpt het timbre en de uitspraakkenmerken te onderscheiden die voor de verdere synthese nodig zijn. Sturing van de voordracht en reproductie van een stem uit een voorbeeld beschrijven verschillende kanten van het model en kunnen worden gebruikt om de klank van hetzelfde materiaal voor te bereiden.",
    "alias_of": null,
    "aliases": [
      "qwen-tts",
      "qwen-tts-latest"
    ],
    "author": "Alibaba",
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "qwen-audio-3.0-tts-plus",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig",
                "http_status": 400,
                "recovery": "Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden",
                "http_status": null,
                "recovery": "Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "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": "Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "geselecteerd mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-audio-3.0-tts-plus"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tekens"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Werkelijke ID's van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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": "daadwerkelijk teruggegeven task_id of record in de mediabibliotheek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-audio-3.0-tts-plus\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Spraakgeneratie",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      },
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig",
                "http_status": 400,
                "recovery": "Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden",
                "http_status": null,
                "recovery": "Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "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": "Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "geselecteerd mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tekens"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Werkelijke ID's van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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": "daadwerkelijk teruggegeven task_id of record in de mediabibliotheek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Spraakgeneratie",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      },
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Verplichte velden, de materiaalrepresentatie of een parameterwaarde zijn ongeldig",
                "http_status": 400,
                "recovery": "Corrigeer de aangegeven velden vóór een nieuwe aanmaakaanvraag.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "De teruggegeven respons geeft aan dat de bewerking of het resultaat gecontroleerd moet worden",
                "http_status": null,
                "recovery": "Bewaar de oorspronkelijk teruggegeven bewerkings-/taak-ID, aanvraagheaders en respons; blijf de oorspronkelijke bewerking uitlezen via de ondersteunde leesaanvragen. Dien de aanmaakaanvraag niet opnieuw in.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "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": "Bewaar de oorspronkelijke operation_id/X-Client-Request-ID voor reconciliatie zonder de aanvraag opnieuw in te dienen; er is geen afzonderlijke route om de audiostatus te pollen."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Bewaar het volledige binaire resultaat en de headers. Als JSON of meerdere uitvoerresultaten worden teruggegeven, bewaar dan elk gegevensitem en haal elke daadwerkelijke ondertekende asset-URL op.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "geselecteerd mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tekens"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Werkelijke ID's van aangepaste stemmen met het exacte voorvoegsel qwen-audio-3.0-tts-plus- worden geaccepteerd.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "De methodestructuren en ID’s zijn exact; de mogelijkheden van de leverancier staan los van toelating."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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": "daadwerkelijk teruggegeven task_id of record in de mediabibliotheek",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts-latest\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\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 speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Spraakgeneratie",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "qwen-audio-3.0-tts-plus",
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core"
      },
      {
        "canonical_model_id": "qwen-audio-3.0-tts-plus",
        "request_model_id": "qwen-tts",
        "route_label": "Core"
      },
      {
        "canonical_model_id": "qwen-audio-3.0-tts-plus",
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core"
      }
    ],
    "name": "qwen-audio-3.0-tts-plus",
    "price": {
      "in": 20,
      "in_label": "per 1 million characters",
      "out": 0,
      "out_label": "per request",
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Een model voor expressieve tekst-naar-spraak voor video's, audioboeken en gesproken materiaal. Het ondersteunt sturing van de spreekstijl en de keuze van een bestaande stem of een stem op basis van een voorbeeld."
  },
  "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
        },
        {
          "contract_json_pointer": "/methods/1/rawMethod/contract",
          "html_json_pointer": "/methods/1/html",
          "method_ordinal": 1
        },
        {
          "contract_json_pointer": "/methods/2/rawMethod/contract",
          "html_json_pointer": "/methods/2/html",
          "method_ordinal": 2
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod",
        "/methods/1/rawMethod",
        "/methods/2/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Een model voor expressieve tekst-naar-spraak voor video's, audioboeken en gesproken materiaal. Het ondersteunt sturing van de spreekstijl en de keuze van een bestaande stem of een stem op basis van een voorbeeld.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "0e8301465de365eb4a68f3c8d68fdcccb21b35355ce7071a70b26f53ea842297",
    "renderer_sha256": "a5aefc67f30427b283b8d8bf7955908a0216c6e5e4ca3cc1887842431e2b1ee6"
  },
  "sourceRevision": "d71e68743e429fc8be3ebcf346cfa0874b39192a24ca3cbf266c160095cbc11b"
}
