{
  "aboutHtml": "<h4>Rask tale for interaktive svar</h4><p>Speech 02 Turbo er laget for interaktiv talesyntese. Produsenten beskriver en kombinasjon av hastighet, stabil rytme og naturlig lyd; bruksområdene omfatter talesvar, spillreplikker og interaktivt innhold. Modellen tar imot tekst og gir talelyd.</p><h4>Valg av stemmeuttrykk</h4><p>Speech 02-familien gjør det mulig å kombinere stemme, språk, aksent og følelsesuttrykk. En autoregressiv Transformer og en talerenkoder som trenes sammen, knytter stemmeklangen til innholdet. Tekst kan syntetiseres med en ferdig stemme; oppretting av en ny klonet stemme hører til separat klargjøring.</p><p>Modellen velger selv følelsesintonasjon ut fra teksten eller bruker en angitt tilstand: glede, tristhet, sinne, frykt, avsky, overraskelse eller ro. Hastighet, tonehøyde og lydstyrke kan også styres for å tilpasse replikken til ønsket tempo i samhandlingen.</p><h4>Språk og uttale av ord</h4><p>Russisk tale og andre språk støttes, inkludert engelsk, kinesisk, kantonesisk, japansk, koreansk, fransk, tysk, spansk, portugisisk, tyrkisk, arabisk og ukrainsk. Den gjeldende spesifikasjonen for Speech 02 utelater uttrykkelig persisk, filippinsk og tamil.</p><p>Uttalen kan presiseres med en erstatningsordliste, internasjonal fonetisk angivelse, kinesisk pinyin og japanske uttalevarianter. Pauser mellom talte deler angis innenfor <strong>0,01–99,99 sekunder</strong>. Pauselengden angis med to desimalers nøyaktighet; markørene plasseres mellom utsnittene som skal uttales, og ikke rett etter hverandre. Modellen tilbyr hastighet på <strong>0,5–2</strong>, lydstyrke over 0 og opptil <strong>10</strong>, og endring av tonehøyde fra <strong>−12 til 12</strong>.</p><h4>Lyd for avspilling</h4><p>Synkrone inndata er begrenset til tekst med færre enn <strong>10 000 tegn</strong>; for tekst på over 3000 tegn anbefaler produsenten gradvise utdata. Modellens funksjoner omfatter MP3, WAV, FLAC og PCM; de generelle innstillingene beskriver også Opus og G.711 μ-law, med én eller to lydkanaler.</p><p>Dette Ailoot-kortet tar imot tekst og returnerer tale. Turbos hastighet beskriver modellvariantens formål; varigheten på et konkret svar og tilgjengeligheten til avanserte formater avhenger av valgt bruksmåte.</p><p>Ytterligere lydinnstillinger omfatter samplingsfrekvensene <strong>8, 16, 22,05, 24, 32 og 44,1 kHz</strong>. For MP3 er bitratene <strong>32, 64, 128 eller 256 kbit/s</strong> tilgjengelige. Stemmeklangen kan også endres, og én effekt kan brukes: romlig ekko, hallekko, telefonlyd eller robotstemme. Stemmeendringseffekter støttes for MP3, WAV og FLAC når lyden mottas samlet, og ved strømming bare for MP3. G.711 μ-law-formatene bruker en samplingsfrekvens på 8 kHz. Disse funksjonene gjelder MiniMax&#39; synteseinnstillinger.</p><p>Produsenten tilbyr synkronisering av tale og tekst: tidsstempler per setning, per ord eller per ord ved gradvise utdata. Et slikt resultat bidrar til å samordne uttalen med visningen av teksten. Denne ekstra funksjonen krever støtte for det aktuelle svarformatet.</p>",
  "aboutText": "### Rask tale for interaktive svar\n\nSpeech 02 Turbo er laget for interaktiv talesyntese. Produsenten beskriver en kombinasjon av hastighet, stabil rytme og naturlig lyd; bruksområdene omfatter talesvar, spillreplikker og interaktivt innhold. Modellen tar imot tekst og gir talelyd.\n\n### Valg av stemmeuttrykk\n\nSpeech 02-familien gjør det mulig å kombinere stemme, språk, aksent og følelsesuttrykk. En autoregressiv Transformer og en talerenkoder som trenes sammen, knytter stemmeklangen til innholdet. Tekst kan syntetiseres med en ferdig stemme; oppretting av en ny klonet stemme hører til separat klargjøring.\n\nModellen velger selv følelsesintonasjon ut fra teksten eller bruker en angitt tilstand: glede, tristhet, sinne, frykt, avsky, overraskelse eller ro. Hastighet, tonehøyde og lydstyrke kan også styres for å tilpasse replikken til ønsket tempo i samhandlingen.\n\n### Språk og uttale av ord\n\nRussisk tale og andre språk støttes, inkludert engelsk, kinesisk, kantonesisk, japansk, koreansk, fransk, tysk, spansk, portugisisk, tyrkisk, arabisk og ukrainsk. Den gjeldende spesifikasjonen for Speech 02 utelater uttrykkelig persisk, filippinsk og tamil.\n\nUttalen kan presiseres med en erstatningsordliste, internasjonal fonetisk angivelse, kinesisk pinyin og japanske uttalevarianter. Pauser mellom talte deler angis innenfor **0,01–99,99 sekunder**. Pauselengden angis med to desimalers nøyaktighet; markørene plasseres mellom utsnittene som skal uttales, og ikke rett etter hverandre. Modellen tilbyr hastighet på **0,5–2**, lydstyrke over 0 og opptil **10**, og endring av tonehøyde fra **−12 til 12**.\n\n### Lyd for avspilling\n\nSynkrone inndata er begrenset til tekst med færre enn **10 000 tegn**; for tekst på over 3000 tegn anbefaler produsenten gradvise utdata. Modellens funksjoner omfatter MP3, WAV, FLAC og PCM; de generelle innstillingene beskriver også Opus og G.711 μ-law, med én eller to lydkanaler.\n\nDette Ailoot-kortet tar imot tekst og returnerer tale. Turbos hastighet beskriver modellvariantens formål; varigheten på et konkret svar og tilgjengeligheten til avanserte formater avhenger av valgt bruksmåte.\n\nYtterligere lydinnstillinger omfatter samplingsfrekvensene **8, 16, 22,05, 24, 32 og 44,1 kHz**. For MP3 er bitratene **32, 64, 128 eller 256 kbit/s** tilgjengelige. Stemmeklangen kan også endres, og én effekt kan brukes: romlig ekko, hallekko, telefonlyd eller robotstemme. Stemmeendringseffekter støttes for MP3, WAV og FLAC når lyden mottas samlet, og ved strømming bare for MP3. G.711 μ-law-formatene bruker en samplingsfrekvens på 8 kHz. Disse funksjonene gjelder MiniMax' synteseinnstillinger.\n\nProdusenten tilbyr synkronisering av tale og tekst: tidsstempler per setning, per ord eller per ord ved gradvise utdata. Et slikt resultat bidrar til å samordne uttalen med visningen av teksten. Denne ekstra funksjonen krever støtte for det aktuelle svarformatet.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f79c2921bdcef8e72bf3c613e3a921eff273a1f0864ab285465763d19c86e5e3",
    "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\">MM</span><h2 id=\"sheet-title\">speech-02-turbo</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Lukk\">×</button></div><div class=\"idline\"><span>MiniMax /</span><code>speech-02-turbo</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|speech-02-turbo\">Talesyntese</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Start</h3><p class=\"mdesc-full\">Speech-02 Turbo er laget for rask talesyntese med stabil rytme og tale på flere språk.</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\"><h4>Rask tale for interaktive svar</h4><p>Speech 02 Turbo er laget for interaktiv talesyntese. Produsenten beskriver en kombinasjon av hastighet, stabil rytme og naturlig lyd; bruksområdene omfatter talesvar, spillreplikker og interaktivt innhold. Modellen tar imot tekst og gir talelyd.</p><h4>Valg av stemmeuttrykk</h4><p>Speech 02-familien gjør det mulig å kombinere stemme, språk, aksent og følelsesuttrykk. En autoregressiv Transformer og en talerenkoder som trenes sammen, knytter stemmeklangen til innholdet. Tekst kan syntetiseres med en ferdig stemme; oppretting av en ny klonet stemme hører til separat klargjøring.</p><p>Modellen velger selv følelsesintonasjon ut fra teksten eller bruker en angitt tilstand: glede, tristhet, sinne, frykt, avsky, overraskelse eller ro. Hastighet, tonehøyde og lydstyrke kan også styres for å tilpasse replikken til ønsket tempo i samhandlingen.</p><h4>Språk og uttale av ord</h4><p>Russisk tale og andre språk støttes, inkludert engelsk, kinesisk, kantonesisk, japansk, koreansk, fransk, tysk, spansk, portugisisk, tyrkisk, arabisk og ukrainsk. Den gjeldende spesifikasjonen for Speech 02 utelater uttrykkelig persisk, filippinsk og tamil.</p><p>Uttalen kan presiseres med en erstatningsordliste, internasjonal fonetisk angivelse, kinesisk pinyin og japanske uttalevarianter. Pauser mellom talte deler angis innenfor <strong>0,01–99,99 sekunder</strong>. Pauselengden angis med to desimalers nøyaktighet; markørene plasseres mellom utsnittene som skal uttales, og ikke rett etter hverandre. Modellen tilbyr hastighet på <strong>0,5–2</strong>, lydstyrke over 0 og opptil <strong>10</strong>, og endring av tonehøyde fra <strong>−12 til 12</strong>.</p><h4>Lyd for avspilling</h4><p>Synkrone inndata er begrenset til tekst med færre enn <strong>10 000 tegn</strong>; for tekst på over 3000 tegn anbefaler produsenten gradvise utdata. Modellens funksjoner omfatter MP3, WAV, FLAC og PCM; de generelle innstillingene beskriver også Opus og G.711 μ-law, med én eller to lydkanaler.</p><p>Dette Ailoot-kortet tar imot tekst og returnerer tale. Turbos hastighet beskriver modellvariantens formål; varigheten på et konkret svar og tilgjengeligheten til avanserte formater avhenger av valgt bruksmåte.</p><p>Ytterligere lydinnstillinger omfatter samplingsfrekvensene <strong>8, 16, 22,05, 24, 32 og 44,1 kHz</strong>. For MP3 er bitratene <strong>32, 64, 128 eller 256 kbit/s</strong> tilgjengelige. Stemmeklangen kan også endres, og én effekt kan brukes: romlig ekko, hallekko, telefonlyd eller robotstemme. Stemmeendringseffekter støttes for MP3, WAV og FLAC når lyden mottas samlet, og ved strømming bare for MP3. G.711 μ-law-formatene bruker en samplingsfrekvens på 8 kHz. Disse funksjonene gjelder MiniMax&#39; synteseinnstillinger.</p><p>Produsenten tilbyr synkronisering av tale og tekst: tidsstempler per setning, per ord eller per ord ved gradvise utdata. Et slikt resultat bidrar til å samordne uttalen med visningen av teksten. Denne ekstra funksjonen krever støtte for det aktuelle svarformatet.</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>mp3</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>speech-02-turbo</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 (eksklusive): 10 000</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>Påkrevd</td><td data-cell-label=\"Verdier &amp; grenser\"><span class=\"card-cell-label\">Verdier &amp; grenser</span><div>Mønster: ^[A-Za-z0-9_-]{1,128}$</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\">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</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>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>60,00 USD <em>per 1 million tegn</em></dd></div></dl></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-468-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-468-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-468-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-468-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\n: &quot;${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;speech-02-turbo&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\nimport re\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nif not re.fullmatch(r&quot;[A-Za-z0-9_-]{1,128}&quot;,voice):raise SystemExit(&quot;Set an actual accepted voice ID&quot;)\np[&quot;voice&quot;]=voice\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\">mp3</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=speech-02-turbo&amp;route=Core&amp;caller=speech-02-turbo&amp;fmt=speech\"><code>speech-02-turbo</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=speech-02-turbo&amp;route=Core&amp;caller=speech-02-turbo&amp;fmt=speech\"><code>speech-02-turbo</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "speech-02-turbo",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "speech-02-turbo",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|speech-02-turbo",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "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": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "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": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-02-turbo"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "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\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-02-turbo\", \"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\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\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": 60,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-02-turbo",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 60
          }
        ]
      }
    }
  ],
  "model_id": "speech-02-turbo",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "3f78df83deadddd9ef7fced8332fbc28adf2b1ab8f903319c4f5c8bb94e7ac48",
    "input_html_sha256": "c7ca0ecb6bc4f3eee572e71a40558dfa3953b05e4b8b5c63224e5d97aa000f36",
    "private_audit_sha256": "12fc774d5f0b76be5d86f1244bb955e9b103c980a632917049d2e4c38bfe30a0",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/nb/speech-02-turbo/",
    "description": "Speech-02 Turbo er laget for rask talesyntese med stabil rytme og tale på flere språk.",
    "locale": "nb",
    "md_url": "https://ailoot.ai/models/nb/speech-02-turbo/index.md",
    "title": "speech-02-turbo — Ailoot",
    "url": "https://ailoot.ai/models/nb/speech-02-turbo/"
  },
  "rawModel": {
    "about": "### Rask tale for interaktive svar\n\nSpeech 02 Turbo er laget for interaktiv talesyntese. Produsenten beskriver en kombinasjon av hastighet, stabil rytme og naturlig lyd; bruksområdene omfatter talesvar, spillreplikker og interaktivt innhold. Modellen tar imot tekst og gir talelyd.\n\n### Valg av stemmeuttrykk\n\nSpeech 02-familien gjør det mulig å kombinere stemme, språk, aksent og følelsesuttrykk. En autoregressiv Transformer og en talerenkoder som trenes sammen, knytter stemmeklangen til innholdet. Tekst kan syntetiseres med en ferdig stemme; oppretting av en ny klonet stemme hører til separat klargjøring.\n\nModellen velger selv følelsesintonasjon ut fra teksten eller bruker en angitt tilstand: glede, tristhet, sinne, frykt, avsky, overraskelse eller ro. Hastighet, tonehøyde og lydstyrke kan også styres for å tilpasse replikken til ønsket tempo i samhandlingen.\n\n### Språk og uttale av ord\n\nRussisk tale og andre språk støttes, inkludert engelsk, kinesisk, kantonesisk, japansk, koreansk, fransk, tysk, spansk, portugisisk, tyrkisk, arabisk og ukrainsk. Den gjeldende spesifikasjonen for Speech 02 utelater uttrykkelig persisk, filippinsk og tamil.\n\nUttalen kan presiseres med en erstatningsordliste, internasjonal fonetisk angivelse, kinesisk pinyin og japanske uttalevarianter. Pauser mellom talte deler angis innenfor **0,01–99,99 sekunder**. Pauselengden angis med to desimalers nøyaktighet; markørene plasseres mellom utsnittene som skal uttales, og ikke rett etter hverandre. Modellen tilbyr hastighet på **0,5–2**, lydstyrke over 0 og opptil **10**, og endring av tonehøyde fra **−12 til 12**.\n\n### Lyd for avspilling\n\nSynkrone inndata er begrenset til tekst med færre enn **10 000 tegn**; for tekst på over 3000 tegn anbefaler produsenten gradvise utdata. Modellens funksjoner omfatter MP3, WAV, FLAC og PCM; de generelle innstillingene beskriver også Opus og G.711 μ-law, med én eller to lydkanaler.\n\nDette Ailoot-kortet tar imot tekst og returnerer tale. Turbos hastighet beskriver modellvariantens formål; varigheten på et konkret svar og tilgjengeligheten til avanserte formater avhenger av valgt bruksmåte.\n\nYtterligere lydinnstillinger omfatter samplingsfrekvensene **8, 16, 22,05, 24, 32 og 44,1 kHz**. For MP3 er bitratene **32, 64, 128 eller 256 kbit/s** tilgjengelige. Stemmeklangen kan også endres, og én effekt kan brukes: romlig ekko, hallekko, telefonlyd eller robotstemme. Stemmeendringseffekter støttes for MP3, WAV og FLAC når lyden mottas samlet, og ved strømming bare for MP3. G.711 μ-law-formatene bruker en samplingsfrekvens på 8 kHz. Disse funksjonene gjelder MiniMax' synteseinnstillinger.\n\nProdusenten tilbyr synkronisering av tale og tekst: tidsstempler per setning, per ord eller per ord ved gradvise utdata. Et slikt resultat bidrar til å samordne uttalen med visningen av teksten. Denne ekstra funksjonen krever støtte for det aktuelle svarformatet.",
    "alias_of": null,
    "aliases": [],
    "author": "MiniMax",
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "speech-02-turbo",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "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": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "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": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-02-turbo"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "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\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-02-turbo\", \"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\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\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": 60,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-02-turbo",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 60
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "speech-02-turbo",
        "request_model_id": "speech-02-turbo",
        "route_label": "Core"
      }
    ],
    "name": "speech-02-turbo",
    "price": {
      "in": 60,
      "in_label": "per 1 million characters",
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Speech-02 Turbo er laget for rask talesyntese med stabil rytme og tale på flere språk."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Speech-02 Turbo er laget for rask talesyntese med stabil rytme og tale på flere språk.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "87dc99dd50fb881a836501d3e91167885adc673deaf9fc6bdedafea4343b2ab1",
    "renderer_sha256": "c8cb5a92c10b47373d294dee7465d66796cd4710c6626fd81459dc0625fc6d26"
  },
  "sourceRevision": "5ce4dd7cf325426edb694f6940176cde837938ef09dfcb7c580182ac37355db6"
}
