{
  "aboutHtml": "<p>MAI-Voice-2.1-Flash er Microsoft AIs promptstyrte tekst-til-tale-modell laget for muntlig interaksjon med rask respons. Produsenten retter den mot taleassistenter, kundestøttesamtaler og telefonmenyer. Den genererer naturlig, uttrykksfull tale på tjuetre språk, med kontroll over tone og fremføring. Flash er versjonen rettet mot direkte respons; den separat navngitte MAI-Voice-2.1 prioriterer detaljert uttrykk og lydgjengivelse for lengre innhold.</p><h4>Tekst, taler og språk</h4><p>Inndata er teksten som skal sies, med en valgt stemme og valgfrie uttrykksinstruksjoner i SSML. Den administrerte stemmekatalogen skiller mellom taler, lokal variant og modellversjon. Harper og Grant er eksempler på navngitte talere med språkspesifikke oppføringer. Bruk teksten på det tiltenkte målspråket og velg riktig lokal variant; en ferdig engelsk hilsen og en spansk forklaring er separate muntlige avsnitt, hver med sin egen ordlyd.</p><p>Modellkortet dokumenterer en konsistent stemmeidentitet på tvers av støttede språk og flere talere til dialog. Dette kan støtte en applikasjon som trenger én gjenkjennelig forteller på tvers av lokaliserte meldinger eller en kort dialog med ulike roller. Tildel replikkene eksplisitt til de tiltenkte talerne og behold tildelingene. Lyden er den muntlige versjonen av manuset, ikke et nytt svar laget fra et åpent spørsmål.</p><h4>Tone og talestil</h4><p>Microsoft dokumenterer kontroll av følelse og fremføring på setnings- og samtaleturnivå gjennom SSML. Tilgjengelige stiler avhenger av valgt stemme. Den administrerte katalogen omfatter oppgavestiler som narrator, educational og customer_call_center, sammen med uttrykksstiler for bestemte talere. Den amerikanske Harper-oppføringen omfatter for eksempel joyful og relieved. Velg en stil som støttes av stemmen i stedet for å anta at hver taler godtar samme sett.</p><p>En praktisk kundestøttereplikk er: «Jeg kan hjelpe deg med å finne riktig dokument. Fortell meg tittelen, eller beskriv emnet.» Hold forespørselen kort nok til at lytteren kan handle, og velg en rolig eller oppmuntrende fremføring som passer til interaksjonen. Til en læringsaktivitet skriver du forklaringen og neste spørsmål som separate muntlige enheter. Uttrykksfullhet tjener betydningen når manuset gjør skiftet i hensikt tydelig.</p><h4>Strømming og lydlevering</h4><p>Flash-modellkortet dokumenterer uttrykkelig strømmede utdata til direkte dialog, inkludert arbeidsflyter som håndterer at en lytter snakker over et svar. Applikasjonen kan spille lyd mens den kommer og koordinere avbrytelsen og neste samtaletur. Dette gjør timingen av den muntlige meldingen til en del av interaksjonen i stedet for å kreve at hvert svar først forberedes som et fullstendig opptak.</p><p>Produsenten lar syntesearbeidsflyten angi utdataformat. Det publiserte eksemplet lager en mono-MP3-fil ved 24 kHz og 160 kbit/s. Dette er én dokumentert utdatakonfigurasjon, ikke en fast begrensning på innebygd format. Velg en lydrepresentasjon den tiltenkte avspillingsveien godtar, og behold taler og muntlig ordlyd tilgjengelig for gjennomgang av resultatet.</p><h4>Valgfri modus for referansestemme</h4><p>Microsofts modus for tilpasset stemme kan etterligne en taler som har samtykket, fra et referanseklipp på fem til seksti sekunder uten finjustering. Modellkortet anbefaler naturlig samtalepreget fremføring med moderat energi fordi referansen påvirker den genererte fremføringen. Modusen har en separat prosess for produsentgodkjenning og innspilt samtykke; forhåndsdefinerte bibliotekstemmer er en egen forberedelsesvei.</p><p>Til en referanse som skal definere en merkeforteller, bruker du et rent, representativt avsnitt og avgjør hvilken fremføring som skal videreføres til det nye manuset. Til forhåndsdefinert tale forbereder du faktiske navn, kommandoer og målspråkfraser applikasjonen skal bruke. Lytt til avsnittene med den valgte stemmen og undersøk overgangen mellom samtaleturer. Det nyttige resultatet er uttrykksfull muntlig interaksjon med en bevisst taler, tydelig tekst og lyd tilpasset lytterens avspillingsmiljø.</p>",
  "aboutText": "MAI-Voice-2.1-Flash er Microsoft AIs promptstyrte tekst-til-tale-modell laget for muntlig interaksjon med rask respons. Produsenten retter den mot taleassistenter, kundestøttesamtaler og telefonmenyer. Den genererer naturlig, uttrykksfull tale på tjuetre språk, med kontroll over tone og fremføring. Flash er versjonen rettet mot direkte respons; den separat navngitte MAI-Voice-2.1 prioriterer detaljert uttrykk og lydgjengivelse for lengre innhold.\n\n### Tekst, taler og språk\n\nInndata er teksten som skal sies, med en valgt stemme og valgfrie uttrykksinstruksjoner i SSML. Den administrerte stemmekatalogen skiller mellom taler, lokal variant og modellversjon. Harper og Grant er eksempler på navngitte talere med språkspesifikke oppføringer. Bruk teksten på det tiltenkte målspråket og velg riktig lokal variant; en ferdig engelsk hilsen og en spansk forklaring er separate muntlige avsnitt, hver med sin egen ordlyd.\n\nModellkortet dokumenterer en konsistent stemmeidentitet på tvers av støttede språk og flere talere til dialog. Dette kan støtte en applikasjon som trenger én gjenkjennelig forteller på tvers av lokaliserte meldinger eller en kort dialog med ulike roller. Tildel replikkene eksplisitt til de tiltenkte talerne og behold tildelingene. Lyden er den muntlige versjonen av manuset, ikke et nytt svar laget fra et åpent spørsmål.\n\n### Tone og talestil\n\nMicrosoft dokumenterer kontroll av følelse og fremføring på setnings- og samtaleturnivå gjennom SSML. Tilgjengelige stiler avhenger av valgt stemme. Den administrerte katalogen omfatter oppgavestiler som narrator, educational og customer_call_center, sammen med uttrykksstiler for bestemte talere. Den amerikanske Harper-oppføringen omfatter for eksempel joyful og relieved. Velg en stil som støttes av stemmen i stedet for å anta at hver taler godtar samme sett.\n\nEn praktisk kundestøttereplikk er: «Jeg kan hjelpe deg med å finne riktig dokument. Fortell meg tittelen, eller beskriv emnet.» Hold forespørselen kort nok til at lytteren kan handle, og velg en rolig eller oppmuntrende fremføring som passer til interaksjonen. Til en læringsaktivitet skriver du forklaringen og neste spørsmål som separate muntlige enheter. Uttrykksfullhet tjener betydningen når manuset gjør skiftet i hensikt tydelig.\n\n### Strømming og lydlevering\n\nFlash-modellkortet dokumenterer uttrykkelig strømmede utdata til direkte dialog, inkludert arbeidsflyter som håndterer at en lytter snakker over et svar. Applikasjonen kan spille lyd mens den kommer og koordinere avbrytelsen og neste samtaletur. Dette gjør timingen av den muntlige meldingen til en del av interaksjonen i stedet for å kreve at hvert svar først forberedes som et fullstendig opptak.\n\nProdusenten lar syntesearbeidsflyten angi utdataformat. Det publiserte eksemplet lager en mono-MP3-fil ved 24 kHz og 160 kbit/s. Dette er én dokumentert utdatakonfigurasjon, ikke en fast begrensning på innebygd format. Velg en lydrepresentasjon den tiltenkte avspillingsveien godtar, og behold taler og muntlig ordlyd tilgjengelig for gjennomgang av resultatet.\n\n### Valgfri modus for referansestemme\n\nMicrosofts modus for tilpasset stemme kan etterligne en taler som har samtykket, fra et referanseklipp på fem til seksti sekunder uten finjustering. Modellkortet anbefaler naturlig samtalepreget fremføring med moderat energi fordi referansen påvirker den genererte fremføringen. Modusen har en separat prosess for produsentgodkjenning og innspilt samtykke; forhåndsdefinerte bibliotekstemmer er en egen forberedelsesvei.\n\nTil en referanse som skal definere en merkeforteller, bruker du et rent, representativt avsnitt og avgjør hvilken fremføring som skal videreføres til det nye manuset. Til forhåndsdefinert tale forbereder du faktiske navn, kommandoer og målspråkfraser applikasjonen skal bruke. Lytt til avsnittene med den valgte stemmen og undersøk overgangen mellom samtaleturer. Det nyttige resultatet er uttrykksfull muntlig interaksjon med en bevisst taler, tydelig tekst og lyd tilpasset lytterens avspillingsmiljø.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f02e86cfa69cbdd6cffc49ec3f9dc27fd303c64e0ce9ced1a3619f9e137b10ab",
    "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\">•</span><h2 id=\"sheet-title\">Microsoft AI: MAI-Voice-2.1-Flash</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Lukk\">×</button></div><div class=\"idline\"><span>Microsoft AI /</span><code>microsoft/mai-voice-2.1-flash</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=\"Ultra|speech|/v1/audio/speech|microsoft%2Fmai-voice-2.1-flash\">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\">Microsoft AIs MAI-Voice-2.1-Flash genererer uttrykksfull tale på 23 språk for interaktive stemmeapplikasjoner. Den støtter strømming, flere talere og fremføringskontroll på setningsnivå, med et kuratert stemmebibliotek.</p><dl class=\"card-io\" data-card-io><div><dt>Godkjente inndata</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>Lyd</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>MAI-Voice-2.1-Flash er Microsoft AIs promptstyrte tekst-til-tale-modell laget for muntlig interaksjon med rask respons. Produsenten retter den mot taleassistenter, kundestøttesamtaler og telefonmenyer. Den genererer naturlig, uttrykksfull tale på tjuetre språk, med kontroll over tone og fremføring. Flash er versjonen rettet mot direkte respons; den separat navngitte MAI-Voice-2.1 prioriterer detaljert uttrykk og lydgjengivelse for lengre innhold.</p><h4>Tekst, taler og språk</h4><p>Inndata er teksten som skal sies, med en valgt stemme og valgfrie uttrykksinstruksjoner i SSML. Den administrerte stemmekatalogen skiller mellom taler, lokal variant og modellversjon. Harper og Grant er eksempler på navngitte talere med språkspesifikke oppføringer. Bruk teksten på det tiltenkte målspråket og velg riktig lokal variant; en ferdig engelsk hilsen og en spansk forklaring er separate muntlige avsnitt, hver med sin egen ordlyd.</p><p>Modellkortet dokumenterer en konsistent stemmeidentitet på tvers av støttede språk og flere talere til dialog. Dette kan støtte en applikasjon som trenger én gjenkjennelig forteller på tvers av lokaliserte meldinger eller en kort dialog med ulike roller. Tildel replikkene eksplisitt til de tiltenkte talerne og behold tildelingene. Lyden er den muntlige versjonen av manuset, ikke et nytt svar laget fra et åpent spørsmål.</p><h4>Tone og talestil</h4><p>Microsoft dokumenterer kontroll av følelse og fremføring på setnings- og samtaleturnivå gjennom SSML. Tilgjengelige stiler avhenger av valgt stemme. Den administrerte katalogen omfatter oppgavestiler som narrator, educational og customer_call_center, sammen med uttrykksstiler for bestemte talere. Den amerikanske Harper-oppføringen omfatter for eksempel joyful og relieved. Velg en stil som støttes av stemmen i stedet for å anta at hver taler godtar samme sett.</p><p>En praktisk kundestøttereplikk er: «Jeg kan hjelpe deg med å finne riktig dokument. Fortell meg tittelen, eller beskriv emnet.» Hold forespørselen kort nok til at lytteren kan handle, og velg en rolig eller oppmuntrende fremføring som passer til interaksjonen. Til en læringsaktivitet skriver du forklaringen og neste spørsmål som separate muntlige enheter. Uttrykksfullhet tjener betydningen når manuset gjør skiftet i hensikt tydelig.</p><h4>Strømming og lydlevering</h4><p>Flash-modellkortet dokumenterer uttrykkelig strømmede utdata til direkte dialog, inkludert arbeidsflyter som håndterer at en lytter snakker over et svar. Applikasjonen kan spille lyd mens den kommer og koordinere avbrytelsen og neste samtaletur. Dette gjør timingen av den muntlige meldingen til en del av interaksjonen i stedet for å kreve at hvert svar først forberedes som et fullstendig opptak.</p><p>Produsenten lar syntesearbeidsflyten angi utdataformat. Det publiserte eksemplet lager en mono-MP3-fil ved 24 kHz og 160 kbit/s. Dette er én dokumentert utdatakonfigurasjon, ikke en fast begrensning på innebygd format. Velg en lydrepresentasjon den tiltenkte avspillingsveien godtar, og behold taler og muntlig ordlyd tilgjengelig for gjennomgang av resultatet.</p><h4>Valgfri modus for referansestemme</h4><p>Microsofts modus for tilpasset stemme kan etterligne en taler som har samtykket, fra et referanseklipp på fem til seksti sekunder uten finjustering. Modellkortet anbefaler naturlig samtalepreget fremføring med moderat energi fordi referansen påvirker den genererte fremføringen. Modusen har en separat prosess for produsentgodkjenning og innspilt samtykke; forhåndsdefinerte bibliotekstemmer er en egen forberedelsesvei.</p><p>Til en referanse som skal definere en merkeforteller, bruker du et rent, representativt avsnitt og avgjør hvilken fremføring som skal videreføres til det nye manuset. Til forhåndsdefinert tale forbereder du faktiske navn, kommandoer og målspråkfraser applikasjonen skal bruke. Lytt til avsnittene med den valgte stemmen og undersøk overgangen mellom samtaleturer. Det nyttige resultatet er uttrykksfull muntlig interaksjon med en bevisst taler, tydelig tekst og lyd tilpasset lytterens avspillingsmiljø.</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 Ultra · 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>audio</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>microsoft/mai-voice-2.1-flash</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>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>cs-CZ-Grant:MAI-Voice-2.1-Flash, cs-CZ-Harper:MAI-Voice-2.1-Flash, da-DK-Grant:MAI-Voice-2.1-Flash, da-DK-Harper:MAI-Voice-2.1-Flash, de-DE-Grant:MAI-Voice-2.1-Flash, de-DE-Harper:MAI-Voice-2.1-Flash, de-DE-Klaus:MAI-Voice-2.1-Flash, de-DE-Mia:MAI-Voice-2.1-Flash, en-AU-Isla:MAI-Voice-2.1-Flash, en-GB-Emily:MAI-Voice-2.1-Flash, en-GB-Harry:MAI-Voice-2.1-Flash, en-IN-Dhruv:MAI-Voice-2.1-Flash, en-IN-Priya:MAI-Voice-2.1-Flash, en-US-Ethan:MAI-Voice-2.1-Flash, en-US-Grant:MAI-Voice-2.1-Flash, en-US-Harper:MAI-Voice-2.1-Flash, en-US-Iris:MAI-Voice-2.1-Flash, en-US-Jasper:MAI-Voice-2.1-Flash, en-US-Olivia:MAI-Voice-2.1-Flash, en-US-Sage:MAI-Voice-2.1-Flash, es-ES-Marta:MAI-Voice-2.1-Flash, es-MX-Alejo:MAI-Voice-2.1-Flash, es-MX-Grant:MAI-Voice-2.1-Flash, es-MX-Harper:MAI-Voice-2.1-Flash, es-MX-Valeria:MAI-Voice-2.1-Flash, fi-FI-Grant:MAI-Voice-2.1-Flash, fi-FI-Harper:MAI-Voice-2.1-Flash, fr-FR-Grant:MAI-Voice-2.1-Flash, fr-FR-Harper:MAI-Voice-2.1-Flash, fr-FR-Marc:MAI-Voice-2.1-Flash, fr-FR-Soleil:MAI-Voice-2.1-Flash, hi-IN-Arjun:MAI-Voice-2.1-Flash, hi-IN-Dhruv:MAI-Voice-2.1-Flash, hi-IN-Grant:MAI-Voice-2.1-Flash, hi-IN-Harper:MAI-Voice-2.1-Flash, hi-IN-Kavya:MAI-Voice-2.1-Flash, hi-IN-Priya:MAI-Voice-2.1-Flash, hu-HU-Bence:MAI-Voice-2.1-Flash, hu-HU-Grant:MAI-Voice-2.1-Flash, hu-HU-Harper:MAI-Voice-2.1-Flash, hu-HU-Levente:MAI-Voice-2.1-Flash, hu-HU-Lilla:MAI-Voice-2.1-Flash, hu-HU-Reka:MAI-Voice-2.1-Flash, id-ID-Grant:MAI-Voice-2.1-Flash, id-ID-Harper:MAI-Voice-2.1-Flash, it-IT-Grant:MAI-Voice-2.1-Flash, it-IT-Harper:MAI-Voice-2.1-Flash, it-IT-Luca:MAI-Voice-2.1-Flash, it-IT-Rosa:MAI-Voice-2.1-Flash, ko-KR-Grant:MAI-Voice-2.1-Flash, ko-KR-Haena:MAI-Voice-2.1-Flash, ko-KR-Harper:MAI-Voice-2.1-Flash, ko-KR-Junho:MAI-Voice-2.1-Flash, nb-NO-Grant:MAI-Voice-2.1-Flash, nb-NO-Harper:MAI-Voice-2.1-Flash, nl-NL-Grant:MAI-Voice-2.1-Flash, nl-NL-Harper:MAI-Voice-2.1-Flash, nl-NL-Sander:MAI-Voice-2.1-Flash, pl-PL-Grant:MAI-Voice-2.1-Flash, pl-PL-Harper:MAI-Voice-2.1-Flash, pt-BR-Caio:MAI-Voice-2.1-Flash, pt-BR-Grant:MAI-Voice-2.1-Flash, pt-BR-Harper:MAI-Voice-2.1-Flash, pt-BR-Luana:MAI-Voice-2.1-Flash, pt-BR-Pedro:MAI-Voice-2.1-Flash, pt-BR-Rafael:MAI-Voice-2.1-Flash, pt-PT-Grant:MAI-Voice-2.1-Flash, pt-PT-Harper:MAI-Voice-2.1-Flash, pt-PT-Rui:MAI-Voice-2.1-Flash, ro-RO-Andrei:MAI-Voice-2.1-Flash, ro-RO-Elena:MAI-Voice-2.1-Flash, ro-RO-Grant:MAI-Voice-2.1-Flash, ro-RO-Harper:MAI-Voice-2.1-Flash, ro-RO-Ioana:MAI-Voice-2.1-Flash, ro-RO-Radu:MAI-Voice-2.1-Flash, ru-RU-Grant:MAI-Voice-2.1-Flash, ru-RU-Harper:MAI-Voice-2.1-Flash, ru-RU-Lev:MAI-Voice-2.1-Flash, ru-RU-Masha:MAI-Voice-2.1-Flash, sv-SE-Grant:MAI-Voice-2.1-Flash, sv-SE-Harper:MAI-Voice-2.1-Flash, th-TH-Grant:MAI-Voice-2.1-Flash, th-TH-Harper:MAI-Voice-2.1-Flash, th-TH-Krit:MAI-Voice-2.1-Flash, th-TH-Nattapong:MAI-Voice-2.1-Flash, tr-TR-Aydin:MAI-Voice-2.1-Flash, tr-TR-Elif:MAI-Voice-2.1-Flash, tr-TR-Grant:MAI-Voice-2.1-Flash, tr-TR-Harper:MAI-Voice-2.1-Flash, vi-VN-Grant:MAI-Voice-2.1-Flash, vi-VN-Harper:MAI-Voice-2.1-Flash, zh-CN-Bo:MAI-Voice-2.1-Flash, zh-CN-Grant:MAI-Voice-2.1-Flash, zh-CN-Harper:MAI-Voice-2.1-Flash, zh-CN-Lan:MAI-Voice-2.1-Flash, zh-CN-Mei:MAI-Voice-2.1-Flash, zh-CN-Wei:MAI-Voice-2.1-Flash</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>Påkrevd</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>content_type</code></th><td data-cell-label=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>model, input, voice, response_format</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>voice_ids</code></th><td data-cell-label=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>cs-CZ-Grant:MAI-Voice-2.1-Flash, cs-CZ-Harper:MAI-Voice-2.1-Flash, da-DK-Grant:MAI-Voice-2.1-Flash, da-DK-Harper:MAI-Voice-2.1-Flash, de-DE-Grant:MAI-Voice-2.1-Flash, de-DE-Harper:MAI-Voice-2.1-Flash, de-DE-Klaus:MAI-Voice-2.1-Flash, de-DE-Mia:MAI-Voice-2.1-Flash, en-AU-Isla:MAI-Voice-2.1-Flash, en-GB-Emily:MAI-Voice-2.1-Flash, en-GB-Harry:MAI-Voice-2.1-Flash, en-IN-Dhruv:MAI-Voice-2.1-Flash, en-IN-Priya:MAI-Voice-2.1-Flash, en-US-Ethan:MAI-Voice-2.1-Flash, en-US-Grant:MAI-Voice-2.1-Flash, en-US-Harper:MAI-Voice-2.1-Flash, en-US-Iris:MAI-Voice-2.1-Flash, en-US-Jasper:MAI-Voice-2.1-Flash, en-US-Olivia:MAI-Voice-2.1-Flash, en-US-Sage:MAI-Voice-2.1-Flash, es-ES-Marta:MAI-Voice-2.1-Flash, es-MX-Alejo:MAI-Voice-2.1-Flash, es-MX-Grant:MAI-Voice-2.1-Flash, es-MX-Harper:MAI-Voice-2.1-Flash, es-MX-Valeria:MAI-Voice-2.1-Flash, fi-FI-Grant:MAI-Voice-2.1-Flash, fi-FI-Harper:MAI-Voice-2.1-Flash, fr-FR-Grant:MAI-Voice-2.1-Flash, fr-FR-Harper:MAI-Voice-2.1-Flash, fr-FR-Marc:MAI-Voice-2.1-Flash, fr-FR-Soleil:MAI-Voice-2.1-Flash, hi-IN-Arjun:MAI-Voice-2.1-Flash, hi-IN-Dhruv:MAI-Voice-2.1-Flash, hi-IN-Grant:MAI-Voice-2.1-Flash, hi-IN-Harper:MAI-Voice-2.1-Flash, hi-IN-Kavya:MAI-Voice-2.1-Flash, hi-IN-Priya:MAI-Voice-2.1-Flash, hu-HU-Bence:MAI-Voice-2.1-Flash, hu-HU-Grant:MAI-Voice-2.1-Flash, hu-HU-Harper:MAI-Voice-2.1-Flash, hu-HU-Levente:MAI-Voice-2.1-Flash, hu-HU-Lilla:MAI-Voice-2.1-Flash, hu-HU-Reka:MAI-Voice-2.1-Flash, id-ID-Grant:MAI-Voice-2.1-Flash, id-ID-Harper:MAI-Voice-2.1-Flash, it-IT-Grant:MAI-Voice-2.1-Flash, it-IT-Harper:MAI-Voice-2.1-Flash, it-IT-Luca:MAI-Voice-2.1-Flash, it-IT-Rosa:MAI-Voice-2.1-Flash, ko-KR-Grant:MAI-Voice-2.1-Flash, ko-KR-Haena:MAI-Voice-2.1-Flash, ko-KR-Harper:MAI-Voice-2.1-Flash, ko-KR-Junho:MAI-Voice-2.1-Flash, nb-NO-Grant:MAI-Voice-2.1-Flash, nb-NO-Harper:MAI-Voice-2.1-Flash, nl-NL-Grant:MAI-Voice-2.1-Flash, nl-NL-Harper:MAI-Voice-2.1-Flash, nl-NL-Sander:MAI-Voice-2.1-Flash, pl-PL-Grant:MAI-Voice-2.1-Flash, pl-PL-Harper:MAI-Voice-2.1-Flash, pt-BR-Caio:MAI-Voice-2.1-Flash, pt-BR-Grant:MAI-Voice-2.1-Flash, pt-BR-Harper:MAI-Voice-2.1-Flash, pt-BR-Luana:MAI-Voice-2.1-Flash, pt-BR-Pedro:MAI-Voice-2.1-Flash, pt-BR-Rafael:MAI-Voice-2.1-Flash, pt-PT-Grant:MAI-Voice-2.1-Flash, pt-PT-Harper:MAI-Voice-2.1-Flash, pt-PT-Rui:MAI-Voice-2.1-Flash, ro-RO-Andrei:MAI-Voice-2.1-Flash, ro-RO-Elena:MAI-Voice-2.1-Flash, ro-RO-Grant:MAI-Voice-2.1-Flash, ro-RO-Harper:MAI-Voice-2.1-Flash, ro-RO-Ioana:MAI-Voice-2.1-Flash, ro-RO-Radu:MAI-Voice-2.1-Flash, ru-RU-Grant:MAI-Voice-2.1-Flash, ru-RU-Harper:MAI-Voice-2.1-Flash, ru-RU-Lev:MAI-Voice-2.1-Flash, ru-RU-Masha:MAI-Voice-2.1-Flash, sv-SE-Grant:MAI-Voice-2.1-Flash, sv-SE-Harper:MAI-Voice-2.1-Flash, th-TH-Grant:MAI-Voice-2.1-Flash, th-TH-Harper:MAI-Voice-2.1-Flash, th-TH-Krit:MAI-Voice-2.1-Flash, th-TH-Nattapong:MAI-Voice-2.1-Flash, tr-TR-Aydin:MAI-Voice-2.1-Flash, tr-TR-Elif:MAI-Voice-2.1-Flash, tr-TR-Grant:MAI-Voice-2.1-Flash, tr-TR-Harper:MAI-Voice-2.1-Flash, vi-VN-Grant:MAI-Voice-2.1-Flash, vi-VN-Harper:MAI-Voice-2.1-Flash, zh-CN-Bo:MAI-Voice-2.1-Flash, zh-CN-Grant:MAI-Voice-2.1-Flash, zh-CN-Harper:MAI-Voice-2.1-Flash, zh-CN-Lan:MAI-Voice-2.1-Flash, zh-CN-Mei:MAI-Voice-2.1-Flash, zh-CN-Wei:MAI-Voice-2.1-Flash</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>response_format</code></th><td data-cell-label=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>mp3</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>max_input_characters</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>other_options</code></th><td data-cell-label=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>input</code></th><td data-cell-label=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>Eksakt UTF-8-tekst; antall Unicode-tegn uten normalisering</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Avtale\"><span class=\"card-cell-label\">Avtale</span>text</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\">Velg den eksakte stemmen fra denne modellprofilen.</p><p class=\"note-s\">Inndatategn og lydsekunder er ulike måleenheter for forbruk.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.</p><dl data-price-conditions><dt>Hurtigmodus</dt><dd>Ikke angitt <span class=\"note-s\">Når hurtigmodus er valgt</span></dd><dt>Flex-modus</dt><dd>Ikke angitt <span class=\"note-s\">Når flex-modus er valgt</span></dd><dt>Maksimal resonneringsinnsats</dt><dd>Ikke angitt <span class=\"note-s\">Når justeringen «default» brukes for maksimal resonneringsinnsats</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot-satser</h4><h4>Priser etter konfigurasjon</h4><p class=\"note-s\">Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasjon</th><th>Prisplan</th><th>Fakturerbar mengde</th><th>Faktureringsenhet</th><th>Kostnad</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasjon\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasjon</span>Grunnpriser for tokener</th><td data-cell-label=\"Prisplan\"><span class=\"card-cell-label\">Prisplan</span>Grunnsats</td><td data-cell-label=\"Fakturerbar mengde\"><span class=\"card-cell-label\">Fakturerbar mengde</span>—</td><td data-cell-label=\"Faktureringsenhet\"><span class=\"card-cell-label\">Faktureringsenhet</span>—</td><td data-cell-label=\"Kostnad\"><span class=\"card-cell-label\">Kostnad</span><div><span>Inndata · Inngående tokener</span> <b>—</b> <span class=\"price-unit\">/ 1K tokener</span></div><div><span>Utdata · Utgående tokener</span> <b>—</b> <span class=\"price-unit\">/ 1K tokener</span></div><div><span>Inndata · Lesing fra hurtigbuffer</span> <b>—</b> <span class=\"price-unit\">/ 1K tokener</span></div><div><span>Inndata · Skriving til hurtigbuffer</span> <b>—</b> <span class=\"price-unit\">/ 1K tokener</span></div><div><span>Inndata · Skriving til hurtigbuffer, 1 time</span> <b>—</b> <span class=\"price-unit\">/ 1K tokener</span></div></td></tr><tr><th data-cell-label=\"Konfigurasjon\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasjon</span>Ultra</th><td data-cell-label=\"Prisplan\"><span class=\"card-cell-label\">Prisplan</span>—</td><td data-cell-label=\"Fakturerbar mengde\"><span class=\"card-cell-label\">Fakturerbar mengde</span>Hvert Unicode-kodepunkt teller som ett tegn, også Han-tegn.</td><td data-cell-label=\"Faktureringsenhet\"><span class=\"card-cell-label\">Faktureringsenhet</span>per 1K inndatategn</td><td data-cell-label=\"Kostnad\"><span class=\"card-cell-label\">Kostnad</span><div><span>Inndata · inndatategn</span> <b>$0.03</b> <span class=\"price-unit\">per 1K inndatategn</span></div></td></tr></tbody></table></div></div><div data-declared-reference-pricing><h4>Detaljer om referansetariffen</h4><p class=\"note-s\">Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Microsoft AI: MAI-Voice-2.1-Flash</summary><h4>Priser etter konfigurasjon</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasjon</th><th>Faktureringsvilkår</th><th>Kostnad</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasjon\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasjon</span>Microsoft AI: MAI-Voice-2.1-Flash · Standardkonfigurasjon</th><td data-cell-label=\"Faktureringsvilkår\"><span class=\"card-cell-label\">Faktureringsvilkår</span>Standardkonfigurasjon</td><td data-cell-label=\"Kostnad\"><span class=\"card-cell-label\">Kostnad</span><div><span>Inndata · Inngående tegn</span> <b>0,00003 USD</b> <span class=\"price-unit\">per inndatategn</span></div></td></tr></tbody></table></div></details></div><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 Ultra · 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-1855-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1855-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</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-1855-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1855-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}&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;microsoft/mai-voice-2.1-flash&quot;, &quot;input&quot;: &quot;Good afternoon! This is a short voice take.&quot;}&#39;)\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nallowed=json.loads(&#39;[&quot;cs-CZ-Grant:MAI-Voice-2.1-Flash&quot;, &quot;cs-CZ-Harper:MAI-Voice-2.1-Flash&quot;, &quot;da-DK-Grant:MAI-Voice-2.1-Flash&quot;, &quot;da-DK-Harper:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Grant:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Harper:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Klaus:MAI-Voice-2.1-Flash&quot;, &quot;de-DE-Mia:MAI-Voice-2.1-Flash&quot;, &quot;en-AU-Isla:MAI-Voice-2.1-Flash&quot;, &quot;en-GB-Emily:MAI-Voice-2.1-Flash&quot;, &quot;en-GB-Harry:MAI-Voice-2.1-Flash&quot;, &quot;en-IN-Dhruv:MAI-Voice-2.1-Flash&quot;, &quot;en-IN-Priya:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Ethan:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Grant:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Harper:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Iris:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Jasper:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Olivia:MAI-Voice-2.1-Flash&quot;, &quot;en-US-Sage:MAI-Voice-2.1-Flash&quot;, &quot;es-ES-Marta:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Alejo:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Grant:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Harper:MAI-Voice-2.1-Flash&quot;, &quot;es-MX-Valeria:MAI-Voice-2.1-Flash&quot;, &quot;fi-FI-Grant:MAI-Voice-2.1-Flash&quot;, &quot;fi-FI-Harper:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Marc:MAI-Voice-2.1-Flash&quot;, &quot;fr-FR-Soleil:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Arjun:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Dhruv:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Grant:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Harper:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Kavya:MAI-Voice-2.1-Flash&quot;, &quot;hi-IN-Priya:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Bence:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Grant:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Harper:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Levente:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Lilla:MAI-Voice-2.1-Flash&quot;, &quot;hu-HU-Reka:MAI-Voice-2.1-Flash&quot;, &quot;id-ID-Grant:MAI-Voice-2.1-Flash&quot;, &quot;id-ID-Harper:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Grant:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Harper:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Luca:MAI-Voice-2.1-Flash&quot;, &quot;it-IT-Rosa:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Haena:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;ko-KR-Junho:MAI-Voice-2.1-Flash&quot;, &quot;nb-NO-Grant:MAI-Voice-2.1-Flash&quot;, &quot;nb-NO-Harper:MAI-Voice-2.1-Flash&quot;, &quot;nl-NL-Grant:MAI-Voice-2.1-Flash&quot;, &quot;nl-NL-Harper:MAI-Voice-2.1-Flash&quot;, &quot;nl-NL-Sander:MAI-Voice-2.1-Flash&quot;, &quot;pl-PL-Grant:MAI-Voice-2.1-Flash&quot;, &quot;pl-PL-Harper:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Caio:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Luana:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Pedro:MAI-Voice-2.1-Flash&quot;, &quot;pt-BR-Rafael:MAI-Voice-2.1-Flash&quot;, &quot;pt-PT-Grant:MAI-Voice-2.1-Flash&quot;, &quot;pt-PT-Harper:MAI-Voice-2.1-Flash&quot;, &quot;pt-PT-Rui:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Andrei:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Elena:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Grant:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Harper:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Ioana:MAI-Voice-2.1-Flash&quot;, &quot;ro-RO-Radu:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Grant:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Harper:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Lev:MAI-Voice-2.1-Flash&quot;, &quot;ru-RU-Masha:MAI-Voice-2.1-Flash&quot;, &quot;sv-SE-Grant:MAI-Voice-2.1-Flash&quot;, &quot;sv-SE-Harper:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Grant:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Harper:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Krit:MAI-Voice-2.1-Flash&quot;, &quot;th-TH-Nattapong:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Aydin:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Elif:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Grant:MAI-Voice-2.1-Flash&quot;, &quot;tr-TR-Harper:MAI-Voice-2.1-Flash&quot;, &quot;vi-VN-Grant:MAI-Voice-2.1-Flash&quot;, &quot;vi-VN-Harper:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Bo:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Grant:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Harper:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Lan:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Mei:MAI-Voice-2.1-Flash&quot;, &quot;zh-CN-Wei:MAI-Voice-2.1-Flash&quot;]&#39;)\nif voice not in allowed: raise SystemExit(&quot;Choose an accepted voice ID from this exact model profile&quot;)\np[&quot;voice&quot;]=voice\np[&quot;response_format&quot;]=&quot;mp3&quot;\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 Ultra · 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><details class=\"card-about\"><summary>Andre innholdslesinger</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><button class=\"cg-tab\" id=\"model-code-1856-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1856-panel-0\" aria-selected=\"true\" tabindex=\"0\">Mediebibliotek</button><button class=\"cg-tab\" id=\"model-code-1856-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1856-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Oppgavestatus</button><button class=\"cg-tab\" id=\"model-code-1856-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1856-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Ressursdetaljer</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-1856-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1856-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-assets.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1856-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1856-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_MEDIA_TASK_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/tasks/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-task.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-task.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1856-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1856-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_ASSET_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/assets/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-asset.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-asset.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div></div></div></details><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=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=microsoft%2Fmai-voice-2.1-flash&amp;route=Ultra&amp;caller=microsoft%2Fmai-voice-2.1-flash&amp;fmt=speech\"><code>microsoft/mai-voice-2.1-flash</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=microsoft%2Fmai-voice-2.1-flash&amp;route=Ultra&amp;caller=microsoft%2Fmai-voice-2.1-flash&amp;fmt=speech\"><code>microsoft/mai-voice-2.1-flash</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "microsoft/mai-voice-2.1-flash",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|microsoft%2Fmai-voice-2.1-flash",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": 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": [],
            "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",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "microsoft/mai-voice-2.1-flash"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "cs-CZ-Grant:MAI-Voice-2.1-Flash",
                  "cs-CZ-Harper:MAI-Voice-2.1-Flash",
                  "da-DK-Grant:MAI-Voice-2.1-Flash",
                  "da-DK-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Grant:MAI-Voice-2.1-Flash",
                  "de-DE-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Klaus:MAI-Voice-2.1-Flash",
                  "de-DE-Mia:MAI-Voice-2.1-Flash",
                  "en-AU-Isla:MAI-Voice-2.1-Flash",
                  "en-GB-Emily:MAI-Voice-2.1-Flash",
                  "en-GB-Harry:MAI-Voice-2.1-Flash",
                  "en-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "en-IN-Priya:MAI-Voice-2.1-Flash",
                  "en-US-Ethan:MAI-Voice-2.1-Flash",
                  "en-US-Grant:MAI-Voice-2.1-Flash",
                  "en-US-Harper:MAI-Voice-2.1-Flash",
                  "en-US-Iris:MAI-Voice-2.1-Flash",
                  "en-US-Jasper:MAI-Voice-2.1-Flash",
                  "en-US-Olivia:MAI-Voice-2.1-Flash",
                  "en-US-Sage:MAI-Voice-2.1-Flash",
                  "es-ES-Marta:MAI-Voice-2.1-Flash",
                  "es-MX-Alejo:MAI-Voice-2.1-Flash",
                  "es-MX-Grant:MAI-Voice-2.1-Flash",
                  "es-MX-Harper:MAI-Voice-2.1-Flash",
                  "es-MX-Valeria:MAI-Voice-2.1-Flash",
                  "fi-FI-Grant:MAI-Voice-2.1-Flash",
                  "fi-FI-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Grant:MAI-Voice-2.1-Flash",
                  "fr-FR-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Marc:MAI-Voice-2.1-Flash",
                  "fr-FR-Soleil:MAI-Voice-2.1-Flash",
                  "hi-IN-Arjun:MAI-Voice-2.1-Flash",
                  "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "hi-IN-Grant:MAI-Voice-2.1-Flash",
                  "hi-IN-Harper:MAI-Voice-2.1-Flash",
                  "hi-IN-Kavya:MAI-Voice-2.1-Flash",
                  "hi-IN-Priya:MAI-Voice-2.1-Flash",
                  "hu-HU-Bence:MAI-Voice-2.1-Flash",
                  "hu-HU-Grant:MAI-Voice-2.1-Flash",
                  "hu-HU-Harper:MAI-Voice-2.1-Flash",
                  "hu-HU-Levente:MAI-Voice-2.1-Flash",
                  "hu-HU-Lilla:MAI-Voice-2.1-Flash",
                  "hu-HU-Reka:MAI-Voice-2.1-Flash",
                  "id-ID-Grant:MAI-Voice-2.1-Flash",
                  "id-ID-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Grant:MAI-Voice-2.1-Flash",
                  "it-IT-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Luca:MAI-Voice-2.1-Flash",
                  "it-IT-Rosa:MAI-Voice-2.1-Flash",
                  "ko-KR-Grant:MAI-Voice-2.1-Flash",
                  "ko-KR-Haena:MAI-Voice-2.1-Flash",
                  "ko-KR-Harper:MAI-Voice-2.1-Flash",
                  "ko-KR-Junho:MAI-Voice-2.1-Flash",
                  "nb-NO-Grant:MAI-Voice-2.1-Flash",
                  "nb-NO-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Grant:MAI-Voice-2.1-Flash",
                  "nl-NL-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Sander:MAI-Voice-2.1-Flash",
                  "pl-PL-Grant:MAI-Voice-2.1-Flash",
                  "pl-PL-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Caio:MAI-Voice-2.1-Flash",
                  "pt-BR-Grant:MAI-Voice-2.1-Flash",
                  "pt-BR-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Luana:MAI-Voice-2.1-Flash",
                  "pt-BR-Pedro:MAI-Voice-2.1-Flash",
                  "pt-BR-Rafael:MAI-Voice-2.1-Flash",
                  "pt-PT-Grant:MAI-Voice-2.1-Flash",
                  "pt-PT-Harper:MAI-Voice-2.1-Flash",
                  "pt-PT-Rui:MAI-Voice-2.1-Flash",
                  "ro-RO-Andrei:MAI-Voice-2.1-Flash",
                  "ro-RO-Elena:MAI-Voice-2.1-Flash",
                  "ro-RO-Grant:MAI-Voice-2.1-Flash",
                  "ro-RO-Harper:MAI-Voice-2.1-Flash",
                  "ro-RO-Ioana:MAI-Voice-2.1-Flash",
                  "ro-RO-Radu:MAI-Voice-2.1-Flash",
                  "ru-RU-Grant:MAI-Voice-2.1-Flash",
                  "ru-RU-Harper:MAI-Voice-2.1-Flash",
                  "ru-RU-Lev:MAI-Voice-2.1-Flash",
                  "ru-RU-Masha:MAI-Voice-2.1-Flash",
                  "sv-SE-Grant:MAI-Voice-2.1-Flash",
                  "sv-SE-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Grant:MAI-Voice-2.1-Flash",
                  "th-TH-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Krit:MAI-Voice-2.1-Flash",
                  "th-TH-Nattapong:MAI-Voice-2.1-Flash",
                  "tr-TR-Aydin:MAI-Voice-2.1-Flash",
                  "tr-TR-Elif:MAI-Voice-2.1-Flash",
                  "tr-TR-Grant:MAI-Voice-2.1-Flash",
                  "tr-TR-Harper:MAI-Voice-2.1-Flash",
                  "vi-VN-Grant:MAI-Voice-2.1-Flash",
                  "vi-VN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Bo:MAI-Voice-2.1-Flash",
                  "zh-CN-Grant:MAI-Voice-2.1-Flash",
                  "zh-CN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Lan:MAI-Voice-2.1-Flash",
                  "zh-CN-Mei:MAI-Voice-2.1-Flash",
                  "zh-CN-Wei:MAI-Voice-2.1-Flash"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Velg den eksakte stemmen fra denne modellprofilen.",
            "Inndatategn og lydsekunder er ulike måleenheter for forbruk."
          ],
          "input": {
            "content_type": "application/json",
            "input": "Eksakt UTF-8-tekst; antall Unicode-tegn uten normalisering",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "cs-CZ-Grant:MAI-Voice-2.1-Flash",
              "cs-CZ-Harper:MAI-Voice-2.1-Flash",
              "da-DK-Grant:MAI-Voice-2.1-Flash",
              "da-DK-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Grant:MAI-Voice-2.1-Flash",
              "de-DE-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Klaus:MAI-Voice-2.1-Flash",
              "de-DE-Mia:MAI-Voice-2.1-Flash",
              "en-AU-Isla:MAI-Voice-2.1-Flash",
              "en-GB-Emily:MAI-Voice-2.1-Flash",
              "en-GB-Harry:MAI-Voice-2.1-Flash",
              "en-IN-Dhruv:MAI-Voice-2.1-Flash",
              "en-IN-Priya:MAI-Voice-2.1-Flash",
              "en-US-Ethan:MAI-Voice-2.1-Flash",
              "en-US-Grant:MAI-Voice-2.1-Flash",
              "en-US-Harper:MAI-Voice-2.1-Flash",
              "en-US-Iris:MAI-Voice-2.1-Flash",
              "en-US-Jasper:MAI-Voice-2.1-Flash",
              "en-US-Olivia:MAI-Voice-2.1-Flash",
              "en-US-Sage:MAI-Voice-2.1-Flash",
              "es-ES-Marta:MAI-Voice-2.1-Flash",
              "es-MX-Alejo:MAI-Voice-2.1-Flash",
              "es-MX-Grant:MAI-Voice-2.1-Flash",
              "es-MX-Harper:MAI-Voice-2.1-Flash",
              "es-MX-Valeria:MAI-Voice-2.1-Flash",
              "fi-FI-Grant:MAI-Voice-2.1-Flash",
              "fi-FI-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Grant:MAI-Voice-2.1-Flash",
              "fr-FR-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Marc:MAI-Voice-2.1-Flash",
              "fr-FR-Soleil:MAI-Voice-2.1-Flash",
              "hi-IN-Arjun:MAI-Voice-2.1-Flash",
              "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
              "hi-IN-Grant:MAI-Voice-2.1-Flash",
              "hi-IN-Harper:MAI-Voice-2.1-Flash",
              "hi-IN-Kavya:MAI-Voice-2.1-Flash",
              "hi-IN-Priya:MAI-Voice-2.1-Flash",
              "hu-HU-Bence:MAI-Voice-2.1-Flash",
              "hu-HU-Grant:MAI-Voice-2.1-Flash",
              "hu-HU-Harper:MAI-Voice-2.1-Flash",
              "hu-HU-Levente:MAI-Voice-2.1-Flash",
              "hu-HU-Lilla:MAI-Voice-2.1-Flash",
              "hu-HU-Reka:MAI-Voice-2.1-Flash",
              "id-ID-Grant:MAI-Voice-2.1-Flash",
              "id-ID-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Grant:MAI-Voice-2.1-Flash",
              "it-IT-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Luca:MAI-Voice-2.1-Flash",
              "it-IT-Rosa:MAI-Voice-2.1-Flash",
              "ko-KR-Grant:MAI-Voice-2.1-Flash",
              "ko-KR-Haena:MAI-Voice-2.1-Flash",
              "ko-KR-Harper:MAI-Voice-2.1-Flash",
              "ko-KR-Junho:MAI-Voice-2.1-Flash",
              "nb-NO-Grant:MAI-Voice-2.1-Flash",
              "nb-NO-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Grant:MAI-Voice-2.1-Flash",
              "nl-NL-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Sander:MAI-Voice-2.1-Flash",
              "pl-PL-Grant:MAI-Voice-2.1-Flash",
              "pl-PL-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Caio:MAI-Voice-2.1-Flash",
              "pt-BR-Grant:MAI-Voice-2.1-Flash",
              "pt-BR-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Luana:MAI-Voice-2.1-Flash",
              "pt-BR-Pedro:MAI-Voice-2.1-Flash",
              "pt-BR-Rafael:MAI-Voice-2.1-Flash",
              "pt-PT-Grant:MAI-Voice-2.1-Flash",
              "pt-PT-Harper:MAI-Voice-2.1-Flash",
              "pt-PT-Rui:MAI-Voice-2.1-Flash",
              "ro-RO-Andrei:MAI-Voice-2.1-Flash",
              "ro-RO-Elena:MAI-Voice-2.1-Flash",
              "ro-RO-Grant:MAI-Voice-2.1-Flash",
              "ro-RO-Harper:MAI-Voice-2.1-Flash",
              "ro-RO-Ioana:MAI-Voice-2.1-Flash",
              "ro-RO-Radu:MAI-Voice-2.1-Flash",
              "ru-RU-Grant:MAI-Voice-2.1-Flash",
              "ru-RU-Harper:MAI-Voice-2.1-Flash",
              "ru-RU-Lev:MAI-Voice-2.1-Flash",
              "ru-RU-Masha:MAI-Voice-2.1-Flash",
              "sv-SE-Grant:MAI-Voice-2.1-Flash",
              "sv-SE-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Grant:MAI-Voice-2.1-Flash",
              "th-TH-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Krit:MAI-Voice-2.1-Flash",
              "th-TH-Nattapong:MAI-Voice-2.1-Flash",
              "tr-TR-Aydin:MAI-Voice-2.1-Flash",
              "tr-TR-Elif:MAI-Voice-2.1-Flash",
              "tr-TR-Grant:MAI-Voice-2.1-Flash",
              "tr-TR-Harper:MAI-Voice-2.1-Flash",
              "vi-VN-Grant:MAI-Voice-2.1-Flash",
              "vi-VN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Bo:MAI-Voice-2.1-Flash",
              "zh-CN-Grant:MAI-Voice-2.1-Flash",
              "zh-CN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Lan:MAI-Voice-2.1-Flash",
              "zh-CN-Mei:MAI-Voice-2.1-Flash",
              "zh-CN-Wei:MAI-Voice-2.1-Flash"
            ]
          },
          "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."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "768d1dc9b9da20eb0942",
            "label": "Microsoft AI: MAI-Voice-2.1-Flash",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Standardkonfigurasjon"
                },
                "label": "Microsoft AI: MAI-Voice-2.1-Flash · Standardkonfigurasjon",
                "units": [
                  {
                    "amount": "0.000030",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "a7f384d81db64c9b1e8c0855",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"microsoft/mai-voice-2.1-flash\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"cs-CZ-Grant:MAI-Voice-2.1-Flash\", \"cs-CZ-Harper:MAI-Voice-2.1-Flash\", \"da-DK-Grant:MAI-Voice-2.1-Flash\", \"da-DK-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Grant:MAI-Voice-2.1-Flash\", \"de-DE-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Klaus:MAI-Voice-2.1-Flash\", \"de-DE-Mia:MAI-Voice-2.1-Flash\", \"en-AU-Isla:MAI-Voice-2.1-Flash\", \"en-GB-Emily:MAI-Voice-2.1-Flash\", \"en-GB-Harry:MAI-Voice-2.1-Flash\", \"en-IN-Dhruv:MAI-Voice-2.1-Flash\", \"en-IN-Priya:MAI-Voice-2.1-Flash\", \"en-US-Ethan:MAI-Voice-2.1-Flash\", \"en-US-Grant:MAI-Voice-2.1-Flash\", \"en-US-Harper:MAI-Voice-2.1-Flash\", \"en-US-Iris:MAI-Voice-2.1-Flash\", \"en-US-Jasper:MAI-Voice-2.1-Flash\", \"en-US-Olivia:MAI-Voice-2.1-Flash\", \"en-US-Sage:MAI-Voice-2.1-Flash\", \"es-ES-Marta:MAI-Voice-2.1-Flash\", \"es-MX-Alejo:MAI-Voice-2.1-Flash\", \"es-MX-Grant:MAI-Voice-2.1-Flash\", \"es-MX-Harper:MAI-Voice-2.1-Flash\", \"es-MX-Valeria:MAI-Voice-2.1-Flash\", \"fi-FI-Grant:MAI-Voice-2.1-Flash\", \"fi-FI-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Grant:MAI-Voice-2.1-Flash\", \"fr-FR-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Marc:MAI-Voice-2.1-Flash\", \"fr-FR-Soleil:MAI-Voice-2.1-Flash\", \"hi-IN-Arjun:MAI-Voice-2.1-Flash\", \"hi-IN-Dhruv:MAI-Voice-2.1-Flash\", \"hi-IN-Grant:MAI-Voice-2.1-Flash\", \"hi-IN-Harper:MAI-Voice-2.1-Flash\", \"hi-IN-Kavya:MAI-Voice-2.1-Flash\", \"hi-IN-Priya:MAI-Voice-2.1-Flash\", \"hu-HU-Bence:MAI-Voice-2.1-Flash\", \"hu-HU-Grant:MAI-Voice-2.1-Flash\", \"hu-HU-Harper:MAI-Voice-2.1-Flash\", \"hu-HU-Levente:MAI-Voice-2.1-Flash\", \"hu-HU-Lilla:MAI-Voice-2.1-Flash\", \"hu-HU-Reka:MAI-Voice-2.1-Flash\", \"id-ID-Grant:MAI-Voice-2.1-Flash\", \"id-ID-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Grant:MAI-Voice-2.1-Flash\", \"it-IT-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Luca:MAI-Voice-2.1-Flash\", \"it-IT-Rosa:MAI-Voice-2.1-Flash\", \"ko-KR-Grant:MAI-Voice-2.1-Flash\", \"ko-KR-Haena:MAI-Voice-2.1-Flash\", \"ko-KR-Harper:MAI-Voice-2.1-Flash\", \"ko-KR-Junho:MAI-Voice-2.1-Flash\", \"nb-NO-Grant:MAI-Voice-2.1-Flash\", \"nb-NO-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Grant:MAI-Voice-2.1-Flash\", \"nl-NL-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Sander:MAI-Voice-2.1-Flash\", \"pl-PL-Grant:MAI-Voice-2.1-Flash\", \"pl-PL-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Caio:MAI-Voice-2.1-Flash\", \"pt-BR-Grant:MAI-Voice-2.1-Flash\", \"pt-BR-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Luana:MAI-Voice-2.1-Flash\", \"pt-BR-Pedro:MAI-Voice-2.1-Flash\", \"pt-BR-Rafael:MAI-Voice-2.1-Flash\", \"pt-PT-Grant:MAI-Voice-2.1-Flash\", \"pt-PT-Harper:MAI-Voice-2.1-Flash\", \"pt-PT-Rui:MAI-Voice-2.1-Flash\", \"ro-RO-Andrei:MAI-Voice-2.1-Flash\", \"ro-RO-Elena:MAI-Voice-2.1-Flash\", \"ro-RO-Grant:MAI-Voice-2.1-Flash\", \"ro-RO-Harper:MAI-Voice-2.1-Flash\", \"ro-RO-Ioana:MAI-Voice-2.1-Flash\", \"ro-RO-Radu:MAI-Voice-2.1-Flash\", \"ru-RU-Grant:MAI-Voice-2.1-Flash\", \"ru-RU-Harper:MAI-Voice-2.1-Flash\", \"ru-RU-Lev:MAI-Voice-2.1-Flash\", \"ru-RU-Masha:MAI-Voice-2.1-Flash\", \"sv-SE-Grant:MAI-Voice-2.1-Flash\", \"sv-SE-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Grant:MAI-Voice-2.1-Flash\", \"th-TH-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Krit:MAI-Voice-2.1-Flash\", \"th-TH-Nattapong:MAI-Voice-2.1-Flash\", \"tr-TR-Aydin:MAI-Voice-2.1-Flash\", \"tr-TR-Elif:MAI-Voice-2.1-Flash\", \"tr-TR-Grant:MAI-Voice-2.1-Flash\", \"tr-TR-Harper:MAI-Voice-2.1-Flash\", \"vi-VN-Grant:MAI-Voice-2.1-Flash\", \"vi-VN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Bo:MAI-Voice-2.1-Flash\", \"zh-CN-Grant:MAI-Voice-2.1-Flash\", \"zh-CN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Lan:MAI-Voice-2.1-Flash\", \"zh-CN-Mei:MAI-Voice-2.1-Flash\", \"zh-CN-Wei:MAI-Voice-2.1-Flash\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\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": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.03000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    }
  ],
  "model_id": "microsoft/mai-voice-2.1-flash",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "836f9b53bad6c98b9db07682cf765736e684ba3b7a83d41696f6dcb19b006506",
    "input_html_sha256": "8fd778aa15ed8610c85ff36f3e2b431ef635b574157128f95b279e840bef9bba",
    "private_audit_sha256": "aadc4b1b3e914dcae8c4e4b293845a3e01a453ff4f8ddd037d5ee75e3e01e7ee",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/nb/microsoft-mai-voice-2-1-flash/",
    "description": "Microsoft AIs MAI-Voice-2.1-Flash genererer uttrykksfull tale på 23 språk for interaktive stemmeapplikasjoner. Den støtter strømming, flere talere og fremføringskontroll på setningsnivå, med et kuratert stemmebibliotek.",
    "locale": "nb",
    "md_url": "https://ailoot.ai/models/nb/microsoft-mai-voice-2-1-flash/index.md",
    "title": "Microsoft AI: MAI-Voice-2.1-Flash — Ailoot",
    "url": "https://ailoot.ai/models/nb/microsoft-mai-voice-2-1-flash/"
  },
  "rawModel": {
    "about": "MAI-Voice-2.1-Flash er Microsoft AIs promptstyrte tekst-til-tale-modell laget for muntlig interaksjon med rask respons. Produsenten retter den mot taleassistenter, kundestøttesamtaler og telefonmenyer. Den genererer naturlig, uttrykksfull tale på tjuetre språk, med kontroll over tone og fremføring. Flash er versjonen rettet mot direkte respons; den separat navngitte MAI-Voice-2.1 prioriterer detaljert uttrykk og lydgjengivelse for lengre innhold.\n\n### Tekst, taler og språk\n\nInndata er teksten som skal sies, med en valgt stemme og valgfrie uttrykksinstruksjoner i SSML. Den administrerte stemmekatalogen skiller mellom taler, lokal variant og modellversjon. Harper og Grant er eksempler på navngitte talere med språkspesifikke oppføringer. Bruk teksten på det tiltenkte målspråket og velg riktig lokal variant; en ferdig engelsk hilsen og en spansk forklaring er separate muntlige avsnitt, hver med sin egen ordlyd.\n\nModellkortet dokumenterer en konsistent stemmeidentitet på tvers av støttede språk og flere talere til dialog. Dette kan støtte en applikasjon som trenger én gjenkjennelig forteller på tvers av lokaliserte meldinger eller en kort dialog med ulike roller. Tildel replikkene eksplisitt til de tiltenkte talerne og behold tildelingene. Lyden er den muntlige versjonen av manuset, ikke et nytt svar laget fra et åpent spørsmål.\n\n### Tone og talestil\n\nMicrosoft dokumenterer kontroll av følelse og fremføring på setnings- og samtaleturnivå gjennom SSML. Tilgjengelige stiler avhenger av valgt stemme. Den administrerte katalogen omfatter oppgavestiler som narrator, educational og customer_call_center, sammen med uttrykksstiler for bestemte talere. Den amerikanske Harper-oppføringen omfatter for eksempel joyful og relieved. Velg en stil som støttes av stemmen i stedet for å anta at hver taler godtar samme sett.\n\nEn praktisk kundestøttereplikk er: «Jeg kan hjelpe deg med å finne riktig dokument. Fortell meg tittelen, eller beskriv emnet.» Hold forespørselen kort nok til at lytteren kan handle, og velg en rolig eller oppmuntrende fremføring som passer til interaksjonen. Til en læringsaktivitet skriver du forklaringen og neste spørsmål som separate muntlige enheter. Uttrykksfullhet tjener betydningen når manuset gjør skiftet i hensikt tydelig.\n\n### Strømming og lydlevering\n\nFlash-modellkortet dokumenterer uttrykkelig strømmede utdata til direkte dialog, inkludert arbeidsflyter som håndterer at en lytter snakker over et svar. Applikasjonen kan spille lyd mens den kommer og koordinere avbrytelsen og neste samtaletur. Dette gjør timingen av den muntlige meldingen til en del av interaksjonen i stedet for å kreve at hvert svar først forberedes som et fullstendig opptak.\n\nProdusenten lar syntesearbeidsflyten angi utdataformat. Det publiserte eksemplet lager en mono-MP3-fil ved 24 kHz og 160 kbit/s. Dette er én dokumentert utdatakonfigurasjon, ikke en fast begrensning på innebygd format. Velg en lydrepresentasjon den tiltenkte avspillingsveien godtar, og behold taler og muntlig ordlyd tilgjengelig for gjennomgang av resultatet.\n\n### Valgfri modus for referansestemme\n\nMicrosofts modus for tilpasset stemme kan etterligne en taler som har samtykket, fra et referanseklipp på fem til seksti sekunder uten finjustering. Modellkortet anbefaler naturlig samtalepreget fremføring med moderat energi fordi referansen påvirker den genererte fremføringen. Modusen har en separat prosess for produsentgodkjenning og innspilt samtykke; forhåndsdefinerte bibliotekstemmer er en egen forberedelsesvei.\n\nTil en referanse som skal definere en merkeforteller, bruker du et rent, representativt avsnitt og avgjør hvilken fremføring som skal videreføres til det nye manuset. Til forhåndsdefinert tale forbereder du faktiske navn, kommandoer og målspråkfraser applikasjonen skal bruke. Lytt til avsnittene med den valgte stemmen og undersøk overgangen mellom samtaleturer. Det nyttige resultatet er uttrykksfull muntlig interaksjon med en bevisst taler, tydelig tekst og lyd tilpasset lytterens avspillingsmiljø.",
    "alias_of": null,
    "aliases": [],
    "author": "Microsoft AI",
    "available": null,
    "canonical_model": "microsoft/mai-voice-2.1-flash",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.03000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ],
        "summary": "Fullstendige priser for konfigurasjonen finnes i detaljene."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "microsoft/mai-voice-2.1-flash",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": 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": [],
            "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",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "microsoft/mai-voice-2.1-flash"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "cs-CZ-Grant:MAI-Voice-2.1-Flash",
                  "cs-CZ-Harper:MAI-Voice-2.1-Flash",
                  "da-DK-Grant:MAI-Voice-2.1-Flash",
                  "da-DK-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Grant:MAI-Voice-2.1-Flash",
                  "de-DE-Harper:MAI-Voice-2.1-Flash",
                  "de-DE-Klaus:MAI-Voice-2.1-Flash",
                  "de-DE-Mia:MAI-Voice-2.1-Flash",
                  "en-AU-Isla:MAI-Voice-2.1-Flash",
                  "en-GB-Emily:MAI-Voice-2.1-Flash",
                  "en-GB-Harry:MAI-Voice-2.1-Flash",
                  "en-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "en-IN-Priya:MAI-Voice-2.1-Flash",
                  "en-US-Ethan:MAI-Voice-2.1-Flash",
                  "en-US-Grant:MAI-Voice-2.1-Flash",
                  "en-US-Harper:MAI-Voice-2.1-Flash",
                  "en-US-Iris:MAI-Voice-2.1-Flash",
                  "en-US-Jasper:MAI-Voice-2.1-Flash",
                  "en-US-Olivia:MAI-Voice-2.1-Flash",
                  "en-US-Sage:MAI-Voice-2.1-Flash",
                  "es-ES-Marta:MAI-Voice-2.1-Flash",
                  "es-MX-Alejo:MAI-Voice-2.1-Flash",
                  "es-MX-Grant:MAI-Voice-2.1-Flash",
                  "es-MX-Harper:MAI-Voice-2.1-Flash",
                  "es-MX-Valeria:MAI-Voice-2.1-Flash",
                  "fi-FI-Grant:MAI-Voice-2.1-Flash",
                  "fi-FI-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Grant:MAI-Voice-2.1-Flash",
                  "fr-FR-Harper:MAI-Voice-2.1-Flash",
                  "fr-FR-Marc:MAI-Voice-2.1-Flash",
                  "fr-FR-Soleil:MAI-Voice-2.1-Flash",
                  "hi-IN-Arjun:MAI-Voice-2.1-Flash",
                  "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
                  "hi-IN-Grant:MAI-Voice-2.1-Flash",
                  "hi-IN-Harper:MAI-Voice-2.1-Flash",
                  "hi-IN-Kavya:MAI-Voice-2.1-Flash",
                  "hi-IN-Priya:MAI-Voice-2.1-Flash",
                  "hu-HU-Bence:MAI-Voice-2.1-Flash",
                  "hu-HU-Grant:MAI-Voice-2.1-Flash",
                  "hu-HU-Harper:MAI-Voice-2.1-Flash",
                  "hu-HU-Levente:MAI-Voice-2.1-Flash",
                  "hu-HU-Lilla:MAI-Voice-2.1-Flash",
                  "hu-HU-Reka:MAI-Voice-2.1-Flash",
                  "id-ID-Grant:MAI-Voice-2.1-Flash",
                  "id-ID-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Grant:MAI-Voice-2.1-Flash",
                  "it-IT-Harper:MAI-Voice-2.1-Flash",
                  "it-IT-Luca:MAI-Voice-2.1-Flash",
                  "it-IT-Rosa:MAI-Voice-2.1-Flash",
                  "ko-KR-Grant:MAI-Voice-2.1-Flash",
                  "ko-KR-Haena:MAI-Voice-2.1-Flash",
                  "ko-KR-Harper:MAI-Voice-2.1-Flash",
                  "ko-KR-Junho:MAI-Voice-2.1-Flash",
                  "nb-NO-Grant:MAI-Voice-2.1-Flash",
                  "nb-NO-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Grant:MAI-Voice-2.1-Flash",
                  "nl-NL-Harper:MAI-Voice-2.1-Flash",
                  "nl-NL-Sander:MAI-Voice-2.1-Flash",
                  "pl-PL-Grant:MAI-Voice-2.1-Flash",
                  "pl-PL-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Caio:MAI-Voice-2.1-Flash",
                  "pt-BR-Grant:MAI-Voice-2.1-Flash",
                  "pt-BR-Harper:MAI-Voice-2.1-Flash",
                  "pt-BR-Luana:MAI-Voice-2.1-Flash",
                  "pt-BR-Pedro:MAI-Voice-2.1-Flash",
                  "pt-BR-Rafael:MAI-Voice-2.1-Flash",
                  "pt-PT-Grant:MAI-Voice-2.1-Flash",
                  "pt-PT-Harper:MAI-Voice-2.1-Flash",
                  "pt-PT-Rui:MAI-Voice-2.1-Flash",
                  "ro-RO-Andrei:MAI-Voice-2.1-Flash",
                  "ro-RO-Elena:MAI-Voice-2.1-Flash",
                  "ro-RO-Grant:MAI-Voice-2.1-Flash",
                  "ro-RO-Harper:MAI-Voice-2.1-Flash",
                  "ro-RO-Ioana:MAI-Voice-2.1-Flash",
                  "ro-RO-Radu:MAI-Voice-2.1-Flash",
                  "ru-RU-Grant:MAI-Voice-2.1-Flash",
                  "ru-RU-Harper:MAI-Voice-2.1-Flash",
                  "ru-RU-Lev:MAI-Voice-2.1-Flash",
                  "ru-RU-Masha:MAI-Voice-2.1-Flash",
                  "sv-SE-Grant:MAI-Voice-2.1-Flash",
                  "sv-SE-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Grant:MAI-Voice-2.1-Flash",
                  "th-TH-Harper:MAI-Voice-2.1-Flash",
                  "th-TH-Krit:MAI-Voice-2.1-Flash",
                  "th-TH-Nattapong:MAI-Voice-2.1-Flash",
                  "tr-TR-Aydin:MAI-Voice-2.1-Flash",
                  "tr-TR-Elif:MAI-Voice-2.1-Flash",
                  "tr-TR-Grant:MAI-Voice-2.1-Flash",
                  "tr-TR-Harper:MAI-Voice-2.1-Flash",
                  "vi-VN-Grant:MAI-Voice-2.1-Flash",
                  "vi-VN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Bo:MAI-Voice-2.1-Flash",
                  "zh-CN-Grant:MAI-Voice-2.1-Flash",
                  "zh-CN-Harper:MAI-Voice-2.1-Flash",
                  "zh-CN-Lan:MAI-Voice-2.1-Flash",
                  "zh-CN-Mei:MAI-Voice-2.1-Flash",
                  "zh-CN-Wei:MAI-Voice-2.1-Flash"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Velg den eksakte stemmen fra denne modellprofilen.",
            "Inndatategn og lydsekunder er ulike måleenheter for forbruk."
          ],
          "input": {
            "content_type": "application/json",
            "input": "Eksakt UTF-8-tekst; antall Unicode-tegn uten normalisering",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "cs-CZ-Grant:MAI-Voice-2.1-Flash",
              "cs-CZ-Harper:MAI-Voice-2.1-Flash",
              "da-DK-Grant:MAI-Voice-2.1-Flash",
              "da-DK-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Grant:MAI-Voice-2.1-Flash",
              "de-DE-Harper:MAI-Voice-2.1-Flash",
              "de-DE-Klaus:MAI-Voice-2.1-Flash",
              "de-DE-Mia:MAI-Voice-2.1-Flash",
              "en-AU-Isla:MAI-Voice-2.1-Flash",
              "en-GB-Emily:MAI-Voice-2.1-Flash",
              "en-GB-Harry:MAI-Voice-2.1-Flash",
              "en-IN-Dhruv:MAI-Voice-2.1-Flash",
              "en-IN-Priya:MAI-Voice-2.1-Flash",
              "en-US-Ethan:MAI-Voice-2.1-Flash",
              "en-US-Grant:MAI-Voice-2.1-Flash",
              "en-US-Harper:MAI-Voice-2.1-Flash",
              "en-US-Iris:MAI-Voice-2.1-Flash",
              "en-US-Jasper:MAI-Voice-2.1-Flash",
              "en-US-Olivia:MAI-Voice-2.1-Flash",
              "en-US-Sage:MAI-Voice-2.1-Flash",
              "es-ES-Marta:MAI-Voice-2.1-Flash",
              "es-MX-Alejo:MAI-Voice-2.1-Flash",
              "es-MX-Grant:MAI-Voice-2.1-Flash",
              "es-MX-Harper:MAI-Voice-2.1-Flash",
              "es-MX-Valeria:MAI-Voice-2.1-Flash",
              "fi-FI-Grant:MAI-Voice-2.1-Flash",
              "fi-FI-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Grant:MAI-Voice-2.1-Flash",
              "fr-FR-Harper:MAI-Voice-2.1-Flash",
              "fr-FR-Marc:MAI-Voice-2.1-Flash",
              "fr-FR-Soleil:MAI-Voice-2.1-Flash",
              "hi-IN-Arjun:MAI-Voice-2.1-Flash",
              "hi-IN-Dhruv:MAI-Voice-2.1-Flash",
              "hi-IN-Grant:MAI-Voice-2.1-Flash",
              "hi-IN-Harper:MAI-Voice-2.1-Flash",
              "hi-IN-Kavya:MAI-Voice-2.1-Flash",
              "hi-IN-Priya:MAI-Voice-2.1-Flash",
              "hu-HU-Bence:MAI-Voice-2.1-Flash",
              "hu-HU-Grant:MAI-Voice-2.1-Flash",
              "hu-HU-Harper:MAI-Voice-2.1-Flash",
              "hu-HU-Levente:MAI-Voice-2.1-Flash",
              "hu-HU-Lilla:MAI-Voice-2.1-Flash",
              "hu-HU-Reka:MAI-Voice-2.1-Flash",
              "id-ID-Grant:MAI-Voice-2.1-Flash",
              "id-ID-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Grant:MAI-Voice-2.1-Flash",
              "it-IT-Harper:MAI-Voice-2.1-Flash",
              "it-IT-Luca:MAI-Voice-2.1-Flash",
              "it-IT-Rosa:MAI-Voice-2.1-Flash",
              "ko-KR-Grant:MAI-Voice-2.1-Flash",
              "ko-KR-Haena:MAI-Voice-2.1-Flash",
              "ko-KR-Harper:MAI-Voice-2.1-Flash",
              "ko-KR-Junho:MAI-Voice-2.1-Flash",
              "nb-NO-Grant:MAI-Voice-2.1-Flash",
              "nb-NO-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Grant:MAI-Voice-2.1-Flash",
              "nl-NL-Harper:MAI-Voice-2.1-Flash",
              "nl-NL-Sander:MAI-Voice-2.1-Flash",
              "pl-PL-Grant:MAI-Voice-2.1-Flash",
              "pl-PL-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Caio:MAI-Voice-2.1-Flash",
              "pt-BR-Grant:MAI-Voice-2.1-Flash",
              "pt-BR-Harper:MAI-Voice-2.1-Flash",
              "pt-BR-Luana:MAI-Voice-2.1-Flash",
              "pt-BR-Pedro:MAI-Voice-2.1-Flash",
              "pt-BR-Rafael:MAI-Voice-2.1-Flash",
              "pt-PT-Grant:MAI-Voice-2.1-Flash",
              "pt-PT-Harper:MAI-Voice-2.1-Flash",
              "pt-PT-Rui:MAI-Voice-2.1-Flash",
              "ro-RO-Andrei:MAI-Voice-2.1-Flash",
              "ro-RO-Elena:MAI-Voice-2.1-Flash",
              "ro-RO-Grant:MAI-Voice-2.1-Flash",
              "ro-RO-Harper:MAI-Voice-2.1-Flash",
              "ro-RO-Ioana:MAI-Voice-2.1-Flash",
              "ro-RO-Radu:MAI-Voice-2.1-Flash",
              "ru-RU-Grant:MAI-Voice-2.1-Flash",
              "ru-RU-Harper:MAI-Voice-2.1-Flash",
              "ru-RU-Lev:MAI-Voice-2.1-Flash",
              "ru-RU-Masha:MAI-Voice-2.1-Flash",
              "sv-SE-Grant:MAI-Voice-2.1-Flash",
              "sv-SE-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Grant:MAI-Voice-2.1-Flash",
              "th-TH-Harper:MAI-Voice-2.1-Flash",
              "th-TH-Krit:MAI-Voice-2.1-Flash",
              "th-TH-Nattapong:MAI-Voice-2.1-Flash",
              "tr-TR-Aydin:MAI-Voice-2.1-Flash",
              "tr-TR-Elif:MAI-Voice-2.1-Flash",
              "tr-TR-Grant:MAI-Voice-2.1-Flash",
              "tr-TR-Harper:MAI-Voice-2.1-Flash",
              "vi-VN-Grant:MAI-Voice-2.1-Flash",
              "vi-VN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Bo:MAI-Voice-2.1-Flash",
              "zh-CN-Grant:MAI-Voice-2.1-Flash",
              "zh-CN-Harper:MAI-Voice-2.1-Flash",
              "zh-CN-Lan:MAI-Voice-2.1-Flash",
              "zh-CN-Mei:MAI-Voice-2.1-Flash",
              "zh-CN-Wei:MAI-Voice-2.1-Flash"
            ]
          },
          "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."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "768d1dc9b9da20eb0942",
            "label": "Microsoft AI: MAI-Voice-2.1-Flash",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Standardkonfigurasjon"
                },
                "label": "Microsoft AI: MAI-Voice-2.1-Flash · Standardkonfigurasjon",
                "units": [
                  {
                    "amount": "0.000030",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "a7f384d81db64c9b1e8c0855",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"microsoft/mai-voice-2.1-flash\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"cs-CZ-Grant:MAI-Voice-2.1-Flash\", \"cs-CZ-Harper:MAI-Voice-2.1-Flash\", \"da-DK-Grant:MAI-Voice-2.1-Flash\", \"da-DK-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Grant:MAI-Voice-2.1-Flash\", \"de-DE-Harper:MAI-Voice-2.1-Flash\", \"de-DE-Klaus:MAI-Voice-2.1-Flash\", \"de-DE-Mia:MAI-Voice-2.1-Flash\", \"en-AU-Isla:MAI-Voice-2.1-Flash\", \"en-GB-Emily:MAI-Voice-2.1-Flash\", \"en-GB-Harry:MAI-Voice-2.1-Flash\", \"en-IN-Dhruv:MAI-Voice-2.1-Flash\", \"en-IN-Priya:MAI-Voice-2.1-Flash\", \"en-US-Ethan:MAI-Voice-2.1-Flash\", \"en-US-Grant:MAI-Voice-2.1-Flash\", \"en-US-Harper:MAI-Voice-2.1-Flash\", \"en-US-Iris:MAI-Voice-2.1-Flash\", \"en-US-Jasper:MAI-Voice-2.1-Flash\", \"en-US-Olivia:MAI-Voice-2.1-Flash\", \"en-US-Sage:MAI-Voice-2.1-Flash\", \"es-ES-Marta:MAI-Voice-2.1-Flash\", \"es-MX-Alejo:MAI-Voice-2.1-Flash\", \"es-MX-Grant:MAI-Voice-2.1-Flash\", \"es-MX-Harper:MAI-Voice-2.1-Flash\", \"es-MX-Valeria:MAI-Voice-2.1-Flash\", \"fi-FI-Grant:MAI-Voice-2.1-Flash\", \"fi-FI-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Grant:MAI-Voice-2.1-Flash\", \"fr-FR-Harper:MAI-Voice-2.1-Flash\", \"fr-FR-Marc:MAI-Voice-2.1-Flash\", \"fr-FR-Soleil:MAI-Voice-2.1-Flash\", \"hi-IN-Arjun:MAI-Voice-2.1-Flash\", \"hi-IN-Dhruv:MAI-Voice-2.1-Flash\", \"hi-IN-Grant:MAI-Voice-2.1-Flash\", \"hi-IN-Harper:MAI-Voice-2.1-Flash\", \"hi-IN-Kavya:MAI-Voice-2.1-Flash\", \"hi-IN-Priya:MAI-Voice-2.1-Flash\", \"hu-HU-Bence:MAI-Voice-2.1-Flash\", \"hu-HU-Grant:MAI-Voice-2.1-Flash\", \"hu-HU-Harper:MAI-Voice-2.1-Flash\", \"hu-HU-Levente:MAI-Voice-2.1-Flash\", \"hu-HU-Lilla:MAI-Voice-2.1-Flash\", \"hu-HU-Reka:MAI-Voice-2.1-Flash\", \"id-ID-Grant:MAI-Voice-2.1-Flash\", \"id-ID-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Grant:MAI-Voice-2.1-Flash\", \"it-IT-Harper:MAI-Voice-2.1-Flash\", \"it-IT-Luca:MAI-Voice-2.1-Flash\", \"it-IT-Rosa:MAI-Voice-2.1-Flash\", \"ko-KR-Grant:MAI-Voice-2.1-Flash\", \"ko-KR-Haena:MAI-Voice-2.1-Flash\", \"ko-KR-Harper:MAI-Voice-2.1-Flash\", \"ko-KR-Junho:MAI-Voice-2.1-Flash\", \"nb-NO-Grant:MAI-Voice-2.1-Flash\", \"nb-NO-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Grant:MAI-Voice-2.1-Flash\", \"nl-NL-Harper:MAI-Voice-2.1-Flash\", \"nl-NL-Sander:MAI-Voice-2.1-Flash\", \"pl-PL-Grant:MAI-Voice-2.1-Flash\", \"pl-PL-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Caio:MAI-Voice-2.1-Flash\", \"pt-BR-Grant:MAI-Voice-2.1-Flash\", \"pt-BR-Harper:MAI-Voice-2.1-Flash\", \"pt-BR-Luana:MAI-Voice-2.1-Flash\", \"pt-BR-Pedro:MAI-Voice-2.1-Flash\", \"pt-BR-Rafael:MAI-Voice-2.1-Flash\", \"pt-PT-Grant:MAI-Voice-2.1-Flash\", \"pt-PT-Harper:MAI-Voice-2.1-Flash\", \"pt-PT-Rui:MAI-Voice-2.1-Flash\", \"ro-RO-Andrei:MAI-Voice-2.1-Flash\", \"ro-RO-Elena:MAI-Voice-2.1-Flash\", \"ro-RO-Grant:MAI-Voice-2.1-Flash\", \"ro-RO-Harper:MAI-Voice-2.1-Flash\", \"ro-RO-Ioana:MAI-Voice-2.1-Flash\", \"ro-RO-Radu:MAI-Voice-2.1-Flash\", \"ru-RU-Grant:MAI-Voice-2.1-Flash\", \"ru-RU-Harper:MAI-Voice-2.1-Flash\", \"ru-RU-Lev:MAI-Voice-2.1-Flash\", \"ru-RU-Masha:MAI-Voice-2.1-Flash\", \"sv-SE-Grant:MAI-Voice-2.1-Flash\", \"sv-SE-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Grant:MAI-Voice-2.1-Flash\", \"th-TH-Harper:MAI-Voice-2.1-Flash\", \"th-TH-Krit:MAI-Voice-2.1-Flash\", \"th-TH-Nattapong:MAI-Voice-2.1-Flash\", \"tr-TR-Aydin:MAI-Voice-2.1-Flash\", \"tr-TR-Elif:MAI-Voice-2.1-Flash\", \"tr-TR-Grant:MAI-Voice-2.1-Flash\", \"tr-TR-Harper:MAI-Voice-2.1-Flash\", \"vi-VN-Grant:MAI-Voice-2.1-Flash\", \"vi-VN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Bo:MAI-Voice-2.1-Flash\", \"zh-CN-Grant:MAI-Voice-2.1-Flash\", \"zh-CN-Harper:MAI-Voice-2.1-Flash\", \"zh-CN-Lan:MAI-Voice-2.1-Flash\", \"zh-CN-Mei:MAI-Voice-2.1-Flash\", \"zh-CN-Wei:MAI-Voice-2.1-Flash\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\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": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.03000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.03000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "microsoft/mai-voice-2.1-flash",
        "request_model_id": "microsoft/mai-voice-2.1-flash",
        "route_label": "Ultra"
      }
    ],
    "name": "Microsoft AI: MAI-Voice-2.1-Flash",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "hosted_reference"
        },
        "dimensions": {
          "variant": null
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000030",
            "amount_unit": "usd_per_input_character",
            "conditions": {
              "variant": null
            },
            "key": "pricing.prompt",
            "label": "prompt",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_character"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_not_separately_charged_output",
            "conditions": {
              "variant": null
            },
            "key": "pricing.completion",
            "label": "completion",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "not_separately_charged_output"
          }
        ]
      }
    ],
    "public_id": "microsoft/mai-voice-2.1-flash",
    "short": "Microsoft AIs MAI-Voice-2.1-Flash genererer uttrykksfull tale på 23 språk for interaktive stemmeapplikasjoner. Den støtter strømming, flere talere og fremføringskontroll på setningsnivå, med et kuratert stemmebibliotek."
  },
  "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": "Microsoft AIs MAI-Voice-2.1-Flash genererer uttrykksfull tale på 23 språk for interaktive stemmeapplikasjoner. Den støtter strømming, flere talere og fremføringskontroll på setningsnivå, med et kuratert stemmebibliotek.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "37b75bc1f32b5082bfffce51f900892abafac9af71c726d22e985c1f4d127aac",
    "renderer_sha256": "c8cb5a92c10b47373d294dee7465d66796cd4710c6626fd81459dc0625fc6d26"
  },
  "sourceRevision": "8699e408f845b7fc1ce86cd5fb9096e453b2f48bf2715096ae56d205376e7400"
}
