{
  "aboutHtml": "<p>Qwen-Audio-3.0-TTS-Plus gjør tekst om til uttrykksfull tale. Alibaba retter modellen mot profesjonell opplesing av innhold, lydbøker, video og materiale med et gjenkjennelig stemmepreg. Inndata er tekst og utdata er lyd; lyden kan også leveres underveis i syntesen.</p><h4>Talestilen som del av oppgaven</h4><p>Fremføringen kan angis med instruksjoner i naturlig språk og detaljerte styringsmarkeringer. De bestemmer følelser, tone, karakter, tempo, volum og talestil. Dette gjør det mulig å styre fremføringen av samme setning, fra rolig fortelling til en mer energisk eller følelsespreget stil.</p><p>Uttrykksfullheten henger sammen med den valgte stemmen og tekstinnholdet. For stabil uttale må materialets språk være et språk stemmen støtter. Modellen er ment å lese opp skrevet materiale; forståelse av en samtale og transkripsjon av et kildeopptak er andre lydoppgaver.</p><h4>Ferdig stemme og stemme fra en prøve</h4><p>Det finnes to systemstemmer: en varm kvinnestemme og en livlig mannsstemme. De støtter kinesisk og engelsk. I tillegg tilbys mer enn 500 grunnstemmer og mulighet for å gjenskape en stemme fra en taleprøve. Produsenten anbefaler systemstemmene når stabil klang er viktig.</p><p>En stemme basert på en prøve støtter kinesisk med regionale uttalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malayisk, filippinsk og arabisk. Dette er språkstøtten i den aktuelle modusen og gjelder ikke automatisk hver ferdige stemme.</p><p>Kravene til prøven gjelder en egen måte å lage en stemme hos produsenten på; talesyntesen bruker en stemme som allerede er klargjort. Den klargjorte stemmen må passe til den valgte tekst-til-tale-modellen: en stemme fra en annen modell gir en syntesefeil hos produsenten. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grensen er 60 sekunder og 10 MB; minst fem sekunder sammenhengende tale kreves. WAV med 16-bits representasjon, MP3 og M4A støttes ved en samplingsfrekvens på minst 16 kHz. Én eller to kanaler tillates, men ved to brukes den første.</p><p>Taleprøven må inneholde én stemme uten personer som snakker samtidig, musikk eller sang. Produsentens krav begrenser korte pauser i prøven til to sekunder. Dette bidrar til å skille ut klang og uttaletrekk som trengs i den videre syntesen. Styring av fremføring og gjenskaping av en stemme fra en prøve beskriver ulike sider av modellens virkemåte og kan brukes for å forme lyden i samme materiale.</p>",
  "aboutText": "Qwen-Audio-3.0-TTS-Plus gjør tekst om til uttrykksfull tale. Alibaba retter modellen mot profesjonell opplesing av innhold, lydbøker, video og materiale med et gjenkjennelig stemmepreg. Inndata er tekst og utdata er lyd; lyden kan også leveres underveis i syntesen.\n\n### Talestilen som del av oppgaven\n\nFremføringen kan angis med instruksjoner i naturlig språk og detaljerte styringsmarkeringer. De bestemmer følelser, tone, karakter, tempo, volum og talestil. Dette gjør det mulig å styre fremføringen av samme setning, fra rolig fortelling til en mer energisk eller følelsespreget stil.\n\nUttrykksfullheten henger sammen med den valgte stemmen og tekstinnholdet. For stabil uttale må materialets språk være et språk stemmen støtter. Modellen er ment å lese opp skrevet materiale; forståelse av en samtale og transkripsjon av et kildeopptak er andre lydoppgaver.\n\n### Ferdig stemme og stemme fra en prøve\n\nDet finnes to systemstemmer: en varm kvinnestemme og en livlig mannsstemme. De støtter kinesisk og engelsk. I tillegg tilbys mer enn 500 grunnstemmer og mulighet for å gjenskape en stemme fra en taleprøve. Produsenten anbefaler systemstemmene når stabil klang er viktig.\n\nEn stemme basert på en prøve støtter kinesisk med regionale uttalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malayisk, filippinsk og arabisk. Dette er språkstøtten i den aktuelle modusen og gjelder ikke automatisk hver ferdige stemme.\n\nKravene til prøven gjelder en egen måte å lage en stemme hos produsenten på; talesyntesen bruker en stemme som allerede er klargjort. Den klargjorte stemmen må passe til den valgte tekst-til-tale-modellen: en stemme fra en annen modell gir en syntesefeil hos produsenten. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grensen er 60 sekunder og 10 MB; minst fem sekunder sammenhengende tale kreves. WAV med 16-bits representasjon, MP3 og M4A støttes ved en samplingsfrekvens på minst 16 kHz. Én eller to kanaler tillates, men ved to brukes den første.\n\nTaleprøven må inneholde én stemme uten personer som snakker samtidig, musikk eller sang. Produsentens krav begrenser korte pauser i prøven til to sekunder. Dette bidrar til å skille ut klang og uttaletrekk som trengs i den videre syntesen. Styring av fremføring og gjenskaping av en stemme fra en prøve beskriver ulike sider av modellens virkemåte og kan brukes for å forme lyden i samme materiale.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "40f89352ffbfd9f2c4523379fe484967a481ed1d45a296b431f71e77afb09789",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "nb",
  "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=\"Lukk\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-audio-3.0-tts-plus</code><button type=\"button\" id=\"copy-id\">Kopier ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Seksjoner i modellkortet\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Inndata &amp; metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><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\">Talesyntese</button></div><div class=\"idline\"><label for=\"card-model-id\">Modell-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\">Start</h3><p class=\"mdesc-full\">En modell for uttrykksfull tekst-til-tale til videoer, lydbøker og stemmemateriale. Støtter styring av talestil og valg av en ferdig stemme eller en stemme laget fra en prøve.</p><dl class=\"card-io\" data-card-io><div><dt>Godkjente inndata</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelsen dekker modellens funksjoner. Tilgjengelige inndata, utdata og alternativer i Ailoot er oppført nedenfor for den valgte metoden.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus gjør tekst om til uttrykksfull tale. Alibaba retter modellen mot profesjonell opplesing av innhold, lydbøker, video og materiale med et gjenkjennelig stemmepreg. Inndata er tekst og utdata er lyd; lyden kan også leveres underveis i syntesen.</p><h4>Talestilen som del av oppgaven</h4><p>Fremføringen kan angis med instruksjoner i naturlig språk og detaljerte styringsmarkeringer. De bestemmer følelser, tone, karakter, tempo, volum og talestil. Dette gjør det mulig å styre fremføringen av samme setning, fra rolig fortelling til en mer energisk eller følelsespreget stil.</p><p>Uttrykksfullheten henger sammen med den valgte stemmen og tekstinnholdet. For stabil uttale må materialets språk være et språk stemmen støtter. Modellen er ment å lese opp skrevet materiale; forståelse av en samtale og transkripsjon av et kildeopptak er andre lydoppgaver.</p><h4>Ferdig stemme og stemme fra en prøve</h4><p>Det finnes to systemstemmer: en varm kvinnestemme og en livlig mannsstemme. De støtter kinesisk og engelsk. I tillegg tilbys mer enn 500 grunnstemmer og mulighet for å gjenskape en stemme fra en taleprøve. Produsenten anbefaler systemstemmene når stabil klang er viktig.</p><p>En stemme basert på en prøve støtter kinesisk med regionale uttalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malayisk, filippinsk og arabisk. Dette er språkstøtten i den aktuelle modusen og gjelder ikke automatisk hver ferdige stemme.</p><p>Kravene til prøven gjelder en egen måte å lage en stemme hos produsenten på; talesyntesen bruker en stemme som allerede er klargjort. Den klargjorte stemmen må passe til den valgte tekst-til-tale-modellen: en stemme fra en annen modell gir en syntesefeil hos produsenten. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grensen er 60 sekunder og 10 MB; minst fem sekunder sammenhengende tale kreves. WAV med 16-bits representasjon, MP3 og M4A støttes ved en samplingsfrekvens på minst 16 kHz. Én eller to kanaler tillates, men ved to brukes den første.</p><p>Taleprøven må inneholde én stemme uten personer som snakker samtidig, musikk eller sang. Produsentens krav begrenser korte pauser i prøven til to sekunder. Dette bidrar til å skille ut klang og uttaletrekk som trengs i den videre syntesen. Styring av fremføring og gjenskaping av en stemme fra en prøve beskriver ulike sider av modellens virkemåte og kan brukes for å forme lyden i samme materiale.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgjengelig i Ailoot · inndata &amp; metoder</h3><details class=\"card-method\" open><summary><b>Ailoot · Talesyntese</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Inndatatyper</dt><dd><code>text</code></dd></div><div><dt>Utdatatyper</dt><dd><code>speech</code></dd></div><div><dt>Utdataformat</dt><dd>Valgt mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Verdier &amp; grenser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrevd</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>qwen-audio-3.0-tts-plus</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrevd</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>Minste lengde: 1</div><div>Maksimal lengde: 600</div><div>Enhet: Unicode-tegn</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>Eksempler: longanlingxin, longanlufeng</div><div>Godkjent tilpasset mønster: ^qwen-audio-3\\.0-tts-plus-</div><div>Vilkår: Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>16 000, 24 000, 48 000</div><div>Enhet: Hz</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>24 000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinasjoner av inngående materialer</summary><p class=\"note-s\"><b>text_to_speech</b> · Påkrevd: input</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametere og livssyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>null</td></tr></tbody></table></div><p>Livssyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · faktisk returnert task_id eller oppføring i mediebiblioteket</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\">Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><h4>Satser for Ailoot-metoder</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Talesyntese</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Inndata</dt><dd>20,00 USD <em>per 1 million tegn</em></dd></div><div><dt>Utdata</dt><dd>0,00 USD <em>per forespørsel</em></dd></div></dl><p class=\"note-s\">20,00 USD per 1 million avregningstegn. Et CJK-ideogram regnes som 2 avregningstegn: 40,00 USD per 1 million ideogrammer. Vekt for øvrige Unicode-tegn: 1. Utgående lyd: 0,00 USD. </p><details class=\"note-s\"><summary>Eksakt betinget avregning fra katalogen</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 reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. <a href=\"/docs/nb/billing/reserve/\">Slik fungerer reservasjon og oppgjør →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelforespørsler</h3><h4>Ailoot · Talesyntese</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><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\">Taleeksempel</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopier kode\"><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\">Motta og lagre resultater</h3><h4>Ailoot · Talesyntese</h4><p class=\"note-s\">Valgt 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>Behold alle ferdige resultater</h5><p class=\"note-s\">Behold alle fullstendige returnerte svar, filer og innholdsdeler.</p><p class=\"note-s\">Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det opprinnelige svaret må kontrolleres</h5><p class=\"note-s\">Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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>Feil og neste trinn</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Vilkår</th><th>Neste trinn</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Vilkår\"><span class=\"card-cell-label\">Vilkår</span>Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi</td><td data-cell-label=\"Neste trinn\"><span class=\"card-cell-label\">Neste trinn</span>Korriger de angitte feltene før en ny opprettelsesforespørsel.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code>server_error</code></th><td data-cell-label=\"Vilkår\"><span class=\"card-cell-label\">Vilkår</span>Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres</td><td data-cell-label=\"Neste trinn\"><span class=\"card-cell-label\">Neste trinn</span>Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modellaliaser</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>Aliaser for metodestier</h4><p class=\"note-s\">Bruk metodestiene som vises ovenfor.</p><h4>Tilknyttede anroper-ID-er</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": "Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi",
                "http_status": 400,
                "recovery": "Korriger de angitte feltene før en ny opprettelsesforespørsel.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres",
                "http_status": null,
                "recovery": "Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.",
                "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": "Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus."
            },
            "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": "Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "Valgt 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-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.",
                "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": [
            "Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen."
          ],
          "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": "faktisk returnert task_id eller oppføring i mediebiblioteket",
                "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": "Talesyntese",
        "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=\"Lukk\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-tts</code><button type=\"button\" id=\"copy-id\">Kopier ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Seksjoner i modellkortet\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Inndata &amp; metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><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\">Talesyntese</button></div><div class=\"idline\"><label for=\"card-model-id\">Modell-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\">Start</h3><p class=\"mdesc-full\">En modell for uttrykksfull tekst-til-tale til videoer, lydbøker og stemmemateriale. Støtter styring av talestil og valg av en ferdig stemme eller en stemme laget fra en prøve.</p><dl class=\"card-io\" data-card-io><div><dt>Godkjente inndata</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelsen dekker modellens funksjoner. Tilgjengelige inndata, utdata og alternativer i Ailoot er oppført nedenfor for den valgte metoden.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus gjør tekst om til uttrykksfull tale. Alibaba retter modellen mot profesjonell opplesing av innhold, lydbøker, video og materiale med et gjenkjennelig stemmepreg. Inndata er tekst og utdata er lyd; lyden kan også leveres underveis i syntesen.</p><h4>Talestilen som del av oppgaven</h4><p>Fremføringen kan angis med instruksjoner i naturlig språk og detaljerte styringsmarkeringer. De bestemmer følelser, tone, karakter, tempo, volum og talestil. Dette gjør det mulig å styre fremføringen av samme setning, fra rolig fortelling til en mer energisk eller følelsespreget stil.</p><p>Uttrykksfullheten henger sammen med den valgte stemmen og tekstinnholdet. For stabil uttale må materialets språk være et språk stemmen støtter. Modellen er ment å lese opp skrevet materiale; forståelse av en samtale og transkripsjon av et kildeopptak er andre lydoppgaver.</p><h4>Ferdig stemme og stemme fra en prøve</h4><p>Det finnes to systemstemmer: en varm kvinnestemme og en livlig mannsstemme. De støtter kinesisk og engelsk. I tillegg tilbys mer enn 500 grunnstemmer og mulighet for å gjenskape en stemme fra en taleprøve. Produsenten anbefaler systemstemmene når stabil klang er viktig.</p><p>En stemme basert på en prøve støtter kinesisk med regionale uttalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malayisk, filippinsk og arabisk. Dette er språkstøtten i den aktuelle modusen og gjelder ikke automatisk hver ferdige stemme.</p><p>Kravene til prøven gjelder en egen måte å lage en stemme hos produsenten på; talesyntesen bruker en stemme som allerede er klargjort. Den klargjorte stemmen må passe til den valgte tekst-til-tale-modellen: en stemme fra en annen modell gir en syntesefeil hos produsenten. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grensen er 60 sekunder og 10 MB; minst fem sekunder sammenhengende tale kreves. WAV med 16-bits representasjon, MP3 og M4A støttes ved en samplingsfrekvens på minst 16 kHz. Én eller to kanaler tillates, men ved to brukes den første.</p><p>Taleprøven må inneholde én stemme uten personer som snakker samtidig, musikk eller sang. Produsentens krav begrenser korte pauser i prøven til to sekunder. Dette bidrar til å skille ut klang og uttaletrekk som trengs i den videre syntesen. Styring av fremføring og gjenskaping av en stemme fra en prøve beskriver ulike sider av modellens virkemåte og kan brukes for å forme lyden i samme materiale.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgjengelig i Ailoot · inndata &amp; metoder</h3><details class=\"card-method\" open><summary><b>Ailoot · Talesyntese</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Inndatatyper</dt><dd><code>text</code></dd></div><div><dt>Utdatatyper</dt><dd><code>speech</code></dd></div><div><dt>Utdataformat</dt><dd>Valgt mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Verdier &amp; grenser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrevd</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>qwen-tts</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrevd</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>Minste lengde: 1</div><div>Maksimal lengde: 600</div><div>Enhet: Unicode-tegn</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>Eksempler: longanlingxin, longanlufeng</div><div>Godkjent tilpasset mønster: ^qwen-audio-3\\.0-tts-plus-</div><div>Vilkår: Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>16 000, 24 000, 48 000</div><div>Enhet: Hz</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>24 000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinasjoner av inngående materialer</summary><p class=\"note-s\"><b>text_to_speech</b> · Påkrevd: input</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametere og livssyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>null</td></tr></tbody></table></div><p>Livssyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · faktisk returnert task_id eller oppføring i mediebiblioteket</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\">Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><h4>Satser for Ailoot-metoder</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Talesyntese</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Inndata</dt><dd>20,00 USD <em>per 1 million tegn</em></dd></div><div><dt>Utdata</dt><dd>0,00 USD <em>per forespørsel</em></dd></div></dl><p class=\"note-s\">20,00 USD per 1 million avregningstegn. Et CJK-ideogram regnes som 2 avregningstegn: 40,00 USD per 1 million ideogrammer. Vekt for øvrige Unicode-tegn: 1. Utgående lyd: 0,00 USD. </p><details class=\"note-s\"><summary>Eksakt betinget avregning fra katalogen</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 reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. <a href=\"/docs/nb/billing/reserve/\">Slik fungerer reservasjon og oppgjør →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelforespørsler</h3><h4>Ailoot · Talesyntese</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><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\">Taleeksempel</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopier kode\"><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\">Motta og lagre resultater</h3><h4>Ailoot · Talesyntese</h4><p class=\"note-s\">Valgt 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>Behold alle ferdige resultater</h5><p class=\"note-s\">Behold alle fullstendige returnerte svar, filer og innholdsdeler.</p><p class=\"note-s\">Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det opprinnelige svaret må kontrolleres</h5><p class=\"note-s\">Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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>Feil og neste trinn</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Vilkår</th><th>Neste trinn</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Vilkår\"><span class=\"card-cell-label\">Vilkår</span>Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi</td><td data-cell-label=\"Neste trinn\"><span class=\"card-cell-label\">Neste trinn</span>Korriger de angitte feltene før en ny opprettelsesforespørsel.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code>server_error</code></th><td data-cell-label=\"Vilkår\"><span class=\"card-cell-label\">Vilkår</span>Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres</td><td data-cell-label=\"Neste trinn\"><span class=\"card-cell-label\">Neste trinn</span>Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modellaliaser</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>Aliaser for metodestier</h4><p class=\"note-s\">Bruk metodestiene som vises ovenfor.</p><h4>Tilknyttede anroper-ID-er</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": "Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi",
                "http_status": 400,
                "recovery": "Korriger de angitte feltene før en ny opprettelsesforespørsel.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres",
                "http_status": null,
                "recovery": "Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.",
                "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": "Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus."
            },
            "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": "Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "Valgt 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-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.",
                "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": [
            "Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen."
          ],
          "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": "faktisk returnert task_id eller oppføring i mediebiblioteket",
                "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": "Talesyntese",
        "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=\"Lukk\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-tts-latest</code><button type=\"button\" id=\"copy-id\">Kopier ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Seksjoner i modellkortet\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Inndata &amp; metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><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\">Talesyntese</button></div><div class=\"idline\"><label for=\"card-model-id\">Modell-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\">Start</h3><p class=\"mdesc-full\">En modell for uttrykksfull tekst-til-tale til videoer, lydbøker og stemmemateriale. Støtter styring av talestil og valg av en ferdig stemme eller en stemme laget fra en prøve.</p><dl class=\"card-io\" data-card-io><div><dt>Godkjente inndata</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelsen dekker modellens funksjoner. Tilgjengelige inndata, utdata og alternativer i Ailoot er oppført nedenfor for den valgte metoden.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus gjør tekst om til uttrykksfull tale. Alibaba retter modellen mot profesjonell opplesing av innhold, lydbøker, video og materiale med et gjenkjennelig stemmepreg. Inndata er tekst og utdata er lyd; lyden kan også leveres underveis i syntesen.</p><h4>Talestilen som del av oppgaven</h4><p>Fremføringen kan angis med instruksjoner i naturlig språk og detaljerte styringsmarkeringer. De bestemmer følelser, tone, karakter, tempo, volum og talestil. Dette gjør det mulig å styre fremføringen av samme setning, fra rolig fortelling til en mer energisk eller følelsespreget stil.</p><p>Uttrykksfullheten henger sammen med den valgte stemmen og tekstinnholdet. For stabil uttale må materialets språk være et språk stemmen støtter. Modellen er ment å lese opp skrevet materiale; forståelse av en samtale og transkripsjon av et kildeopptak er andre lydoppgaver.</p><h4>Ferdig stemme og stemme fra en prøve</h4><p>Det finnes to systemstemmer: en varm kvinnestemme og en livlig mannsstemme. De støtter kinesisk og engelsk. I tillegg tilbys mer enn 500 grunnstemmer og mulighet for å gjenskape en stemme fra en taleprøve. Produsenten anbefaler systemstemmene når stabil klang er viktig.</p><p>En stemme basert på en prøve støtter kinesisk med regionale uttalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malayisk, filippinsk og arabisk. Dette er språkstøtten i den aktuelle modusen og gjelder ikke automatisk hver ferdige stemme.</p><p>Kravene til prøven gjelder en egen måte å lage en stemme hos produsenten på; talesyntesen bruker en stemme som allerede er klargjort. Den klargjorte stemmen må passe til den valgte tekst-til-tale-modellen: en stemme fra en annen modell gir en syntesefeil hos produsenten. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grensen er 60 sekunder og 10 MB; minst fem sekunder sammenhengende tale kreves. WAV med 16-bits representasjon, MP3 og M4A støttes ved en samplingsfrekvens på minst 16 kHz. Én eller to kanaler tillates, men ved to brukes den første.</p><p>Taleprøven må inneholde én stemme uten personer som snakker samtidig, musikk eller sang. Produsentens krav begrenser korte pauser i prøven til to sekunder. Dette bidrar til å skille ut klang og uttaletrekk som trengs i den videre syntesen. Styring av fremføring og gjenskaping av en stemme fra en prøve beskriver ulike sider av modellens virkemåte og kan brukes for å forme lyden i samme materiale.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgjengelig i Ailoot · inndata &amp; metoder</h3><details class=\"card-method\" open><summary><b>Ailoot · Talesyntese</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Inndatatyper</dt><dd><code>text</code></dd></div><div><dt>Utdatatyper</dt><dd><code>speech</code></dd></div><div><dt>Utdataformat</dt><dd>Valgt mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Verdier &amp; grenser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrevd</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>qwen-tts-latest</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrevd</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>Minste lengde: 1</div><div>Maksimal lengde: 600</div><div>Enhet: Unicode-tegn</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>Eksempler: longanlingxin, longanlufeng</div><div>Godkjent tilpasset mønster: ^qwen-audio-3\\.0-tts-plus-</div><div>Vilkår: Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfritt</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>16 000, 24 000, 48 000</div><div>Enhet: Hz</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>24 000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinasjoner av inngående materialer</summary><p class=\"note-s\"><b>text_to_speech</b> · Påkrevd: input</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametere og livssyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</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=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>null</td></tr></tbody></table></div><p>Livssyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · faktisk returnert task_id eller oppføring i mediebiblioteket</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\">Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><h4>Satser for Ailoot-metoder</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Talesyntese</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Inndata</dt><dd>20,00 USD <em>per 1 million tegn</em></dd></div><div><dt>Utdata</dt><dd>0,00 USD <em>per forespørsel</em></dd></div></dl><p class=\"note-s\">20,00 USD per 1 million avregningstegn. Et CJK-ideogram regnes som 2 avregningstegn: 40,00 USD per 1 million ideogrammer. Vekt for øvrige Unicode-tegn: 1. Utgående lyd: 0,00 USD. </p><details class=\"note-s\"><summary>Eksakt betinget avregning fra katalogen</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 reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. <a href=\"/docs/nb/billing/reserve/\">Slik fungerer reservasjon og oppgjør →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelforespørsler</h3><h4>Ailoot · Talesyntese</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><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\">Taleeksempel</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopier kode\"><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\">Motta og lagre resultater</h3><h4>Ailoot · Talesyntese</h4><p class=\"note-s\">Valgt 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>Behold alle ferdige resultater</h5><p class=\"note-s\">Behold alle fullstendige returnerte svar, filer og innholdsdeler.</p><p class=\"note-s\">Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det opprinnelige svaret må kontrolleres</h5><p class=\"note-s\">Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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>Feil og neste trinn</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Vilkår</th><th>Neste trinn</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Vilkår\"><span class=\"card-cell-label\">Vilkår</span>Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi</td><td data-cell-label=\"Neste trinn\"><span class=\"card-cell-label\">Neste trinn</span>Korriger de angitte feltene før en ny opprettelsesforespørsel.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code>server_error</code></th><td data-cell-label=\"Vilkår\"><span class=\"card-cell-label\">Vilkår</span>Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres</td><td data-cell-label=\"Neste trinn\"><span class=\"card-cell-label\">Neste trinn</span>Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modellaliaser</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>Aliaser for metodestier</h4><p class=\"note-s\">Bruk metodestiene som vises ovenfor.</p><h4>Tilknyttede anroper-ID-er</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": "Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi",
                "http_status": 400,
                "recovery": "Korriger de angitte feltene før en ny opprettelsesforespørsel.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres",
                "http_status": null,
                "recovery": "Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.",
                "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": "Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus."
            },
            "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": "Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "Valgt 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-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.",
                "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": [
            "Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen."
          ],
          "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": "faktisk returnert task_id eller oppføring i mediebiblioteket",
                "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": "Talesyntese",
        "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": "dd513b214f22b6b5efb7fa97b92a197df85125aa44804e53229c8a93402d26d7",
    "input_html_sha256": "99c15e56727407d182b05fa994caf39d284ad584d7f67c87127e282e95f9bb3a",
    "private_audit_sha256": "96c857e263221a1400343131e2ea269de4a54ea424de54a410a671c1347de6e2",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/nb/qwen-audio-3-0-tts-plus/",
    "description": "En modell for uttrykksfull tekst-til-tale til videoer, lydbøker og stemmemateriale. Støtter styring av talestil og valg av en ferdig stemme eller en stemme laget fra en prøve.",
    "locale": "nb",
    "md_url": "https://ailoot.ai/models/nb/qwen-audio-3-0-tts-plus/index.md",
    "title": "qwen-audio-3.0-tts-plus — Ailoot",
    "url": "https://ailoot.ai/models/nb/qwen-audio-3-0-tts-plus/"
  },
  "rawModel": {
    "about": "Qwen-Audio-3.0-TTS-Plus gjør tekst om til uttrykksfull tale. Alibaba retter modellen mot profesjonell opplesing av innhold, lydbøker, video og materiale med et gjenkjennelig stemmepreg. Inndata er tekst og utdata er lyd; lyden kan også leveres underveis i syntesen.\n\n### Talestilen som del av oppgaven\n\nFremføringen kan angis med instruksjoner i naturlig språk og detaljerte styringsmarkeringer. De bestemmer følelser, tone, karakter, tempo, volum og talestil. Dette gjør det mulig å styre fremføringen av samme setning, fra rolig fortelling til en mer energisk eller følelsespreget stil.\n\nUttrykksfullheten henger sammen med den valgte stemmen og tekstinnholdet. For stabil uttale må materialets språk være et språk stemmen støtter. Modellen er ment å lese opp skrevet materiale; forståelse av en samtale og transkripsjon av et kildeopptak er andre lydoppgaver.\n\n### Ferdig stemme og stemme fra en prøve\n\nDet finnes to systemstemmer: en varm kvinnestemme og en livlig mannsstemme. De støtter kinesisk og engelsk. I tillegg tilbys mer enn 500 grunnstemmer og mulighet for å gjenskape en stemme fra en taleprøve. Produsenten anbefaler systemstemmene når stabil klang er viktig.\n\nEn stemme basert på en prøve støtter kinesisk med regionale uttalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malayisk, filippinsk og arabisk. Dette er språkstøtten i den aktuelle modusen og gjelder ikke automatisk hver ferdige stemme.\n\nKravene til prøven gjelder en egen måte å lage en stemme hos produsenten på; talesyntesen bruker en stemme som allerede er klargjort. Den klargjorte stemmen må passe til den valgte tekst-til-tale-modellen: en stemme fra en annen modell gir en syntesefeil hos produsenten. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grensen er 60 sekunder og 10 MB; minst fem sekunder sammenhengende tale kreves. WAV med 16-bits representasjon, MP3 og M4A støttes ved en samplingsfrekvens på minst 16 kHz. Én eller to kanaler tillates, men ved to brukes den første.\n\nTaleprøven må inneholde én stemme uten personer som snakker samtidig, musikk eller sang. Produsentens krav begrenser korte pauser i prøven til to sekunder. Dette bidrar til å skille ut klang og uttaletrekk som trengs i den videre syntesen. Styring av fremføring og gjenskaping av en stemme fra en prøve beskriver ulike sider av modellens virkemåte og kan brukes for å forme lyden i samme materiale.",
    "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": "Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi",
                "http_status": 400,
                "recovery": "Korriger de angitte feltene før en ny opprettelsesforespørsel.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres",
                "http_status": null,
                "recovery": "Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.",
                "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": "Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus."
            },
            "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": "Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "Valgt 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-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.",
                "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": [
            "Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen."
          ],
          "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": "faktisk returnert task_id eller oppføring i mediebiblioteket",
                "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": "Talesyntese",
        "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": "Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi",
                "http_status": 400,
                "recovery": "Korriger de angitte feltene før en ny opprettelsesforespørsel.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres",
                "http_status": null,
                "recovery": "Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.",
                "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": "Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus."
            },
            "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": "Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "Valgt 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-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.",
                "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": [
            "Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen."
          ],
          "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": "faktisk returnert task_id eller oppføring i mediebiblioteket",
                "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": "Talesyntese",
        "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": "Ugyldige påkrevde felter, materialrepresentasjon eller parameterverdi",
                "http_status": 400,
                "recovery": "Korriger de angitte feltene før en ny opprettelsesforespørsel.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerte svaret angir at operasjonen eller resultatet må kontrolleres",
                "http_status": null,
                "recovery": "Bevar den opprinnelige returnerte operasjons-/oppgave-ID-en, forespørselshodene og svaret; fortsett å lese den opprinnelige operasjonen på de støttede måtene. Ikke send opprettelsesforespørselen på nytt.",
                "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": "Bevar opprinnelig operation_id/X-Client-Request-ID for avstemming uten ny innsending; det finnes ingen egen rute for å spørre etter lydstatus."
            },
            "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": "Bevar hele det binære resultatet og svarhodene. Hvis JSON eller flere utdata returneres, bevar hvert dataelement og hent innholdet fra hver faktiske signerte ressurs-URL.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "Valgt 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-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske egendefinerte stemme-ID-er med det eksakte prefikset qwen-audio-3.0-tts-plus- godtas.",
                "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": [
            "Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen."
          ],
          "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": "faktisk returnert task_id eller oppføring i mediebiblioteket",
                "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": "Talesyntese",
        "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": "En modell for uttrykksfull tekst-til-tale til videoer, lydbøker og stemmemateriale. Støtter styring av talestil og valg av en ferdig stemme eller en stemme laget fra en prøve."
  },
  "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": "En modell for uttrykksfull tekst-til-tale til videoer, lydbøker og stemmemateriale. Støtter styring av talestil og valg av en ferdig stemme eller en stemme laget fra en prøve.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "26fd623cff898e211f407f69384ec226a9446049bd14069bfc808cc66097b12e",
    "renderer_sha256": "c8cb5a92c10b47373d294dee7465d66796cd4710c6626fd81459dc0625fc6d26"
  },
  "sourceRevision": "0cd224c6ffc2559a107c174244dbb522cb35626ece9bc2d0a9b7810092075e21"
}
