{
  "aboutHtml": "<p>GPT-4o Transcribe Diarize on OpenAI:n automaattinen puheentunnistusmalli, jossa on sisäänrakennettu puhujien erottelu. Se yhdistää litteroidut äänijaksot keskustelun eri puhujiin. Hyödyllinen tulos on puhujan ja ajan mukaan järjestetty teksti pelkän yhtenäisen sanamassan sijaan. Se on tarkoitettu tallennetulle puheelle, joka tarvitsee puhujatunnisteet, kuten kokoukselle, haastattelulle tai usean henkilön keskustelulle.</p><h4>Valmistele valmis tallenne</h4><p>Anna litteroitava tallenne. Dokumentoitu tiedostotyönkulku hyväksyy MP3-, MP4-, MPEG-, MPGA-, M4A-, WAV- ja WebM-tiedostot, joiden kokoraja on 25 MB. Säilytä lähdetallenne saatavilla, jotta puhujan vuoro, nimi tai epäselvä ilmaus voidaan tarkistaa todellista ääntä vasten.</p><p>Säilytä kokouksessa keskustelun järjestys sen sijaan, että poistaisit vuorojen erottelua auttavat lyhyet tauot. Pidä haastattelun kysymys ja vastaus yhdessä, kun tehtävä tarvitsee niiden suhdetta. Äänen valmistelun tulee tehdä puheesta kuultavaa poistamatta puhujatunnisteisen tuloksen kannalta tärkeää tietoa.</p><p>Tämä on tiedoston litterointityönkulku. Valmiin tallenteen käsittely ja yhä saapuvan äänivirran tunnistaminen ovat eri tehtäviä; mallin puhujatunnisteita ei tueta Realtime-litterointi-istunnoissa.</p><h4>Pyydä puhujatunnisteinen teksti</h4><p><code>diarized_json</code>-tulosmuoto palauttaa jaksoja, joissa on puhujan tunniste sekä alku- ja loppuajat. Jokainen jakso sisältää myös litteroidun tekstinsä. Pidä kentät yhdessä, jotta sanat voidaan yhdistää tallenteen oikeaan osaan.</p><p>Säilytä hyödyllisessä kokoustekstissä jaksojen järjestys ja näytä kunkin puhujan sanat niiden ajoituksen kanssa. Myöhempi tehtävä voi käyttää tekstiä pöytäkirjan tai toimenpideluettelon valmisteluun, mutta puhujien erottelu ei itsessään ratkaise, mistä kokouksessa sovittiin, tai generoi vahvistettua yhteenvetoa.</p><p>Puhujatunnisteet kuvaavat mallin puheelle tekemää ryhmittelyä. Tarkasta siirtymät, joissa ihmiset keskeyttävät toisensa, puhuvat lyhyesti tai päällekkäin. Hyvin jäsennelty tulos auttaa selaamisessa ja tarkastuksessa, mutta tietty puhujan kohdistus voi edelleen vaatia alkuperäisen äänen kuuntelemista.</p><h4>Tunnettujen puhujien viitteet</h4><p>Dokumentoitu työnkulku voi hyväksyä enintään neljä nimettyä puhujaviitettä. Jokainen viite on lyhyt 2–10 sekunnin äänikatkelma muodossa, jota varsinainen lataus tukee. Nimet ja viitteet annetaan yhdessä, jotta jaksot voidaan liittää tunnettuihin puhujiin.</p><p>Valmistele viite, joka sisältää selvästi tarkoitetun puhujan, ja pidä sen nimi yhdenmukaisena tekstin tavoiteltujen tunnisteiden kanssa. Haastattelussa juontajan viite voi auttaa puhujatunnisteisen tuloksen järjestämisessä tekemättä jokaisesta osallistujasta nimetöntä tunnistetta. Viite on puhujan kohdistamisen syöte; se ei ole yleinen äänen kloonausoperaatio tai todiste henkilön identiteetistä.</p><p>Älä sekoita puhujan nimeämistä puhuttujen sanojen muokkaamiseen. Hyödyllisen tulosteen tulee edelleen säilyttää tallenteen sisältö ja vuorojen todellinen järjestys.</p><h4>Paloittelu ja mallin rajat</h4><p>Yli 30 sekunnin ääni edellyttää tuottajan mukaan paloittelustrategiaa: joko automaattista paloittelua tai puheaktiivisuuden tunnistukseen perustuvaa määritystä. Tämä vaatimus ei ole tallenteen enimmäiskesto. Se kuvaa pidemmän syötteen jakamista käsittelyä varten.</p><p>Mallikortti ilmoittaa konteksti-ikkunaksi 16000 tokenia ja enimmäistulosteeksi 2000 tokenia. Nämä ovat mallin tokenirajoja, jotka eroavat tiedostotyönkulun 25 MB:n latausrajasta ja paloittelukynnyksestä. Niitä ei pidä muuttaa keksityksi minuuttimääräksi, joka koskisi jokaista tallennetta.</p><p>Säilytä ajoitus ja jaksojen tunnisteet pidempää tekstiä koottaessa tai tarkastettaessa. Jos tallenne on jaettu ennen lähettämistä, säilytä kunkin osan suhde alkuperäiseen ääneen, jotta paikallista aikaleimaa ei sekoiteta sen sijaintiin koko keskustelussa.</p><h4>Valmiiden jaksojen suoratoisto</h4><p>Tiedoston litterointityönkulku voi suoratoistaa tekstiä tallenteen käsittelyn aikana. Puhujatunnisteisessa suoratoistossa valmiit jaksot tuottavat jaksotapahtumia. Tekstin osittaiset päivitykset sisältävät jakson tunnisteen mutta eivät osittaisia puhujakohdistuksia; puhuja määritetään, kun jakso valmistuu.</p><p>Ero on tärkeä esityksessä. Näytä alustava teksti ja valmis puhujavuoro eri tiloina sen sijaan, että liittäisit epävarman puhujatunnisteen ennen jakson valmistumista. Säilytä valmis tulos, kun tekstiä tarvitaan myöhempään muokkaukseen tai analyysiin.</p><h4>Mallin ja tulosteen rajat</h4><p>Tämä profiili on puhujien erotteluun tarkoitettu malli, joka eroaa tavallisesta GPT-4o-litteroinnista, Mini-litteroinnista, puhesynteesistä ja suorista keskustelumalleista. Se ei tue litterointikehotteita; pidä terminologian tarkastus tai korjaus erillisenä vaiheena, joka tarkistetaan alkuperäistä ääntä vasten. Sen tuottajan rajapinta muuttaa tallennetun äänen tekstiksi. Se ei generoi äänivastausta tai käännä tallennetta erillisen äänenkäännöstyönkulun kautta.</p><p>Käytä sitä teksteihin, jotka tarvitsevat sekä sisällön että puhujarakenteen. Tarkista nimet, tekniset termit, numerot, vuororajat ja puhujakohdistukset tallennetta vasten. Säilytä ääni, valittu tulosmuoto, viitteet ja valmis teksti, jotta korjaus voi kohdistua yhteen konkreettiseen ilmaukseen tai puhujakohdistukseen.</p>",
  "aboutText": "GPT-4o Transcribe Diarize on OpenAI:n automaattinen puheentunnistusmalli, jossa on sisäänrakennettu puhujien erottelu. Se yhdistää litteroidut äänijaksot keskustelun eri puhujiin. Hyödyllinen tulos on puhujan ja ajan mukaan järjestetty teksti pelkän yhtenäisen sanamassan sijaan. Se on tarkoitettu tallennetulle puheelle, joka tarvitsee puhujatunnisteet, kuten kokoukselle, haastattelulle tai usean henkilön keskustelulle.\n\n### Valmistele valmis tallenne\n\nAnna litteroitava tallenne. Dokumentoitu tiedostotyönkulku hyväksyy MP3-, MP4-, MPEG-, MPGA-, M4A-, WAV- ja WebM-tiedostot, joiden kokoraja on 25 MB. Säilytä lähdetallenne saatavilla, jotta puhujan vuoro, nimi tai epäselvä ilmaus voidaan tarkistaa todellista ääntä vasten.\n\nSäilytä kokouksessa keskustelun järjestys sen sijaan, että poistaisit vuorojen erottelua auttavat lyhyet tauot. Pidä haastattelun kysymys ja vastaus yhdessä, kun tehtävä tarvitsee niiden suhdetta. Äänen valmistelun tulee tehdä puheesta kuultavaa poistamatta puhujatunnisteisen tuloksen kannalta tärkeää tietoa.\n\nTämä on tiedoston litterointityönkulku. Valmiin tallenteen käsittely ja yhä saapuvan äänivirran tunnistaminen ovat eri tehtäviä; mallin puhujatunnisteita ei tueta Realtime-litterointi-istunnoissa.\n\n### Pyydä puhujatunnisteinen teksti\n\n`diarized_json`-tulosmuoto palauttaa jaksoja, joissa on puhujan tunniste sekä alku- ja loppuajat. Jokainen jakso sisältää myös litteroidun tekstinsä. Pidä kentät yhdessä, jotta sanat voidaan yhdistää tallenteen oikeaan osaan.\n\nSäilytä hyödyllisessä kokoustekstissä jaksojen järjestys ja näytä kunkin puhujan sanat niiden ajoituksen kanssa. Myöhempi tehtävä voi käyttää tekstiä pöytäkirjan tai toimenpideluettelon valmisteluun, mutta puhujien erottelu ei itsessään ratkaise, mistä kokouksessa sovittiin, tai generoi vahvistettua yhteenvetoa.\n\nPuhujatunnisteet kuvaavat mallin puheelle tekemää ryhmittelyä. Tarkasta siirtymät, joissa ihmiset keskeyttävät toisensa, puhuvat lyhyesti tai päällekkäin. Hyvin jäsennelty tulos auttaa selaamisessa ja tarkastuksessa, mutta tietty puhujan kohdistus voi edelleen vaatia alkuperäisen äänen kuuntelemista.\n\n### Tunnettujen puhujien viitteet\n\nDokumentoitu työnkulku voi hyväksyä enintään neljä nimettyä puhujaviitettä. Jokainen viite on lyhyt 2–10 sekunnin äänikatkelma muodossa, jota varsinainen lataus tukee. Nimet ja viitteet annetaan yhdessä, jotta jaksot voidaan liittää tunnettuihin puhujiin.\n\nValmistele viite, joka sisältää selvästi tarkoitetun puhujan, ja pidä sen nimi yhdenmukaisena tekstin tavoiteltujen tunnisteiden kanssa. Haastattelussa juontajan viite voi auttaa puhujatunnisteisen tuloksen järjestämisessä tekemättä jokaisesta osallistujasta nimetöntä tunnistetta. Viite on puhujan kohdistamisen syöte; se ei ole yleinen äänen kloonausoperaatio tai todiste henkilön identiteetistä.\n\nÄlä sekoita puhujan nimeämistä puhuttujen sanojen muokkaamiseen. Hyödyllisen tulosteen tulee edelleen säilyttää tallenteen sisältö ja vuorojen todellinen järjestys.\n\n### Paloittelu ja mallin rajat\n\nYli 30 sekunnin ääni edellyttää tuottajan mukaan paloittelustrategiaa: joko automaattista paloittelua tai puheaktiivisuuden tunnistukseen perustuvaa määritystä. Tämä vaatimus ei ole tallenteen enimmäiskesto. Se kuvaa pidemmän syötteen jakamista käsittelyä varten.\n\nMallikortti ilmoittaa konteksti-ikkunaksi 16000 tokenia ja enimmäistulosteeksi 2000 tokenia. Nämä ovat mallin tokenirajoja, jotka eroavat tiedostotyönkulun 25 MB:n latausrajasta ja paloittelukynnyksestä. Niitä ei pidä muuttaa keksityksi minuuttimääräksi, joka koskisi jokaista tallennetta.\n\nSäilytä ajoitus ja jaksojen tunnisteet pidempää tekstiä koottaessa tai tarkastettaessa. Jos tallenne on jaettu ennen lähettämistä, säilytä kunkin osan suhde alkuperäiseen ääneen, jotta paikallista aikaleimaa ei sekoiteta sen sijaintiin koko keskustelussa.\n\n### Valmiiden jaksojen suoratoisto\n\nTiedoston litterointityönkulku voi suoratoistaa tekstiä tallenteen käsittelyn aikana. Puhujatunnisteisessa suoratoistossa valmiit jaksot tuottavat jaksotapahtumia. Tekstin osittaiset päivitykset sisältävät jakson tunnisteen mutta eivät osittaisia puhujakohdistuksia; puhuja määritetään, kun jakso valmistuu.\n\nEro on tärkeä esityksessä. Näytä alustava teksti ja valmis puhujavuoro eri tiloina sen sijaan, että liittäisit epävarman puhujatunnisteen ennen jakson valmistumista. Säilytä valmis tulos, kun tekstiä tarvitaan myöhempään muokkaukseen tai analyysiin.\n\n### Mallin ja tulosteen rajat\n\nTämä profiili on puhujien erotteluun tarkoitettu malli, joka eroaa tavallisesta GPT-4o-litteroinnista, Mini-litteroinnista, puhesynteesistä ja suorista keskustelumalleista. Se ei tue litterointikehotteita; pidä terminologian tarkastus tai korjaus erillisenä vaiheena, joka tarkistetaan alkuperäistä ääntä vasten. Sen tuottajan rajapinta muuttaa tallennetun äänen tekstiksi. Se ei generoi äänivastausta tai käännä tallennetta erillisen äänenkäännöstyönkulun kautta.\n\nKäytä sitä teksteihin, jotka tarvitsevat sekä sisällön että puhujarakenteen. Tarkista nimet, tekniset termit, numerot, vuororajat ja puhujakohdistukset tallennetta vasten. Säilytä ääni, valittu tulosmuoto, viitteet ja valmis teksti, jotta korjaus voi kohdistua yhteen konkreettiseen ilmaukseen tai puhujakohdistukseen.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "eeeaa94b318d5f860f86213ab49462a9d0508c2daf2abc7d956543fe5330d778",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">O</span><h2 id=\"sheet-title\">gpt-4o-transcribe-diarize</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>OpenAI /</span><code>openai/gpt-4o-transcribe-diarize</code><button type=\"button\" id=\"copy-id\">Kopioi ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Mallikortin osiot\"><button type=\"button\" data-card-jump=\"overview\">Aloitus</button><button type=\"button\" data-card-jump=\"methods\">Syötteet &amp; menetelmät</button><button type=\"button\" data-card-jump=\"pricing\">Hinnoittelu</button><button type=\"button\" data-card-jump=\"examples\">Esimerkit</button><button type=\"button\" data-card-jump=\"results\">Tulokset</button><button type=\"button\" data-card-jump=\"aliases\">Aliakset</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-menetelmät\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|transcriptions|/v1/audio/transcriptions|openai%2Fgpt-4o-transcribe-diarize\">Tunnistus</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\">Aloitus</h3><p class=\"mdesc-full\">GPT-4o Transcribe Diarize muuttaa tallennetun puheen tekstiksi, jossa on puhujatunnisteiset jaksot ja ajoitus. Se sopii kokouksiin, haastatteluihin ja usean henkilön tallenteisiin, kun tekstin tulee näyttää, kuka puhui milloinkin. Tunnetuille puhujille voi antaa lyhyitä ääniviitteitä.</p><dl class=\"card-io\" data-card-io><div><dt>Hyväksytyt syötteet</dt><dd>Ääni</dd></div><div><dt>Tulokset</dt><dd>transcription</dd></div></dl><details class=\"card-about\"><summary>Tietoa mallista</summary><p class=\"note-s\" data-model-method-boundary>Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.</p><div class=\"mabout\" id=\"m-about\"><p>GPT-4o Transcribe Diarize on OpenAI:n automaattinen puheentunnistusmalli, jossa on sisäänrakennettu puhujien erottelu. Se yhdistää litteroidut äänijaksot keskustelun eri puhujiin. Hyödyllinen tulos on puhujan ja ajan mukaan järjestetty teksti pelkän yhtenäisen sanamassan sijaan. Se on tarkoitettu tallennetulle puheelle, joka tarvitsee puhujatunnisteet, kuten kokoukselle, haastattelulle tai usean henkilön keskustelulle.</p><h4>Valmistele valmis tallenne</h4><p>Anna litteroitava tallenne. Dokumentoitu tiedostotyönkulku hyväksyy MP3-, MP4-, MPEG-, MPGA-, M4A-, WAV- ja WebM-tiedostot, joiden kokoraja on 25 MB. Säilytä lähdetallenne saatavilla, jotta puhujan vuoro, nimi tai epäselvä ilmaus voidaan tarkistaa todellista ääntä vasten.</p><p>Säilytä kokouksessa keskustelun järjestys sen sijaan, että poistaisit vuorojen erottelua auttavat lyhyet tauot. Pidä haastattelun kysymys ja vastaus yhdessä, kun tehtävä tarvitsee niiden suhdetta. Äänen valmistelun tulee tehdä puheesta kuultavaa poistamatta puhujatunnisteisen tuloksen kannalta tärkeää tietoa.</p><p>Tämä on tiedoston litterointityönkulku. Valmiin tallenteen käsittely ja yhä saapuvan äänivirran tunnistaminen ovat eri tehtäviä; mallin puhujatunnisteita ei tueta Realtime-litterointi-istunnoissa.</p><h4>Pyydä puhujatunnisteinen teksti</h4><p><code>diarized_json</code>-tulosmuoto palauttaa jaksoja, joissa on puhujan tunniste sekä alku- ja loppuajat. Jokainen jakso sisältää myös litteroidun tekstinsä. Pidä kentät yhdessä, jotta sanat voidaan yhdistää tallenteen oikeaan osaan.</p><p>Säilytä hyödyllisessä kokoustekstissä jaksojen järjestys ja näytä kunkin puhujan sanat niiden ajoituksen kanssa. Myöhempi tehtävä voi käyttää tekstiä pöytäkirjan tai toimenpideluettelon valmisteluun, mutta puhujien erottelu ei itsessään ratkaise, mistä kokouksessa sovittiin, tai generoi vahvistettua yhteenvetoa.</p><p>Puhujatunnisteet kuvaavat mallin puheelle tekemää ryhmittelyä. Tarkasta siirtymät, joissa ihmiset keskeyttävät toisensa, puhuvat lyhyesti tai päällekkäin. Hyvin jäsennelty tulos auttaa selaamisessa ja tarkastuksessa, mutta tietty puhujan kohdistus voi edelleen vaatia alkuperäisen äänen kuuntelemista.</p><h4>Tunnettujen puhujien viitteet</h4><p>Dokumentoitu työnkulku voi hyväksyä enintään neljä nimettyä puhujaviitettä. Jokainen viite on lyhyt 2–10 sekunnin äänikatkelma muodossa, jota varsinainen lataus tukee. Nimet ja viitteet annetaan yhdessä, jotta jaksot voidaan liittää tunnettuihin puhujiin.</p><p>Valmistele viite, joka sisältää selvästi tarkoitetun puhujan, ja pidä sen nimi yhdenmukaisena tekstin tavoiteltujen tunnisteiden kanssa. Haastattelussa juontajan viite voi auttaa puhujatunnisteisen tuloksen järjestämisessä tekemättä jokaisesta osallistujasta nimetöntä tunnistetta. Viite on puhujan kohdistamisen syöte; se ei ole yleinen äänen kloonausoperaatio tai todiste henkilön identiteetistä.</p><p>Älä sekoita puhujan nimeämistä puhuttujen sanojen muokkaamiseen. Hyödyllisen tulosteen tulee edelleen säilyttää tallenteen sisältö ja vuorojen todellinen järjestys.</p><h4>Paloittelu ja mallin rajat</h4><p>Yli 30 sekunnin ääni edellyttää tuottajan mukaan paloittelustrategiaa: joko automaattista paloittelua tai puheaktiivisuuden tunnistukseen perustuvaa määritystä. Tämä vaatimus ei ole tallenteen enimmäiskesto. Se kuvaa pidemmän syötteen jakamista käsittelyä varten.</p><p>Mallikortti ilmoittaa konteksti-ikkunaksi 16000 tokenia ja enimmäistulosteeksi 2000 tokenia. Nämä ovat mallin tokenirajoja, jotka eroavat tiedostotyönkulun 25 MB:n latausrajasta ja paloittelukynnyksestä. Niitä ei pidä muuttaa keksityksi minuuttimääräksi, joka koskisi jokaista tallennetta.</p><p>Säilytä ajoitus ja jaksojen tunnisteet pidempää tekstiä koottaessa tai tarkastettaessa. Jos tallenne on jaettu ennen lähettämistä, säilytä kunkin osan suhde alkuperäiseen ääneen, jotta paikallista aikaleimaa ei sekoiteta sen sijaintiin koko keskustelussa.</p><h4>Valmiiden jaksojen suoratoisto</h4><p>Tiedoston litterointityönkulku voi suoratoistaa tekstiä tallenteen käsittelyn aikana. Puhujatunnisteisessa suoratoistossa valmiit jaksot tuottavat jaksotapahtumia. Tekstin osittaiset päivitykset sisältävät jakson tunnisteen mutta eivät osittaisia puhujakohdistuksia; puhuja määritetään, kun jakso valmistuu.</p><p>Ero on tärkeä esityksessä. Näytä alustava teksti ja valmis puhujavuoro eri tiloina sen sijaan, että liittäisit epävarman puhujatunnisteen ennen jakson valmistumista. Säilytä valmis tulos, kun tekstiä tarvitaan myöhempään muokkaukseen tai analyysiin.</p><h4>Mallin ja tulosteen rajat</h4><p>Tämä profiili on puhujien erotteluun tarkoitettu malli, joka eroaa tavallisesta GPT-4o-litteroinnista, Mini-litteroinnista, puhesynteesistä ja suorista keskustelumalleista. Se ei tue litterointikehotteita; pidä terminologian tarkastus tai korjaus erillisenä vaiheena, joka tarkistetaan alkuperäistä ääntä vasten. Sen tuottajan rajapinta muuttaa tallennetun äänen tekstiksi. Se ei generoi äänivastausta tai käännä tallennetta erillisen äänenkäännöstyönkulun kautta.</p><p>Käytä sitä teksteihin, jotka tarvitsevat sekä sisällön että puhujarakenteen. Tarkista nimet, tekniset termit, numerot, vuororajat ja puhujakohdistukset tallennetta vasten. Säilytä ääni, valittu tulosmuoto, viitteet ja valmis teksti, jotta korjaus voi kohdistua yhteen konkreettiseen ilmaukseen tai puhujakohdistukseen.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Saatavilla Ailootissa · syötteet &amp; menetelmät</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Puheentunnistus</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Syötetyypit</dt><dd><code>audio</code></dd></div><div><dt>Tulostyypit</dt><dd><code>transcription</code></dd></div><div><dt>Tulosteen muoto</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Kenttä</th><th>Tyyppi</th><th>Vaatimus</th><th>Arvot &amp; rajat</th><th>Oletus</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>openai/gpt-4o-transcribe-diarize</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">file</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>file</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Tavujen enimmäismäärä: 26 214 400</div><div>MIME-tyypit: audio/mpeg</div><div>Tiedostopääte: .mp3</div><div>Enimmäiskesto, sekuntia: 30</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>diarized_json</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Syöteaineistojen yhdistelmät</summary><p class=\"note-s\"><b>diarized_transcription</b></p></details><details class=\"note-s\" data-method-contract><summary>Menetelmän parametrit ja elinkaari</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametri</th><th>Sopimus</th></tr></thead><tbody><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>content_type</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>multipart/form-data</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>required</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>model, file, response_format</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>file_formats</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>mp3</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>max_audio_seconds</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>30</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>max_bytes</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>26214400</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>response_format</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>diarized_json</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>other_options</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>false</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>material_types</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>audio</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>additional_properties</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>false</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>form_string_maximum_bytes</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>256</td></tr></tbody></table></div><p>Menetelmien aliakset: <code>/audio/transcriptions</code></p><p>Elinkaari: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · todellisuudessa palautettu task_id tai mediakirjaston tietue</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\">Käytä todellista tallennetta ja sitä vastaavaa muotoa.</p><p class=\"note-s\">Säilytä koko litterointi, segmentit, puhujatunnisteet ja ajoitustiedot.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Hinnoittelu</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.</p><dl data-price-conditions><dt>Nopea tila</dt><dd>Ei määritetty <span class=\"note-s\">Kun nopea tila on valittu</span></dd><dt>Flex-tila</dt><dd>Ei määritetty <span class=\"note-s\">Kun flex-tila on valittu</span></dd><dt>Päättelyn enimmäisteho</dt><dd>Ei määritetty <span class=\"note-s\">Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot-hinnat</h4><h4>Hinnat asetusten mukaan</h4><p class=\"note-s\">Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Asetukset</th><th>Hinnasto</th><th>Laskutusyksikkö</th><th>Veloitus</th></tr></thead><tbody><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Tokenien perushinnat</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>Perushinta</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>—</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · Syötetokenit</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Tuloste · Tulostokenit</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistin luku</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus, 1 tunti</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Ultra</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>/ 1K äänitokenia</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · äänisyötteen token</span> <b>$0.012</b> <span class=\"price-unit\">/ 1K äänitokenia</span></div></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Ultra</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>/ 1K äänitokenia</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste · äänitulosteen token</span> <b>$0.02</b> <span class=\"price-unit\">/ 1K äänitokenia</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. <a href=\"/docs/fi/billing/reserve/\">Varauksen ja lopullisen veloituksen toiminta →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esimerkkipyynnöt</h3><h4>Ailoot Ultra · Puheentunnistus</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-2050-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2050-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · säilytetty luontipyyntö sellaisenaan</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><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-2050-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2050-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_AUDIO_FILE:?Set the path to your actual MP3 recording}&quot;\nexport AILOOT_AUDIO_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport os\nfrom pathlib import Path\np=Path(os.environ[&quot;AILOOT_AUDIO_FILE&quot;])\nif not p.is_file() or p.suffix.lower()!=&quot;.mp3&quot;:raise SystemExit(&quot;Choose an existing MP3 recording&quot;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; \\\n  --form-string model=openai/gpt-4o-transcribe-diarize -F &quot;file=@$AILOOT_AUDIO_FILE&quot; --form-string response_format=diarized_json \\\n  -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;result.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Vastaanota ja tallenna tulokset</h3><h4>Ailoot Ultra · Puheentunnistus</h4><p class=\"note-s\">json</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>Muut sisällön lukukerrat</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-2051-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2051-panel-0\" aria-selected=\"true\" tabindex=\"0\">Tallenna jokainen palautettu omistamasi litterointi</button><button class=\"cg-tab\" id=\"model-code-2051-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2051-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Mediakirjasto</button><button class=\"cg-tab\" id=\"model-code-2051-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2051-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Tehtävän tila</button><button class=\"cg-tab\" id=\"model-code-2051-tab-3\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2051-panel-3\" aria-selected=\"false\" tabindex=\"-1\">Aineiston tiedot</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><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-2051-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2051-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nurls=[]\nif isinstance(r.get(&#39;asset_url&#39;),str) and r[&#39;asset_url&#39;]:urls.append((&#39;transcript&#39;,r[&#39;asset_url&#39;]))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2051-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2051-tab-1\" hidden><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-2051-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2051-tab-2\" 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-2051-panel-3\" role=\"tabpanel\" aria-labelledby=\"model-code-2051-tab-3\" 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>Säilytä kaikki valmistuneet tulokset</h5><p class=\"note-s\">Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.</p><p class=\"note-s\">Säilytä koko JSON, älä pelkkää tekstiä; säilytä jokainen saatavilla oleva segmentti, puhuja ja aikaleima sekä todellinen tehtävä- ja aineistotunniste.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jos alkuperäinen vastaus on tarkistettava</h5><p class=\"note-s\">Säilytä alkuperäinen operation_id/X-Client-Request-ID täsmäytystä varten lähettämättä pyyntöä uudelleen; erillistä äänen tilakyselyreittiä ei ole.</p></div><details class=\"card-about\" data-output-fields><summary>Vastauksen kentät</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Kenttä</th><th>Tyyppi</th></tr></thead><tbody><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">text</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">segments[]</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>object</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">asset_url</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>object</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">segments[].speaker</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">segments[].start</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>number</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">segments[].end</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>number</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Virheet ja seuraavat vaiheet</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Vastaus</th><th>Ehto</th><th>Seuraava vaihe</th></tr></thead><tbody><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.</td></tr><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span><code>server_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Palautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistusta</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Säilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliakset</h3><h4>Mallin aliakset</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=openai%2Fgpt-4o-transcribe-diarize&amp;route=Ultra&amp;caller=openai%2Fgpt-4o-transcribe-diarize&amp;fmt=transcriptions\"><code>openai/gpt-4o-transcribe-diarize</code></a></span></p><h4>Menetelmäpolkujen aliakset</h4><p class=\"note-s\"><code>/audio/transcriptions</code></p><h4>Liittyvät kutsujan ID:t</h4><p class=\"note-s\"><a href=\"#m=openai%2Fgpt-4o-transcribe-diarize&amp;route=Ultra&amp;caller=openai%2Fgpt-4o-transcribe-diarize&amp;fmt=transcriptions\"><code>openai/gpt-4o-transcribe-diarize</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "openai/gpt-4o-transcribe-diarize",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "openai/gpt-4o-transcribe-diarize",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|openai%2Fgpt-4o-transcribe-diarize",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
            "errors": [
              {
                "code": null,
                "condition": "Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo",
                "http_status": 400,
                "recovery": "Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Palautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistusta",
                "http_status": null,
                "recovery": "Säilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen.",
                "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": "Säilytä alkuperäinen operation_id/X-Client-Request-ID täsmäytystä varten lähettämättä pyyntöä uudelleen; erillistä äänen tilakyselyreittiä ei ole."
            },
            "limits": {
              "decoded_audio_max_bytes": 26214400
            },
            "material_combinations": [
              {
                "content_type": "multipart/form-data",
                "file_formats": [
                  "mp3"
                ],
                "maximum_seconds": 30,
                "mode": "diarized_transcription"
              }
            ],
            "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": [
              "diarized_transcription"
            ],
            "outputs": {
              "all_results": "Säilytä koko JSON, älä pelkkää tekstiä; säilytä jokainen saatavilla oleva segmentti, puhuja ja aikaleima sekä todellinen tehtävä- ja aineistotunniste.",
              "family": "transcription",
              "fields": [
                {
                  "description": null,
                  "name": "text",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "segments[]",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "asset_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "segments[].speaker",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "segments[].start",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "segments[].end",
                  "type": "number"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "openai/gpt-4o-transcribe-diarize"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "file_extension": ".mp3",
                "maximum_bytes": 26214400,
                "maximum_seconds": 30,
                "mime_types": [
                  "audio/mpeg"
                ],
                "name": "file",
                "required": true,
                "type": "file"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "diarized_json"
                ],
                "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": [
              "JSONinput_audio",
              "nonMP3",
              "audioover30seconds",
              "otheroptions"
            ]
          },
          "hints": [
            "Käytä todellista tallennetta ja sitä vastaavaa muotoa.",
            "Säilytä koko litterointi, segmentit, puhujatunnisteet ja ajoitustiedot."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "multipart/form-data",
            "file_formats": [
              "mp3"
            ],
            "form_string_maximum_bytes": 256,
            "material_types": [
              "audio"
            ],
            "max_audio_seconds": 30,
            "max_bytes": 26214400,
            "other_options": false,
            "required": [
              "model",
              "file",
              "response_format"
            ],
            "response_format": [
              "diarized_json"
            ]
          },
          "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": "todellisuudessa palautettu task_id tai mediakirjaston tietue",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "method_aliases": [
            "/audio/transcriptions"
          ],
          "operation_modes": [
            "diarized_transcription"
          ],
          "output": {
            "all_results": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
            "family": "transcription",
            "fields": [
              {
                "description": null,
                "name": "text",
                "type": "string"
              },
              {
                "description": null,
                "name": "segments[]",
                "type": "object"
              },
              {
                "description": null,
                "name": "task_id",
                "type": "string"
              },
              {
                "description": null,
                "name": "asset_url",
                "type": "string"
              },
              {
                "description": null,
                "name": "usage",
                "type": "object"
              },
              {
                "description": null,
                "name": "segments[].speaker",
                "type": "string"
              },
              {
                "description": null,
                "name": "segments[].start",
                "type": "number"
              },
              {
                "description": null,
                "name": "segments[].end",
                "type": "number"
              }
            ],
            "format": "json",
            "owned_result_extra_fields": [
              "task_id",
              "asset_url"
            ],
            "preserve_original_json_fields": [
              "text",
              "task",
              "duration",
              "segments",
              "usage"
            ],
            "segment_fields": [
              "type",
              "text",
              "speaker",
              "start",
              "end",
              "id"
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_token",
                "label": "audio input token",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "audio_input_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_output_token",
                "label": "audio output token",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "native_unit": "audio_output_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "audio_output_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set the path to your actual MP3 recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport os\nfrom pathlib import Path\np=Path(os.environ[\"AILOOT_AUDIO_FILE\"])\nif not p.is_file() or p.suffix.lower()!=\".mp3\":raise SystemExit(\"Choose an existing MP3 recording\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" \\\n  --form-string model=openai/gpt-4o-transcribe-diarize -F \"file=@$AILOOT_AUDIO_FILE\" --form-string response_format=diarized_json \\\n  -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text())))\nPY_RESULT\n",
            "label": "curl · exact retained creation",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('result.json').read_text())\nurls=[]\nif isinstance(r.get('asset_url'),str) and r['asset_url']:urls.append(('transcript',r['asset_url']))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every returned owned transcript",
            "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": "transcriptions",
        "hints": [
          "Use actual recording and matching format.",
          "Preserve full transcript, segments, speaker IDs and timing."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Распознавание речи",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/audio/transcriptions"
        ],
        "out": null,
        "output": [
          "transcription"
        ],
        "path": "/v1/audio/transcriptions",
        "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_token": 1.2e-05,
            "audio_output_token": 2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_token",
                "label": "audio input token",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "audio_input_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_output_token",
                "label": "audio output token",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "native_unit": "audio_output_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "audio_output_token"
              }
            ]
          }
        ],
        "request_model_id": "openai/gpt-4o-transcribe-diarize",
        "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.012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_token",
            "label": "audio input token",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "native_unit": "audio_input_token",
            "public_unit_label": "/ 1K audio tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_token"
          },
          {
            "amount": "0.02000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_output_token",
            "label": "audio output token",
            "native_amount_usd_per_unit": "0.00002",
            "native_quantity": 1,
            "native_unit": "audio_output_token",
            "public_unit_label": "/ 1K audio tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "audio_output_token"
          }
        ]
      }
    }
  ],
  "model_id": "openai/gpt-4o-transcribe-diarize",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "f315a827e59779f87588c0f9162c6a4c5c305f5843d008c82ca7ef203fdfdf15",
    "input_html_sha256": "5bcaa3e46d38af27396892650496377bd975015a8bde53c89b3f8f8e39878bf2",
    "private_audit_sha256": "08101a85a1938f39dc2cb0fcf5103e7ec6e88724c853f679a992015d7d9f973f",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/openai-gpt-4o-transcribe-diarize/",
    "description": "GPT-4o Transcribe Diarize muuttaa tallennetun puheen tekstiksi, jossa on puhujatunnisteiset jaksot ja ajoitus. Se sopii kokouksiin, haastatteluihin ja usean henkilön tallenteisiin, kun tekstin tulee näyttää, kuka puhui milloinkin. Tunnetuille puhujille voi antaa lyhyitä ääniviitteitä.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/openai-gpt-4o-transcribe-diarize/index.md",
    "title": "gpt-4o-transcribe-diarize — Ailoot",
    "url": "https://ailoot.ai/models/fi/openai-gpt-4o-transcribe-diarize/"
  },
  "rawModel": {
    "about": "GPT-4o Transcribe Diarize on OpenAI:n automaattinen puheentunnistusmalli, jossa on sisäänrakennettu puhujien erottelu. Se yhdistää litteroidut äänijaksot keskustelun eri puhujiin. Hyödyllinen tulos on puhujan ja ajan mukaan järjestetty teksti pelkän yhtenäisen sanamassan sijaan. Se on tarkoitettu tallennetulle puheelle, joka tarvitsee puhujatunnisteet, kuten kokoukselle, haastattelulle tai usean henkilön keskustelulle.\n\n### Valmistele valmis tallenne\n\nAnna litteroitava tallenne. Dokumentoitu tiedostotyönkulku hyväksyy MP3-, MP4-, MPEG-, MPGA-, M4A-, WAV- ja WebM-tiedostot, joiden kokoraja on 25 MB. Säilytä lähdetallenne saatavilla, jotta puhujan vuoro, nimi tai epäselvä ilmaus voidaan tarkistaa todellista ääntä vasten.\n\nSäilytä kokouksessa keskustelun järjestys sen sijaan, että poistaisit vuorojen erottelua auttavat lyhyet tauot. Pidä haastattelun kysymys ja vastaus yhdessä, kun tehtävä tarvitsee niiden suhdetta. Äänen valmistelun tulee tehdä puheesta kuultavaa poistamatta puhujatunnisteisen tuloksen kannalta tärkeää tietoa.\n\nTämä on tiedoston litterointityönkulku. Valmiin tallenteen käsittely ja yhä saapuvan äänivirran tunnistaminen ovat eri tehtäviä; mallin puhujatunnisteita ei tueta Realtime-litterointi-istunnoissa.\n\n### Pyydä puhujatunnisteinen teksti\n\n`diarized_json`-tulosmuoto palauttaa jaksoja, joissa on puhujan tunniste sekä alku- ja loppuajat. Jokainen jakso sisältää myös litteroidun tekstinsä. Pidä kentät yhdessä, jotta sanat voidaan yhdistää tallenteen oikeaan osaan.\n\nSäilytä hyödyllisessä kokoustekstissä jaksojen järjestys ja näytä kunkin puhujan sanat niiden ajoituksen kanssa. Myöhempi tehtävä voi käyttää tekstiä pöytäkirjan tai toimenpideluettelon valmisteluun, mutta puhujien erottelu ei itsessään ratkaise, mistä kokouksessa sovittiin, tai generoi vahvistettua yhteenvetoa.\n\nPuhujatunnisteet kuvaavat mallin puheelle tekemää ryhmittelyä. Tarkasta siirtymät, joissa ihmiset keskeyttävät toisensa, puhuvat lyhyesti tai päällekkäin. Hyvin jäsennelty tulos auttaa selaamisessa ja tarkastuksessa, mutta tietty puhujan kohdistus voi edelleen vaatia alkuperäisen äänen kuuntelemista.\n\n### Tunnettujen puhujien viitteet\n\nDokumentoitu työnkulku voi hyväksyä enintään neljä nimettyä puhujaviitettä. Jokainen viite on lyhyt 2–10 sekunnin äänikatkelma muodossa, jota varsinainen lataus tukee. Nimet ja viitteet annetaan yhdessä, jotta jaksot voidaan liittää tunnettuihin puhujiin.\n\nValmistele viite, joka sisältää selvästi tarkoitetun puhujan, ja pidä sen nimi yhdenmukaisena tekstin tavoiteltujen tunnisteiden kanssa. Haastattelussa juontajan viite voi auttaa puhujatunnisteisen tuloksen järjestämisessä tekemättä jokaisesta osallistujasta nimetöntä tunnistetta. Viite on puhujan kohdistamisen syöte; se ei ole yleinen äänen kloonausoperaatio tai todiste henkilön identiteetistä.\n\nÄlä sekoita puhujan nimeämistä puhuttujen sanojen muokkaamiseen. Hyödyllisen tulosteen tulee edelleen säilyttää tallenteen sisältö ja vuorojen todellinen järjestys.\n\n### Paloittelu ja mallin rajat\n\nYli 30 sekunnin ääni edellyttää tuottajan mukaan paloittelustrategiaa: joko automaattista paloittelua tai puheaktiivisuuden tunnistukseen perustuvaa määritystä. Tämä vaatimus ei ole tallenteen enimmäiskesto. Se kuvaa pidemmän syötteen jakamista käsittelyä varten.\n\nMallikortti ilmoittaa konteksti-ikkunaksi 16000 tokenia ja enimmäistulosteeksi 2000 tokenia. Nämä ovat mallin tokenirajoja, jotka eroavat tiedostotyönkulun 25 MB:n latausrajasta ja paloittelukynnyksestä. Niitä ei pidä muuttaa keksityksi minuuttimääräksi, joka koskisi jokaista tallennetta.\n\nSäilytä ajoitus ja jaksojen tunnisteet pidempää tekstiä koottaessa tai tarkastettaessa. Jos tallenne on jaettu ennen lähettämistä, säilytä kunkin osan suhde alkuperäiseen ääneen, jotta paikallista aikaleimaa ei sekoiteta sen sijaintiin koko keskustelussa.\n\n### Valmiiden jaksojen suoratoisto\n\nTiedoston litterointityönkulku voi suoratoistaa tekstiä tallenteen käsittelyn aikana. Puhujatunnisteisessa suoratoistossa valmiit jaksot tuottavat jaksotapahtumia. Tekstin osittaiset päivitykset sisältävät jakson tunnisteen mutta eivät osittaisia puhujakohdistuksia; puhuja määritetään, kun jakso valmistuu.\n\nEro on tärkeä esityksessä. Näytä alustava teksti ja valmis puhujavuoro eri tiloina sen sijaan, että liittäisit epävarman puhujatunnisteen ennen jakson valmistumista. Säilytä valmis tulos, kun tekstiä tarvitaan myöhempään muokkaukseen tai analyysiin.\n\n### Mallin ja tulosteen rajat\n\nTämä profiili on puhujien erotteluun tarkoitettu malli, joka eroaa tavallisesta GPT-4o-litteroinnista, Mini-litteroinnista, puhesynteesistä ja suorista keskustelumalleista. Se ei tue litterointikehotteita; pidä terminologian tarkastus tai korjaus erillisenä vaiheena, joka tarkistetaan alkuperäistä ääntä vasten. Sen tuottajan rajapinta muuttaa tallennetun äänen tekstiksi. Se ei generoi äänivastausta tai käännä tallennetta erillisen äänenkäännöstyönkulun kautta.\n\nKäytä sitä teksteihin, jotka tarvitsevat sekä sisällön että puhujarakenteen. Tarkista nimet, tekniset termit, numerot, vuororajat ja puhujakohdistukset tallennetta vasten. Säilytä ääni, valittu tulosmuoto, viitteet ja valmis teksti, jotta korjaus voi kohdistua yhteen konkreettiseen ilmaukseen tai puhujakohdistukseen.",
    "alias_of": null,
    "aliases": [],
    "author": "OpenAI",
    "available": null,
    "canonical_model": "openai/gpt-4o-transcribe-diarize",
    "capabilities": {
      "context_length": 16000,
      "manufacturer_input": [],
      "manufacturer_output": []
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_token",
            "label": "audio input token",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "native_unit": "audio_input_token",
            "public_unit_label": "/ 1K audio tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_token"
          },
          {
            "amount": "0.02000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_output_token",
            "label": "audio output token",
            "native_amount_usd_per_unit": "0.00002",
            "native_quantity": 1,
            "native_unit": "audio_output_token",
            "public_unit_label": "/ 1K audio tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "audio_output_token"
          }
        ],
        "summary": "Konfiguraation täydet hintatiedot lisätiedoissa."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "transcriptions"
    ],
    "id": "openai/gpt-4o-transcribe-diarize",
    "input": [
      "audio"
    ],
    "kind": "unresolved_method_or_category",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
            "errors": [
              {
                "code": null,
                "condition": "Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo",
                "http_status": 400,
                "recovery": "Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Palautettu vastaus ilmoittaa, että operaatio tai tulos edellyttää tarkistusta",
                "http_status": null,
                "recovery": "Säilytä alkuperäinen palautettu operaation tai tehtävän ID, pyynnön otsakkeet ja vastaus; jatka kyseisen alkuperäisen operaation tuettuja lukutoimintoja. Älä lähetä luontipyyntöä uudelleen.",
                "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": "Säilytä alkuperäinen operation_id/X-Client-Request-ID täsmäytystä varten lähettämättä pyyntöä uudelleen; erillistä äänen tilakyselyreittiä ei ole."
            },
            "limits": {
              "decoded_audio_max_bytes": 26214400
            },
            "material_combinations": [
              {
                "content_type": "multipart/form-data",
                "file_formats": [
                  "mp3"
                ],
                "maximum_seconds": 30,
                "mode": "diarized_transcription"
              }
            ],
            "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": [
              "diarized_transcription"
            ],
            "outputs": {
              "all_results": "Säilytä koko JSON, älä pelkkää tekstiä; säilytä jokainen saatavilla oleva segmentti, puhuja ja aikaleima sekä todellinen tehtävä- ja aineistotunniste.",
              "family": "transcription",
              "fields": [
                {
                  "description": null,
                  "name": "text",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "segments[]",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "asset_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "segments[].speaker",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "segments[].start",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "segments[].end",
                  "type": "number"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "openai/gpt-4o-transcribe-diarize"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "file_extension": ".mp3",
                "maximum_bytes": 26214400,
                "maximum_seconds": 30,
                "mime_types": [
                  "audio/mpeg"
                ],
                "name": "file",
                "required": true,
                "type": "file"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "diarized_json"
                ],
                "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": [
              "JSONinput_audio",
              "nonMP3",
              "audioover30seconds",
              "otheroptions"
            ]
          },
          "hints": [
            "Käytä todellista tallennetta ja sitä vastaavaa muotoa.",
            "Säilytä koko litterointi, segmentit, puhujatunnisteet ja ajoitustiedot."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "multipart/form-data",
            "file_formats": [
              "mp3"
            ],
            "form_string_maximum_bytes": 256,
            "material_types": [
              "audio"
            ],
            "max_audio_seconds": 30,
            "max_bytes": 26214400,
            "other_options": false,
            "required": [
              "model",
              "file",
              "response_format"
            ],
            "response_format": [
              "diarized_json"
            ]
          },
          "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": "todellisuudessa palautettu task_id tai mediakirjaston tietue",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "method_aliases": [
            "/audio/transcriptions"
          ],
          "operation_modes": [
            "diarized_transcription"
          ],
          "output": {
            "all_results": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
            "family": "transcription",
            "fields": [
              {
                "description": null,
                "name": "text",
                "type": "string"
              },
              {
                "description": null,
                "name": "segments[]",
                "type": "object"
              },
              {
                "description": null,
                "name": "task_id",
                "type": "string"
              },
              {
                "description": null,
                "name": "asset_url",
                "type": "string"
              },
              {
                "description": null,
                "name": "usage",
                "type": "object"
              },
              {
                "description": null,
                "name": "segments[].speaker",
                "type": "string"
              },
              {
                "description": null,
                "name": "segments[].start",
                "type": "number"
              },
              {
                "description": null,
                "name": "segments[].end",
                "type": "number"
              }
            ],
            "format": "json",
            "owned_result_extra_fields": [
              "task_id",
              "asset_url"
            ],
            "preserve_original_json_fields": [
              "text",
              "task",
              "duration",
              "segments",
              "usage"
            ],
            "segment_fields": [
              "type",
              "text",
              "speaker",
              "start",
              "end",
              "id"
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_token",
                "label": "audio input token",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "audio_input_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_output_token",
                "label": "audio output token",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "native_unit": "audio_output_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "audio_output_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set the path to your actual MP3 recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport os\nfrom pathlib import Path\np=Path(os.environ[\"AILOOT_AUDIO_FILE\"])\nif not p.is_file() or p.suffix.lower()!=\".mp3\":raise SystemExit(\"Choose an existing MP3 recording\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" \\\n  --form-string model=openai/gpt-4o-transcribe-diarize -F \"file=@$AILOOT_AUDIO_FILE\" --form-string response_format=diarized_json \\\n  -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text())))\nPY_RESULT\n",
            "label": "curl · exact retained creation",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('result.json').read_text())\nurls=[]\nif isinstance(r.get('asset_url'),str) and r['asset_url']:urls.append(('transcript',r['asset_url']))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every returned owned transcript",
            "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": "transcriptions",
        "hints": [
          "Use actual recording and matching format.",
          "Preserve full transcript, segments, speaker IDs and timing."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Распознавание речи",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/audio/transcriptions"
        ],
        "out": null,
        "output": [
          "transcription"
        ],
        "path": "/v1/audio/transcriptions",
        "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_token": 1.2e-05,
            "audio_output_token": 2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_token",
                "label": "audio input token",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "audio_input_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K audio tokens"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.02000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_output_token",
                "label": "audio output token",
                "native_amount_usd_per_unit": "0.00002",
                "native_quantity": 1,
                "native_unit": "audio_output_token",
                "public_unit_label": "/ 1K audio tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "audio_output_token"
              }
            ]
          }
        ],
        "request_model_id": "openai/gpt-4o-transcribe-diarize",
        "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.012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_token",
            "label": "audio input token",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "native_unit": "audio_input_token",
            "public_unit_label": "/ 1K audio tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_token"
          },
          {
            "amount": "0.02000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_output_token",
            "label": "audio output token",
            "native_amount_usd_per_unit": "0.00002",
            "native_quantity": 1,
            "native_unit": "audio_output_token",
            "public_unit_label": "/ 1K audio tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "audio_output_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "openai/gpt-4o-transcribe-diarize",
        "request_model_id": "openai/gpt-4o-transcribe-diarize",
        "route_label": "Ultra"
      }
    ],
    "name": "gpt-4o-transcribe-diarize",
    "price": {
      "in": null,
      "in_label": null,
      "out": 0.02,
      "out_label": "/ 1K audio tokens",
      "sort_in": null,
      "sort_out": 0.02,
      "varies": true
    },
    "pricing_profiles": [],
    "public_id": "openai/gpt-4o-transcribe-diarize",
    "short": "GPT-4o Transcribe Diarize muuttaa tallennetun puheen tekstiksi, jossa on puhujatunnisteiset jaksot ja ajoitus. Se sopii kokouksiin, haastatteluihin ja usean henkilön tallenteisiin, kun tekstin tulee näyttää, kuka puhui milloinkin. Tunnetuille puhujille voi antaa lyhyitä ääniviitteitä."
  },
  "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": "GPT-4o Transcribe Diarize muuttaa tallennetun puheen tekstiksi, jossa on puhujatunnisteiset jaksot ja ajoitus. Se sopii kokouksiin, haastatteluihin ja usean henkilön tallenteisiin, kun tekstin tulee näyttää, kuka puhui milloinkin. Tunnetuille puhujille voi antaa lyhyitä ääniviitteitä.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "5b4969ba1b4d9d5bb9a488f54e76311585374803ee88d7cabba7041902a02497",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "ee830601cf59a280ead949b70353d86dda3e80ae4049a4b88d592409e0432357"
}
