{
  "aboutHtml": "<p>Transcribe 1 er Fish Audios generelle tale-til-tekst-model til korte optagelser. Den modtager en lydfil og returnerer de genkendte ord som tekst sammen med optagelsens varighed, valgfrie tidskodede segmenter og sprogoplysninger, når de er kendt. Modellen er nyttig til en kort talebesked, en mundtlig instruktion, et uddrag af en optagelse eller et lydklip, der skal have en læsbar tekstrepræsentation.</p><p>En illustrativ arbejdsgang for talebeskeder bevarer optagelsen sammen med dens fulde transskription og en identifikator for det oprindelige klip. Et senere applikationstrin kan søge i teksten, organisere noten eller udarbejde et sammendrag og samtidig bevare den talte kilde. Ved en kommando leverer transskriptionen genkendte ord til applikationen; en eventuel handling er et separat fortolknings- og udførelsestrin. Ved et interviewuddrag skal du registrere klippets placering i den komplette lyd, så et citat kan kontrolleres på det rigtige sted.</p><p>Producenten accepterer WAV, MP3, AAC inklusive M4A/MP4, FLAC og Ogg med Opus eller Vorbis. Browseroptagelser i WebM bør konverteres til Ogg/Opus, MP3 eller WAV til denne model; Pro dokumenterer indbygget understøttelse af yderligere containere. Indsend én lydfil pr. anmodning. Grundmodellens dokumenterede anmodningsgrænse er op til 50 MiB, mens MP3- og Opus-filer skal holdes under 25 MiB. Filstørrelse og optagelseslængde er forskellige forhold: en komprimeret fil kan være inden for uploadgrænsen og alligevel tage for lang tid at behandle.</p><p>Transcribe 1 er udviklet til korte optagelser. Producenten anbefaler Pro til lyd, der er længere end nogle få minutter; en lang anmodning til grundmodellen kan mislykkes, hvis den overskrider grænsen for behandlingstid. Når en længere kilde forberedes til transskription som korte klip, skal du bevare hvert klips startforskydning og bekræfte, at den returnerede transskription dækker hele klippet, før resultaterne kombineres. Læg den oprindelige forskydning til de lokale segmenttider, så navigationen fortsat hænger sammen med den fulde optagelse. Vejledningen til grundmodellen skal ikke fortolkes som Pros separate grænse på 60 minutter.</p><p>Producentens svar indeholder tekst, varighed og segmenter. Varighed angives i sekunder, og den læsbare fulde transskription bør bevares som klippets primære ordlyd. Tidsstempler er valgfrie: ignore_timestamps er som standard true i producentens API, mens false anmoder om segmenter på ordniveau med tekst samt start- og sluttider i sekunder. Anmodning om tidsjustering øger behandlingstiden. Et tomt segments-array kan skyldes fravalgt tidskodning, ingen tale eller midlertidigt utilgængelig tidsjustering og bør derfor ikke automatisk fortolkes som en tom fuld transskription.</p><p>Segmenter er som regel ord eller ét eller nogle få tegn på kinesisk og japansk. Deres tekst udelader tegnsætning og kan normalisere en værdi anderledes end den fulde transskription; den er ikke en tegn-for-tegn-kopi af det læsbare svar. Et segment kan have samme start- og sluttid. Brug segmenter til at finde en position i optagelsen eller forberede tidskodet visning, og brug den fulde tekst, når ordlyd og tegnsætning er vigtige. Hold disse to repræsentationer adskilt i det resulterende materiale.</p><p>Sproget genkendes automatisk, uanset om der gives et valgfrit sproghint. Producenten dokumenterer ISO 639-1-koder med små bogstaver til hints og returnerer en sprogkode til applikationslogik sammen med et sprognavn til visning, når det er kendt. Svaret rapporterer ét sprog og ikke alle sprog i en optagelse, der skifter mellem sprog. Bevar kildens ordlyd og tilgængelige sprogmetadata sammen med resultatet i stedet for at betragte transskriptionsanmodningen som en oversættelseshandling.</p><p>Ved en arbejdsgang for undertekster skal du samle på hinanden følgende tidskodede segmenter i læsbare tekstblokke frem for at vise ét ord ad gangen. Et nyttigt output er en SRT- eller WebVTT-fil knyttet til det oprindelige klip med blokgrænser, der passer til pauser, og en overskuelig tekstmængde på skærmen. Kontroller for manglende tidskodning, og sørg for, at hver bloks slutning ligger efter dens start. Gruppering af undertekster og filformatering er applikationstrin baseret på den returnerede tidsjustering, og valgene for visning bør passe til afspilleren og målgruppen.</p><p>Transcribe 1s dokumenterede indstillinger er lyd, et sproghint og valg af tidsstempler. Pros talermarkører, strukturerede taleture, indstillinger for følelseshændelser og hints om antal talere er separate funktioner; de er ikke en del af denne grundmodels dokumenterede svarkontrakt. Vælg det nødvendige resultat før behandling: almindelig læsbar tekst til en note eller tekst sammen med tidsjustering til navigation ved afspilning og undertekster. Ved at bevare klipidentifikatoren, transskriptionen og eventuelle tilgængelige tider gør du resultatet nyttigt i applikationens næste trin.</p>",
  "aboutText": "Transcribe 1 er Fish Audios generelle tale-til-tekst-model til korte optagelser. Den modtager en lydfil og returnerer de genkendte ord som tekst sammen med optagelsens varighed, valgfrie tidskodede segmenter og sprogoplysninger, når de er kendt. Modellen er nyttig til en kort talebesked, en mundtlig instruktion, et uddrag af en optagelse eller et lydklip, der skal have en læsbar tekstrepræsentation.\n\nEn illustrativ arbejdsgang for talebeskeder bevarer optagelsen sammen med dens fulde transskription og en identifikator for det oprindelige klip. Et senere applikationstrin kan søge i teksten, organisere noten eller udarbejde et sammendrag og samtidig bevare den talte kilde. Ved en kommando leverer transskriptionen genkendte ord til applikationen; en eventuel handling er et separat fortolknings- og udførelsestrin. Ved et interviewuddrag skal du registrere klippets placering i den komplette lyd, så et citat kan kontrolleres på det rigtige sted.\n\nProducenten accepterer WAV, MP3, AAC inklusive M4A/MP4, FLAC og Ogg med Opus eller Vorbis. Browseroptagelser i WebM bør konverteres til Ogg/Opus, MP3 eller WAV til denne model; Pro dokumenterer indbygget understøttelse af yderligere containere. Indsend én lydfil pr. anmodning. Grundmodellens dokumenterede anmodningsgrænse er op til 50 MiB, mens MP3- og Opus-filer skal holdes under 25 MiB. Filstørrelse og optagelseslængde er forskellige forhold: en komprimeret fil kan være inden for uploadgrænsen og alligevel tage for lang tid at behandle.\n\nTranscribe 1 er udviklet til korte optagelser. Producenten anbefaler Pro til lyd, der er længere end nogle få minutter; en lang anmodning til grundmodellen kan mislykkes, hvis den overskrider grænsen for behandlingstid. Når en længere kilde forberedes til transskription som korte klip, skal du bevare hvert klips startforskydning og bekræfte, at den returnerede transskription dækker hele klippet, før resultaterne kombineres. Læg den oprindelige forskydning til de lokale segmenttider, så navigationen fortsat hænger sammen med den fulde optagelse. Vejledningen til grundmodellen skal ikke fortolkes som Pros separate grænse på 60 minutter.\n\nProducentens svar indeholder tekst, varighed og segmenter. Varighed angives i sekunder, og den læsbare fulde transskription bør bevares som klippets primære ordlyd. Tidsstempler er valgfrie: ignore_timestamps er som standard true i producentens API, mens false anmoder om segmenter på ordniveau med tekst samt start- og sluttider i sekunder. Anmodning om tidsjustering øger behandlingstiden. Et tomt segments-array kan skyldes fravalgt tidskodning, ingen tale eller midlertidigt utilgængelig tidsjustering og bør derfor ikke automatisk fortolkes som en tom fuld transskription.\n\nSegmenter er som regel ord eller ét eller nogle få tegn på kinesisk og japansk. Deres tekst udelader tegnsætning og kan normalisere en værdi anderledes end den fulde transskription; den er ikke en tegn-for-tegn-kopi af det læsbare svar. Et segment kan have samme start- og sluttid. Brug segmenter til at finde en position i optagelsen eller forberede tidskodet visning, og brug den fulde tekst, når ordlyd og tegnsætning er vigtige. Hold disse to repræsentationer adskilt i det resulterende materiale.\n\nSproget genkendes automatisk, uanset om der gives et valgfrit sproghint. Producenten dokumenterer ISO 639-1-koder med små bogstaver til hints og returnerer en sprogkode til applikationslogik sammen med et sprognavn til visning, når det er kendt. Svaret rapporterer ét sprog og ikke alle sprog i en optagelse, der skifter mellem sprog. Bevar kildens ordlyd og tilgængelige sprogmetadata sammen med resultatet i stedet for at betragte transskriptionsanmodningen som en oversættelseshandling.\n\nVed en arbejdsgang for undertekster skal du samle på hinanden følgende tidskodede segmenter i læsbare tekstblokke frem for at vise ét ord ad gangen. Et nyttigt output er en SRT- eller WebVTT-fil knyttet til det oprindelige klip med blokgrænser, der passer til pauser, og en overskuelig tekstmængde på skærmen. Kontroller for manglende tidskodning, og sørg for, at hver bloks slutning ligger efter dens start. Gruppering af undertekster og filformatering er applikationstrin baseret på den returnerede tidsjustering, og valgene for visning bør passe til afspilleren og målgruppen.\n\nTranscribe 1s dokumenterede indstillinger er lyd, et sproghint og valg af tidsstempler. Pros talermarkører, strukturerede taleture, indstillinger for følelseshændelser og hints om antal talere er separate funktioner; de er ikke en del af denne grundmodels dokumenterede svarkontrakt. Vælg det nødvendige resultat før behandling: almindelig læsbar tekst til en note eller tekst sammen med tidsjustering til navigation ved afspilning og undertekster. Ved at bevare klipidentifikatoren, transskriptionen og eventuelle tilgængelige tider gør du resultatet nyttigt i applikationens næste trin.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "a3719c66dfc46f84bfd72475f2aca4b38821fb42bca61fef5d19172ab2aa208c",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "da",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: Transcribe 1</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Luk\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/transcribe-1</code><button type=\"button\" id=\"copy-id\">Kopiér ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modelkortets afsnit\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Input og metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1\">Genkendelse</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Start</h3><p class=\"mdesc-full\">Transcribe 1 omdanner korte lydoptagelser til tekst med automatisk sproggenkendelse og valgfrie tidsstempler på ordniveau. Brug transskriptionen til talebeskeder, søgbare klip eller forberedelse af undertekster, og hold tidskodede segmenter adskilt fra den læsbare fulde tekst.</p><dl class=\"card-io\" data-card-io><div><dt>Accepterede input</dt><dd>Lyd</dd></div><div><dt>Resultater</dt><dd>Tekst</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.</p><div class=\"mabout\" id=\"m-about\"><p>Transcribe 1 er Fish Audios generelle tale-til-tekst-model til korte optagelser. Den modtager en lydfil og returnerer de genkendte ord som tekst sammen med optagelsens varighed, valgfrie tidskodede segmenter og sprogoplysninger, når de er kendt. Modellen er nyttig til en kort talebesked, en mundtlig instruktion, et uddrag af en optagelse eller et lydklip, der skal have en læsbar tekstrepræsentation.</p><p>En illustrativ arbejdsgang for talebeskeder bevarer optagelsen sammen med dens fulde transskription og en identifikator for det oprindelige klip. Et senere applikationstrin kan søge i teksten, organisere noten eller udarbejde et sammendrag og samtidig bevare den talte kilde. Ved en kommando leverer transskriptionen genkendte ord til applikationen; en eventuel handling er et separat fortolknings- og udførelsestrin. Ved et interviewuddrag skal du registrere klippets placering i den komplette lyd, så et citat kan kontrolleres på det rigtige sted.</p><p>Producenten accepterer WAV, MP3, AAC inklusive M4A/MP4, FLAC og Ogg med Opus eller Vorbis. Browseroptagelser i WebM bør konverteres til Ogg/Opus, MP3 eller WAV til denne model; Pro dokumenterer indbygget understøttelse af yderligere containere. Indsend én lydfil pr. anmodning. Grundmodellens dokumenterede anmodningsgrænse er op til 50 MiB, mens MP3- og Opus-filer skal holdes under 25 MiB. Filstørrelse og optagelseslængde er forskellige forhold: en komprimeret fil kan være inden for uploadgrænsen og alligevel tage for lang tid at behandle.</p><p>Transcribe 1 er udviklet til korte optagelser. Producenten anbefaler Pro til lyd, der er længere end nogle få minutter; en lang anmodning til grundmodellen kan mislykkes, hvis den overskrider grænsen for behandlingstid. Når en længere kilde forberedes til transskription som korte klip, skal du bevare hvert klips startforskydning og bekræfte, at den returnerede transskription dækker hele klippet, før resultaterne kombineres. Læg den oprindelige forskydning til de lokale segmenttider, så navigationen fortsat hænger sammen med den fulde optagelse. Vejledningen til grundmodellen skal ikke fortolkes som Pros separate grænse på 60 minutter.</p><p>Producentens svar indeholder tekst, varighed og segmenter. Varighed angives i sekunder, og den læsbare fulde transskription bør bevares som klippets primære ordlyd. Tidsstempler er valgfrie: ignore_timestamps er som standard true i producentens API, mens false anmoder om segmenter på ordniveau med tekst samt start- og sluttider i sekunder. Anmodning om tidsjustering øger behandlingstiden. Et tomt segments-array kan skyldes fravalgt tidskodning, ingen tale eller midlertidigt utilgængelig tidsjustering og bør derfor ikke automatisk fortolkes som en tom fuld transskription.</p><p>Segmenter er som regel ord eller ét eller nogle få tegn på kinesisk og japansk. Deres tekst udelader tegnsætning og kan normalisere en værdi anderledes end den fulde transskription; den er ikke en tegn-for-tegn-kopi af det læsbare svar. Et segment kan have samme start- og sluttid. Brug segmenter til at finde en position i optagelsen eller forberede tidskodet visning, og brug den fulde tekst, når ordlyd og tegnsætning er vigtige. Hold disse to repræsentationer adskilt i det resulterende materiale.</p><p>Sproget genkendes automatisk, uanset om der gives et valgfrit sproghint. Producenten dokumenterer ISO 639-1-koder med små bogstaver til hints og returnerer en sprogkode til applikationslogik sammen med et sprognavn til visning, når det er kendt. Svaret rapporterer ét sprog og ikke alle sprog i en optagelse, der skifter mellem sprog. Bevar kildens ordlyd og tilgængelige sprogmetadata sammen med resultatet i stedet for at betragte transskriptionsanmodningen som en oversættelseshandling.</p><p>Ved en arbejdsgang for undertekster skal du samle på hinanden følgende tidskodede segmenter i læsbare tekstblokke frem for at vise ét ord ad gangen. Et nyttigt output er en SRT- eller WebVTT-fil knyttet til det oprindelige klip med blokgrænser, der passer til pauser, og en overskuelig tekstmængde på skærmen. Kontroller for manglende tidskodning, og sørg for, at hver bloks slutning ligger efter dens start. Gruppering af undertekster og filformatering er applikationstrin baseret på den returnerede tidsjustering, og valgene for visning bør passe til afspilleren og målgruppen.</p><p>Transcribe 1s dokumenterede indstillinger er lyd, et sproghint og valg af tidsstempler. Pros talermarkører, strukturerede taleture, indstillinger for følelseshændelser og hints om antal talere er separate funktioner; de er ikke en del af denne grundmodels dokumenterede svarkontrakt. Vælg det nødvendige resultat før behandling: almindelig læsbar tekst til en note eller tekst sammen med tidsjustering til navigation ved afspilning og undertekster. Ved at bevare klipidentifikatoren, transskriptionen og eventuelle tilgængelige tider gør du resultatet nyttigt i applikationens næste trin.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgængelig i Ailoot · input og metoder</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Transskription</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Inputtyper</dt><dd><code>audio</code></dd></div><div><dt>Outputtyper</dt><dd><code>text</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Værdier og grænser</th><th>Standard</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>fish-audio/transcribe-1</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">input_audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>object</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Metodeparametre og livscyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>model, input_audio</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>audio</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_conditions</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>Eksemplet læser din faktiske, ikke-tomme PCM WAV-fil, koder samtlige bytes i filen som base64 og sender input_audio.format som wav.</td></tr></tbody></table></div><p>Livscyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · præcist task_id fra en eksisterende mediepost, du ejer</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></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tarifoplysninger tilføjer ikke anmodningsmuligheder. Understøttede parametre står ved den valgte metode.</p><dl data-price-conditions><dt>Hurtig tilstand</dt><dd>Ikke angivet <span class=\"note-s\">Når hurtig tilstand er valgt</span></dd><dt>flex-tilstand</dt><dd>Ikke angivet <span class=\"note-s\">Når flex-tilstanden er valgt</span></dd><dt>Maksimal ræsonneringsindsats</dt><dd>Ikke angivet <span class=\"note-s\">Når default-justeringen anvendes ved maksimal ræsonneringsindsats</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot-takster</h4><h4>Priser efter konfiguration</h4><p class=\"note-s\">Knyt hver omkostning til de viste betingelser. Brug én takst for hver gruppe af alternative konfigurationer.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfiguration</th><th>Takstplan</th><th>Afregningsenhed</th><th>Beløb</th></tr></thead><tbody><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>Grundpriser for tokens</th><td data-cell-label=\"Takstplan\"><span class=\"card-cell-label\">Takstplan</span>Grundtakst</td><td data-cell-label=\"Afregningsenhed\"><span class=\"card-cell-label\">Afregningsenhed</span>—</td><td data-cell-label=\"Beløb\"><span class=\"card-cell-label\">Beløb</span><div><span>Input · Inputtokens</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Output · Outputtokens</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cachelæsning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cacheskrivning</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cacheskrivning, 1 time</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Konfiguration\" scope=\"row\"><span class=\"card-cell-label\">Konfiguration</span>sekund inputlyd</th><td data-cell-label=\"Takstplan\"><span class=\"card-cell-label\">Takstplan</span>—</td><td data-cell-label=\"Afregningsenhed\"><span class=\"card-cell-label\">Afregningsenhed</span>pr. sekund lydinput</td><td data-cell-label=\"Beløb\"><span class=\"card-cell-label\">Beløb</span><div><span>Input · sekund inputlyd</span> <b>$0.0002</b> <span class=\"price-unit\">pr. sekund lydinput</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. <a href=\"/docs/da/billing/reserve/\">Sådan fungerer reservation og afregning →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelanmodninger</h3><h4>Ailoot Ultra · Transskription</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><button class=\"cg-tab\" id=\"model-code-1361-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1361-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · faktisk WAV-fil og hele det oprindelige resultat</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiér kode\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1361-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1361-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 PCM WAV recording}&quot;\nexport AILOOT_AUDIO_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ[&#39;AILOOT_AUDIO_FILE&#39;]).read_bytes()\nif not (audio[:4] == b&#39;RIFF&#39; and audio[8:12] == b&#39;WAVE&#39;):\n    raise SystemExit(&#39;Supply your actual PCM WAV audio file&#39;)\nwith wave.open(io.BytesIO(audio), &#39;rb&#39;) as recording:\n    if recording.getcomptype() != &#39;NONE&#39; or recording.getnframes() &lt;= 0:\n        raise SystemExit(&#39;Supply a nonempty PCM WAV recording&#39;)\nrequest = {&#39;model&#39;: &#39;fish-audio/transcribe-1&#39;, &#39;input_audio&#39;: {&#39;data&#39;: base64.b64encode(audio).decode(&#39;ascii&#39;), &#39;format&#39;: &#39;wav&#39;}}\nPath(&#39;request.json&#39;).write_text(json.dumps(request, ensure_ascii=False), encoding=&#39;utf-8&#39;)\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; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Hent og gem resultater</h3><h4>Ailoot Ultra · Transskription</h4><p class=\"note-s\">Hele det oprindelige svarindhold, status og videresendte headere. Denne handler tilføjer hverken en universel JSON-struktur, et tekstfelt eller en opgaveindpakning.</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Behold alle færdige resultater</h5><p class=\"note-s\">Gem hvert fuldstændigt returneret svar, hver fil og hver indholdsdel.</p><p class=\"note-s\">Gem hele svaret og alle headere, alle faktisk returnerede output, de oprindeligt returnerede identifikatorer og alle felter med forbrugsdata. Gendan den oprindelige operation uden at sende oprettelsesanmodningen igen.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det oprindelige svar skal kontrolleres</h5><p class=\"note-s\">Behold det faktiske X-Client-Request-ID og hele svaret. Læs de oprindelige aktiver, du ejer, og deres præcise signerede indholds-URL’er; indsend aldrig en oprettelse med usikkert udfald igen.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">text (when present)</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span></td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">usage (when present)</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span></td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fejl og næste trin</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Betingelse</th><th>Næste trin</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>JSON-indholdet eller det eksplicitte kanoniske model-ID er ugyldigt.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Behold svaret, og ret det angivne forespørgselsfelt.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Ailoot API-nøglen er ugyldig.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Brug din autoriserede Ailoot API-nøgle.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>403 · <code>permission_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Nøglens gruppe giver ikke adgang til denne metode.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Behold de returnerede fejloplysninger.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Den valgte metode har ingen rute med adgangstilladelse.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Behold de returnerede fejloplysninger.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Den accepterede tarif kan ikke hente den påkrævede inputmængde eller grænse.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Behold svaret; brug den inputrepræsentation, som den accepterede tarif kræver.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>503 · <code></code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Påkrævet lager, rute, metodepris eller reservation er utilgængelig.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Behold hele det oprindelige svar. En usikker reservation giver ikke tilladelse til at indsende igen.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>502 · <code>server_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Det oprindelige resultat, forbrug eller den oprindelige afregning skal kontrolleres.</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Behold det faktiske forespørgsels-ID og det oprindelige svar. Læs den eksisterende post, du ejer; indsend ikke oprettelsen igen.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modelaliaser</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Ftranscribe-1&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1</code></a></span></p><h4>Aliaser for metodestier</h4><p class=\"note-s\">Brug metodestierne vist ovenfor.</p><h4>Relaterede kalder-ID’er</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Ftranscribe-1&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/transcribe-1",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "JSON-indholdet eller det eksplicitte kanoniske model-ID er ugyldigt.",
                "http_status": 400,
                "recovery": "Behold svaret, og ret det angivne forespørgselsfelt.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Ailoot API-nøglen er ugyldig.",
                "http_status": 401,
                "recovery": "Brug din autoriserede Ailoot API-nøgle.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Nøglens gruppe giver ikke adgang til denne metode.",
                "http_status": 403,
                "recovery": "Behold de returnerede fejloplysninger.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "Den valgte metode har ingen rute med adgangstilladelse.",
                "http_status": 404,
                "recovery": "Behold de returnerede fejloplysninger.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Den accepterede tarif kan ikke hente den påkrævede inputmængde eller grænse.",
                "http_status": 422,
                "recovery": "Behold svaret; brug den inputrepræsentation, som den accepterede tarif kræver.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Påkrævet lager, rute, metodepris eller reservation er utilgængelig.",
                "http_status": 503,
                "recovery": "Behold hele det oprindelige svar. En usikker reservation giver ikke tilladelse til at indsende igen.",
                "type": null
              },
              {
                "code": null,
                "condition": "Det oprindelige resultat, forbrug eller den oprindelige afregning skal kontrolleres.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Behold det faktiske forespørgsels-ID og det oprindelige svar. Læs den eksisterende post, du ejer; indsend ikke oprettelsen igen.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Behold det faktiske X-Client-Request-ID og hele svaret. Læs de oprindelige aktiver, du ejer, og deres præcise signerede indholds-URL’er; indsend aldrig en oprettelse med usikkert udfald igen."
            },
            "outputs": {
              "all_results": "Gem hele svaret og alle headere, alle faktisk returnerede output, de oprindeligt returnerede identifikatorer og alle felter med forbrugsdata. Gendan den oprindelige operation uden at sende oprettelsesanmodningen igen.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Hele det oprindelige svarindhold, status og videresendte headere. Denne handler tilføjer hverken en universel JSON-struktur, et tekstfelt eller en opgaveindpakning."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Eksemplet læser din faktiske, ikke-tomme PCM WAV-fil, koder samtlige bytes i filen som base64 og sender input_audio.format som wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "præcist task_id fra en eksisterende mediepost, du ejer",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "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": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Transskription",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "out": null,
        "output": [
          "text"
        ],
        "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_second": 0.0002
          }
        },
        "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": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "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.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/transcribe-1",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "603c01e83701358920f4885148f1d6080a028d1b2e375b237a1d50c72091115f",
    "input_html_sha256": "69a82638cce95059c27a5e8ebb64fc1106305e1af7372fc940dc95bc284c4b66",
    "private_audit_sha256": "1bc86cceeee460068add67147e3a8281d2f886ebce617d2ae3f512a41a1da51c",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/da/fish-audio-transcribe-1/",
    "description": "Transcribe 1 omdanner korte lydoptagelser til tekst med automatisk sproggenkendelse og valgfrie tidsstempler på ordniveau. Brug transskriptionen til talebeskeder, søgbare klip eller forberedelse af undertekster, og hold tidskodede segmenter adskilt fra den læsbare fulde tekst.",
    "locale": "da",
    "md_url": "https://ailoot.ai/models/da/fish-audio-transcribe-1/index.md",
    "title": "Fish Audio: Transcribe 1 — Ailoot",
    "url": "https://ailoot.ai/models/da/fish-audio-transcribe-1/"
  },
  "rawModel": {
    "about": "Transcribe 1 er Fish Audios generelle tale-til-tekst-model til korte optagelser. Den modtager en lydfil og returnerer de genkendte ord som tekst sammen med optagelsens varighed, valgfrie tidskodede segmenter og sprogoplysninger, når de er kendt. Modellen er nyttig til en kort talebesked, en mundtlig instruktion, et uddrag af en optagelse eller et lydklip, der skal have en læsbar tekstrepræsentation.\n\nEn illustrativ arbejdsgang for talebeskeder bevarer optagelsen sammen med dens fulde transskription og en identifikator for det oprindelige klip. Et senere applikationstrin kan søge i teksten, organisere noten eller udarbejde et sammendrag og samtidig bevare den talte kilde. Ved en kommando leverer transskriptionen genkendte ord til applikationen; en eventuel handling er et separat fortolknings- og udførelsestrin. Ved et interviewuddrag skal du registrere klippets placering i den komplette lyd, så et citat kan kontrolleres på det rigtige sted.\n\nProducenten accepterer WAV, MP3, AAC inklusive M4A/MP4, FLAC og Ogg med Opus eller Vorbis. Browseroptagelser i WebM bør konverteres til Ogg/Opus, MP3 eller WAV til denne model; Pro dokumenterer indbygget understøttelse af yderligere containere. Indsend én lydfil pr. anmodning. Grundmodellens dokumenterede anmodningsgrænse er op til 50 MiB, mens MP3- og Opus-filer skal holdes under 25 MiB. Filstørrelse og optagelseslængde er forskellige forhold: en komprimeret fil kan være inden for uploadgrænsen og alligevel tage for lang tid at behandle.\n\nTranscribe 1 er udviklet til korte optagelser. Producenten anbefaler Pro til lyd, der er længere end nogle få minutter; en lang anmodning til grundmodellen kan mislykkes, hvis den overskrider grænsen for behandlingstid. Når en længere kilde forberedes til transskription som korte klip, skal du bevare hvert klips startforskydning og bekræfte, at den returnerede transskription dækker hele klippet, før resultaterne kombineres. Læg den oprindelige forskydning til de lokale segmenttider, så navigationen fortsat hænger sammen med den fulde optagelse. Vejledningen til grundmodellen skal ikke fortolkes som Pros separate grænse på 60 minutter.\n\nProducentens svar indeholder tekst, varighed og segmenter. Varighed angives i sekunder, og den læsbare fulde transskription bør bevares som klippets primære ordlyd. Tidsstempler er valgfrie: ignore_timestamps er som standard true i producentens API, mens false anmoder om segmenter på ordniveau med tekst samt start- og sluttider i sekunder. Anmodning om tidsjustering øger behandlingstiden. Et tomt segments-array kan skyldes fravalgt tidskodning, ingen tale eller midlertidigt utilgængelig tidsjustering og bør derfor ikke automatisk fortolkes som en tom fuld transskription.\n\nSegmenter er som regel ord eller ét eller nogle få tegn på kinesisk og japansk. Deres tekst udelader tegnsætning og kan normalisere en værdi anderledes end den fulde transskription; den er ikke en tegn-for-tegn-kopi af det læsbare svar. Et segment kan have samme start- og sluttid. Brug segmenter til at finde en position i optagelsen eller forberede tidskodet visning, og brug den fulde tekst, når ordlyd og tegnsætning er vigtige. Hold disse to repræsentationer adskilt i det resulterende materiale.\n\nSproget genkendes automatisk, uanset om der gives et valgfrit sproghint. Producenten dokumenterer ISO 639-1-koder med små bogstaver til hints og returnerer en sprogkode til applikationslogik sammen med et sprognavn til visning, når det er kendt. Svaret rapporterer ét sprog og ikke alle sprog i en optagelse, der skifter mellem sprog. Bevar kildens ordlyd og tilgængelige sprogmetadata sammen med resultatet i stedet for at betragte transskriptionsanmodningen som en oversættelseshandling.\n\nVed en arbejdsgang for undertekster skal du samle på hinanden følgende tidskodede segmenter i læsbare tekstblokke frem for at vise ét ord ad gangen. Et nyttigt output er en SRT- eller WebVTT-fil knyttet til det oprindelige klip med blokgrænser, der passer til pauser, og en overskuelig tekstmængde på skærmen. Kontroller for manglende tidskodning, og sørg for, at hver bloks slutning ligger efter dens start. Gruppering af undertekster og filformatering er applikationstrin baseret på den returnerede tidsjustering, og valgene for visning bør passe til afspilleren og målgruppen.\n\nTranscribe 1s dokumenterede indstillinger er lyd, et sproghint og valg af tidsstempler. Pros talermarkører, strukturerede taleture, indstillinger for følelseshændelser og hints om antal talere er separate funktioner; de er ikke en del af denne grundmodels dokumenterede svarkontrakt. Vælg det nødvendige resultat før behandling: almindelig læsbar tekst til en note eller tekst sammen med tidsjustering til navigation ved afspilning og undertekster. Ved at bevare klipidentifikatoren, transskriptionen og eventuelle tilgængelige tider gør du resultatet nyttigt i applikationens næste trin.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "audio"
      ],
      "manufacturer_output": [
        "transcription"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ],
        "summary": "De fulde prisoplysninger for konfigurationen findes under detaljer."
      }
    ],
    "ctx": null,
    "formats": [
      "transcriptions"
    ],
    "id": "fish-audio/transcribe-1",
    "input": [
      "audio"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "JSON-indholdet eller det eksplicitte kanoniske model-ID er ugyldigt.",
                "http_status": 400,
                "recovery": "Behold svaret, og ret det angivne forespørgselsfelt.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Ailoot API-nøglen er ugyldig.",
                "http_status": 401,
                "recovery": "Brug din autoriserede Ailoot API-nøgle.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Nøglens gruppe giver ikke adgang til denne metode.",
                "http_status": 403,
                "recovery": "Behold de returnerede fejloplysninger.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "Den valgte metode har ingen rute med adgangstilladelse.",
                "http_status": 404,
                "recovery": "Behold de returnerede fejloplysninger.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Den accepterede tarif kan ikke hente den påkrævede inputmængde eller grænse.",
                "http_status": 422,
                "recovery": "Behold svaret; brug den inputrepræsentation, som den accepterede tarif kræver.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Påkrævet lager, rute, metodepris eller reservation er utilgængelig.",
                "http_status": 503,
                "recovery": "Behold hele det oprindelige svar. En usikker reservation giver ikke tilladelse til at indsende igen.",
                "type": null
              },
              {
                "code": null,
                "condition": "Det oprindelige resultat, forbrug eller den oprindelige afregning skal kontrolleres.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Behold det faktiske forespørgsels-ID og det oprindelige svar. Læs den eksisterende post, du ejer; indsend ikke oprettelsen igen.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Behold det faktiske X-Client-Request-ID og hele svaret. Læs de oprindelige aktiver, du ejer, og deres præcise signerede indholds-URL’er; indsend aldrig en oprettelse med usikkert udfald igen."
            },
            "outputs": {
              "all_results": "Gem hele svaret og alle headere, alle faktisk returnerede output, de oprindeligt returnerede identifikatorer og alle felter med forbrugsdata. Gendan den oprindelige operation uden at sende oprettelsesanmodningen igen.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Hele det oprindelige svarindhold, status og videresendte headere. Denne handler tilføjer hverken en universel JSON-struktur, et tekstfelt eller en opgaveindpakning."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "Eksemplet læser din faktiske, ikke-tomme PCM WAV-fil, koder samtlige bytes i filen som base64 og sender input_audio.format som wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "præcist task_id fra en eksisterende mediepost, du ejer",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "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": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Transskription",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "out": null,
        "output": [
          "text"
        ],
        "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_second": 0.0002
          }
        },
        "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": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "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.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/transcribe-1",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: Transcribe 1",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Transcribe 1 omdanner korte lydoptagelser til tekst med automatisk sproggenkendelse og valgfrie tidsstempler på ordniveau. Brug transskriptionen til talebeskeder, søgbare klip eller forberedelse af undertekster, og hold tidskodede segmenter adskilt fra den læsbare fulde tekst."
  },
  "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": "Transcribe 1 omdanner korte lydoptagelser til tekst med automatisk sproggenkendelse og valgfrie tidsstempler på ordniveau. Brug transskriptionen til talebeskeder, søgbare klip eller forberedelse af undertekster, og hold tidskodede segmenter adskilt fra den læsbare fulde tekst.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "fa68564ce639a8506c4096703e47643f1cc7a3d24ce7f8070ad6d6ad92ceeae5",
    "renderer_sha256": "2bf9f26ea9bfd57ed53d867671d8f05b41a6ea85089f48039e3365dc2b92ec2c"
  },
  "sourceRevision": "c3827db264b0e210476c14f882a8e897915237b8bd297ea1b1989ff6a5799574"
}
