{
  "aboutHtml": "<p>Transcribe 1 ialah model pertuturan kepada teks umum Fish Audio untuk rakaman pendek. Ia menerima fail audio dan mengembalikan perkataan yang dikenal pasti sebagai teks, berserta tempoh rakaman, segmen bermasa secara pilihan dan maklumat bahasa jika diketahui. Model ini berguna untuk nota suara pendek, arahan lisan, petikan rakaman atau klip audio yang memerlukan perwakilan teks yang boleh dibaca.</p><p>Contoh aliran kerja nota suara menyimpan rakaman bersama transkrip penuhnya dan pengecam klip asal. Langkah aplikasi kemudian boleh mencari teks itu, menyusun nota atau membina ringkasan sambil mengekalkan sumber pertuturan. Untuk arahan, transkrip membekalkan perkataan yang dikenal pasti kepada aplikasi; sebarang tindakan ialah langkah pentafsiran dan pelaksanaan yang berasingan. Untuk petikan temu bual, rekodkan kedudukan klip dalam audio lengkap supaya petikan kata-kata boleh disemak pada lokasi yang betul.</p><p>Pengeluar menerima WAV, MP3, AAC termasuk M4A/MP4, FLAC dan Ogg yang mengandungi Opus atau Vorbis. Rakaman pelayar dalam WebM perlu ditukar kepada Ogg/Opus, MP3 atau WAV untuk model ini; Pro mendokumenkan sokongan natif untuk bekas tambahan. Bekalkan satu fail audio bagi setiap permintaan. Peruntukan permintaan model asas yang didokumenkan ialah sehingga 50 MiB, dengan fail MP3 dan Opus dikekalkan di bawah 25 MiB. Saiz fail dan panjang rakaman ialah pertimbangan berbeza: fail termampat boleh muat dalam peruntukan muat naik tetapi masih mengambil masa terlalu lama untuk diproses.</p><p>Transcribe 1 direka untuk rakaman pendek. Pengeluar mengesyorkan Pro untuk audio yang melebihi beberapa minit; permintaan panjang kepada model asas boleh gagal jika melebihi had masa pemprosesan. Apabila menyediakan sumber lebih panjang untuk transkripsi klip pendek, kekalkan ofset permulaan setiap klip dan pastikan transkrip yang dikembalikan meliputi seluruh klip sebelum menggabungkan hasil. Tambahkan ofset asal pada masa segmen setempat supaya navigasi kekal terhubung dengan rakaman penuh. Panduan model asas tidak patut ditafsirkan sebagai peruntukan 60 minit Pro yang berasingan.</p><p>Respons pengeluar merangkumi text, duration dan segments. Tempoh dinyatakan dalam saat, dan transkrip penuh yang boleh dibaca patut dikekalkan sebagai susunan kata utama klip. Cap masa adalah pilihan: ignore_timestamps mempunyai nilai lalai true dalam API pengeluar, manakala false meminta segmen peringkat perkataan dengan text, masa start dan end dalam saat. Permintaan penjajaran menambah masa pemprosesan. Tatasusunan segments yang kosong boleh mencerminkan pemasaan yang dilangkau, ketiadaan pertuturan atau penjajaran yang tidak tersedia buat sementara, jadi ia tidak patut ditafsirkan secara automatik sebagai transkrip penuh yang kosong.</p><p>Segmen biasanya berupa perkataan, atau satu atau beberapa aksara dalam bahasa Cina dan Jepun. Teksnya tidak menyertakan tanda baca dan boleh menormalkan nilai secara berbeza daripada transkrip penuh; ia bukan salinan respons yang boleh dibaca secara aksara demi aksara. Sesuatu segmen boleh mempunyai masa start dan end yang sama. Gunakan segmen untuk mencari kedudukan dalam rakaman atau menyediakan paparan bermasa, dan gunakan teks penuh apabila susunan kata dan tanda baca penting. Kekalkan kedua-dua perwakilan itu secara berasingan dalam artifak yang dihasilkan.</p><p>Bahasa dikesan secara automatik, sama ada petunjuk bahasa pilihan diberikan atau tidak. Pengeluar mendokumenkan kod ISO 639-1 huruf kecil untuk petunjuk dan mengembalikan kod bahasa untuk logik aplikasi bersama nama bahasa untuk paparan jika diketahui. Respons melaporkan satu bahasa, bukannya setiap bahasa dalam rakaman yang bertukar-tukar bahasa. Simpan susunan kata sumber dan metadata bahasa yang tersedia bersama hasil, bukannya menganggap permintaan transkripsi sebagai operasi terjemahan.</p><p>Untuk aliran kerja sari kata, kumpulkan segmen bermasa yang berturutan menjadi isyarat sari kata yang boleh dibaca, bukannya memaparkan satu perkataan pada satu masa. Output yang berguna ialah fail SRT atau WebVTT yang dipautkan pada klip asal, dengan sempadan isyarat yang sesuai dengan jeda dan jumlah teks pada skrin yang mudah dibaca. Periksa pemasaan yang tiada dan pastikan akhir setiap isyarat selepas permulaannya. Pengumpulan sari kata dan pemformatan fail ialah langkah aplikasi yang dibina daripada penjajaran yang dikembalikan, dan pilihan paparannya patut sesuai dengan pemain serta penonton.</p><p>Kawalan Transcribe 1 yang didokumenkan ialah audio, petunjuk bahasa dan pilihan cap masa. Penanda penutur, giliran penutur berstruktur, kawalan peristiwa emosi dan petunjuk bilangan penutur Pro ialah ciri berasingan; ia bukan sebahagian daripada kontrak respons model asas ini yang didokumenkan. Pilih artifak yang diperlukan sebelum pemprosesan: teks biasa yang boleh dibaca untuk nota, atau teks bersama penjajaran untuk navigasi main balik dan sari kata. Mengekalkan pengecam klip, transkrip dan sebarang pemasaan yang tersedia menjadikan hasil itu berguna untuk peringkat aplikasi seterusnya.</p>",
  "aboutText": "Transcribe 1 ialah model pertuturan kepada teks umum Fish Audio untuk rakaman pendek. Ia menerima fail audio dan mengembalikan perkataan yang dikenal pasti sebagai teks, berserta tempoh rakaman, segmen bermasa secara pilihan dan maklumat bahasa jika diketahui. Model ini berguna untuk nota suara pendek, arahan lisan, petikan rakaman atau klip audio yang memerlukan perwakilan teks yang boleh dibaca.\n\nContoh aliran kerja nota suara menyimpan rakaman bersama transkrip penuhnya dan pengecam klip asal. Langkah aplikasi kemudian boleh mencari teks itu, menyusun nota atau membina ringkasan sambil mengekalkan sumber pertuturan. Untuk arahan, transkrip membekalkan perkataan yang dikenal pasti kepada aplikasi; sebarang tindakan ialah langkah pentafsiran dan pelaksanaan yang berasingan. Untuk petikan temu bual, rekodkan kedudukan klip dalam audio lengkap supaya petikan kata-kata boleh disemak pada lokasi yang betul.\n\nPengeluar menerima WAV, MP3, AAC termasuk M4A/MP4, FLAC dan Ogg yang mengandungi Opus atau Vorbis. Rakaman pelayar dalam WebM perlu ditukar kepada Ogg/Opus, MP3 atau WAV untuk model ini; Pro mendokumenkan sokongan natif untuk bekas tambahan. Bekalkan satu fail audio bagi setiap permintaan. Peruntukan permintaan model asas yang didokumenkan ialah sehingga 50 MiB, dengan fail MP3 dan Opus dikekalkan di bawah 25 MiB. Saiz fail dan panjang rakaman ialah pertimbangan berbeza: fail termampat boleh muat dalam peruntukan muat naik tetapi masih mengambil masa terlalu lama untuk diproses.\n\nTranscribe 1 direka untuk rakaman pendek. Pengeluar mengesyorkan Pro untuk audio yang melebihi beberapa minit; permintaan panjang kepada model asas boleh gagal jika melebihi had masa pemprosesan. Apabila menyediakan sumber lebih panjang untuk transkripsi klip pendek, kekalkan ofset permulaan setiap klip dan pastikan transkrip yang dikembalikan meliputi seluruh klip sebelum menggabungkan hasil. Tambahkan ofset asal pada masa segmen setempat supaya navigasi kekal terhubung dengan rakaman penuh. Panduan model asas tidak patut ditafsirkan sebagai peruntukan 60 minit Pro yang berasingan.\n\nRespons pengeluar merangkumi text, duration dan segments. Tempoh dinyatakan dalam saat, dan transkrip penuh yang boleh dibaca patut dikekalkan sebagai susunan kata utama klip. Cap masa adalah pilihan: ignore_timestamps mempunyai nilai lalai true dalam API pengeluar, manakala false meminta segmen peringkat perkataan dengan text, masa start dan end dalam saat. Permintaan penjajaran menambah masa pemprosesan. Tatasusunan segments yang kosong boleh mencerminkan pemasaan yang dilangkau, ketiadaan pertuturan atau penjajaran yang tidak tersedia buat sementara, jadi ia tidak patut ditafsirkan secara automatik sebagai transkrip penuh yang kosong.\n\nSegmen biasanya berupa perkataan, atau satu atau beberapa aksara dalam bahasa Cina dan Jepun. Teksnya tidak menyertakan tanda baca dan boleh menormalkan nilai secara berbeza daripada transkrip penuh; ia bukan salinan respons yang boleh dibaca secara aksara demi aksara. Sesuatu segmen boleh mempunyai masa start dan end yang sama. Gunakan segmen untuk mencari kedudukan dalam rakaman atau menyediakan paparan bermasa, dan gunakan teks penuh apabila susunan kata dan tanda baca penting. Kekalkan kedua-dua perwakilan itu secara berasingan dalam artifak yang dihasilkan.\n\nBahasa dikesan secara automatik, sama ada petunjuk bahasa pilihan diberikan atau tidak. Pengeluar mendokumenkan kod ISO 639-1 huruf kecil untuk petunjuk dan mengembalikan kod bahasa untuk logik aplikasi bersama nama bahasa untuk paparan jika diketahui. Respons melaporkan satu bahasa, bukannya setiap bahasa dalam rakaman yang bertukar-tukar bahasa. Simpan susunan kata sumber dan metadata bahasa yang tersedia bersama hasil, bukannya menganggap permintaan transkripsi sebagai operasi terjemahan.\n\nUntuk aliran kerja sari kata, kumpulkan segmen bermasa yang berturutan menjadi isyarat sari kata yang boleh dibaca, bukannya memaparkan satu perkataan pada satu masa. Output yang berguna ialah fail SRT atau WebVTT yang dipautkan pada klip asal, dengan sempadan isyarat yang sesuai dengan jeda dan jumlah teks pada skrin yang mudah dibaca. Periksa pemasaan yang tiada dan pastikan akhir setiap isyarat selepas permulaannya. Pengumpulan sari kata dan pemformatan fail ialah langkah aplikasi yang dibina daripada penjajaran yang dikembalikan, dan pilihan paparannya patut sesuai dengan pemain serta penonton.\n\nKawalan Transcribe 1 yang didokumenkan ialah audio, petunjuk bahasa dan pilihan cap masa. Penanda penutur, giliran penutur berstruktur, kawalan peristiwa emosi dan petunjuk bilangan penutur Pro ialah ciri berasingan; ia bukan sebahagian daripada kontrak respons model asas ini yang didokumenkan. Pilih artifak yang diperlukan sebelum pemprosesan: teks biasa yang boleh dibaca untuk nota, atau teks bersama penjajaran untuk navigasi main balik dan sari kata. Mengekalkan pengecam klip, transkrip dan sebarang pemasaan yang tersedia menjadikan hasil itu berguna untuk peringkat aplikasi seterusnya.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "eb0b6dfe69111e12c4f7ee050e377535e49c11820b51c11854e966b01c07dc7f",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ms",
  "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=\"Tutup\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/transcribe-1</code><button type=\"button\" id=\"copy-id\">Salin ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Bahagian kad model\"><button type=\"button\" data-card-jump=\"overview\">Pengenalan</button><button type=\"button\" data-card-jump=\"methods\">Input &amp; kaedah</button><button type=\"button\" data-card-jump=\"pricing\">Pelan harga</button><button type=\"button\" data-card-jump=\"examples\">Contoh</button><button type=\"button\" data-card-jump=\"results\">Hasil</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Kaedah API\"><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\">Pengecaman</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\">Pengenalan</h3><p class=\"mdesc-full\">Transcribe 1 menukar rakaman audio pendek kepada teks dengan pengesanan bahasa automatik dan cap masa peringkat perkataan secara pilihan. Gunakan transkrip untuk nota suara, klip yang boleh dicari atau penyediaan sari kata, sambil memisahkan segmen bermasa daripada teks penuh yang boleh dibaca.</p><dl class=\"card-io\" data-card-io><div><dt>Input yang diterima</dt><dd>Audio</dd></div><div><dt>Hasil</dt><dd>Teks</dd></div></dl><details class=\"card-about\"><summary>Tentang model</summary><p class=\"note-s\" data-model-method-boundary>Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.</p><div class=\"mabout\" id=\"m-about\"><p>Transcribe 1 ialah model pertuturan kepada teks umum Fish Audio untuk rakaman pendek. Ia menerima fail audio dan mengembalikan perkataan yang dikenal pasti sebagai teks, berserta tempoh rakaman, segmen bermasa secara pilihan dan maklumat bahasa jika diketahui. Model ini berguna untuk nota suara pendek, arahan lisan, petikan rakaman atau klip audio yang memerlukan perwakilan teks yang boleh dibaca.</p><p>Contoh aliran kerja nota suara menyimpan rakaman bersama transkrip penuhnya dan pengecam klip asal. Langkah aplikasi kemudian boleh mencari teks itu, menyusun nota atau membina ringkasan sambil mengekalkan sumber pertuturan. Untuk arahan, transkrip membekalkan perkataan yang dikenal pasti kepada aplikasi; sebarang tindakan ialah langkah pentafsiran dan pelaksanaan yang berasingan. Untuk petikan temu bual, rekodkan kedudukan klip dalam audio lengkap supaya petikan kata-kata boleh disemak pada lokasi yang betul.</p><p>Pengeluar menerima WAV, MP3, AAC termasuk M4A/MP4, FLAC dan Ogg yang mengandungi Opus atau Vorbis. Rakaman pelayar dalam WebM perlu ditukar kepada Ogg/Opus, MP3 atau WAV untuk model ini; Pro mendokumenkan sokongan natif untuk bekas tambahan. Bekalkan satu fail audio bagi setiap permintaan. Peruntukan permintaan model asas yang didokumenkan ialah sehingga 50 MiB, dengan fail MP3 dan Opus dikekalkan di bawah 25 MiB. Saiz fail dan panjang rakaman ialah pertimbangan berbeza: fail termampat boleh muat dalam peruntukan muat naik tetapi masih mengambil masa terlalu lama untuk diproses.</p><p>Transcribe 1 direka untuk rakaman pendek. Pengeluar mengesyorkan Pro untuk audio yang melebihi beberapa minit; permintaan panjang kepada model asas boleh gagal jika melebihi had masa pemprosesan. Apabila menyediakan sumber lebih panjang untuk transkripsi klip pendek, kekalkan ofset permulaan setiap klip dan pastikan transkrip yang dikembalikan meliputi seluruh klip sebelum menggabungkan hasil. Tambahkan ofset asal pada masa segmen setempat supaya navigasi kekal terhubung dengan rakaman penuh. Panduan model asas tidak patut ditafsirkan sebagai peruntukan 60 minit Pro yang berasingan.</p><p>Respons pengeluar merangkumi text, duration dan segments. Tempoh dinyatakan dalam saat, dan transkrip penuh yang boleh dibaca patut dikekalkan sebagai susunan kata utama klip. Cap masa adalah pilihan: ignore_timestamps mempunyai nilai lalai true dalam API pengeluar, manakala false meminta segmen peringkat perkataan dengan text, masa start dan end dalam saat. Permintaan penjajaran menambah masa pemprosesan. Tatasusunan segments yang kosong boleh mencerminkan pemasaan yang dilangkau, ketiadaan pertuturan atau penjajaran yang tidak tersedia buat sementara, jadi ia tidak patut ditafsirkan secara automatik sebagai transkrip penuh yang kosong.</p><p>Segmen biasanya berupa perkataan, atau satu atau beberapa aksara dalam bahasa Cina dan Jepun. Teksnya tidak menyertakan tanda baca dan boleh menormalkan nilai secara berbeza daripada transkrip penuh; ia bukan salinan respons yang boleh dibaca secara aksara demi aksara. Sesuatu segmen boleh mempunyai masa start dan end yang sama. Gunakan segmen untuk mencari kedudukan dalam rakaman atau menyediakan paparan bermasa, dan gunakan teks penuh apabila susunan kata dan tanda baca penting. Kekalkan kedua-dua perwakilan itu secara berasingan dalam artifak yang dihasilkan.</p><p>Bahasa dikesan secara automatik, sama ada petunjuk bahasa pilihan diberikan atau tidak. Pengeluar mendokumenkan kod ISO 639-1 huruf kecil untuk petunjuk dan mengembalikan kod bahasa untuk logik aplikasi bersama nama bahasa untuk paparan jika diketahui. Respons melaporkan satu bahasa, bukannya setiap bahasa dalam rakaman yang bertukar-tukar bahasa. Simpan susunan kata sumber dan metadata bahasa yang tersedia bersama hasil, bukannya menganggap permintaan transkripsi sebagai operasi terjemahan.</p><p>Untuk aliran kerja sari kata, kumpulkan segmen bermasa yang berturutan menjadi isyarat sari kata yang boleh dibaca, bukannya memaparkan satu perkataan pada satu masa. Output yang berguna ialah fail SRT atau WebVTT yang dipautkan pada klip asal, dengan sempadan isyarat yang sesuai dengan jeda dan jumlah teks pada skrin yang mudah dibaca. Periksa pemasaan yang tiada dan pastikan akhir setiap isyarat selepas permulaannya. Pengumpulan sari kata dan pemformatan fail ialah langkah aplikasi yang dibina daripada penjajaran yang dikembalikan, dan pilihan paparannya patut sesuai dengan pemain serta penonton.</p><p>Kawalan Transcribe 1 yang didokumenkan ialah audio, petunjuk bahasa dan pilihan cap masa. Penanda penutur, giliran penutur berstruktur, kawalan peristiwa emosi dan petunjuk bilangan penutur Pro ialah ciri berasingan; ia bukan sebahagian daripada kontrak respons model asas ini yang didokumenkan. Pilih artifak yang diperlukan sebelum pemprosesan: teks biasa yang boleh dibaca untuk nota, atau teks bersama penjajaran untuk navigasi main balik dan sari kata. Mengekalkan pengecam klip, transkrip dan sebarang pemasaan yang tersedia menjadikan hasil itu berguna untuk peringkat aplikasi seterusnya.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tersedia di Ailoot · input &amp; kaedah</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Transkripsi</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Input</dt><dd><code>audio</code></dd></div><div><dt>Output</dt><dd><code>text</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Medan</th><th>Jenis</th><th>Keperluan</th><th>Nilai &amp; had</th><th>Lalai</th></tr></thead><tbody><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>fish-audio/transcribe-1</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">input_audio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Parameter kaedah dan kitar hayat</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrak</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=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</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=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</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=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</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=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>Contoh ini membaca fail PCM WAV sebenar anda yang tidak kosong, mengekodkan keseluruhan bait fail sebagai base64 dan menghantar input_audio.format sebagai wav.</td></tr></tbody></table></div><p>Kitar hayat: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · task_id tepat daripada rekod media sedia ada milik anda</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\">Pelan harga</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.</p><dl data-price-conditions><dt>Mod pantas</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila mod pantas dipilih</span></dd><dt>Mod flex</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila mod flex dipilih</span></dd><dt>Usaha penaakulan maksimum</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila usaha penaakulan maksimum menggunakan pelarasan default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Kadar Ailoot</h4><h4>Harga mengikut konfigurasi</h4><p class=\"note-s\">Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Jadual kadar</th><th>Unit pengebilan</th><th>Caj</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Kadar asas token</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>Kadar asas</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>—</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>saat audio input</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>bagi setiap saat audio masukan</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · saat audio input</span> <b>$0.0002</b> <span class=\"price-unit\">bagi setiap saat audio masukan</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. <a href=\"/docs/ms/billing/reserve/\">Cara rizab dan penyelesaian caj berfungsi →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Contoh permintaan</h3><h4>Ailoot Ultra · Transkripsi</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><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 · fail WAV sebenar dan hasil asal yang lengkap</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><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\">Terima dan simpan hasil</h3><h4>Ailoot Ultra · Transkripsi</h4><p class=\"note-s\">Badan respons asal yang lengkap, status dan pengepala yang dimajukan. Pengendali ini tidak menambah bentuk JSON sejagat, medan teks atau struktur pembungkus tugas.</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>Simpan semua hasil yang selesai</h5><p class=\"note-s\">Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.</p><p class=\"note-s\">Simpan respons dan pengepala yang lengkap, setiap output sebenar, pengecam asal yang dikembalikan serta semua medan penggunaan. Pulihkan operasi asal tanpa menghantar permintaan penciptaan sekali lagi.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jika respons asal perlu disemak</h5><p class=\"note-s\">Simpan X-Client-Request-ID sebenar dan respons lengkap. Baca aset asal milik anda serta pautan kandungan bertandatangan yang tepat; jangan sekali-kali hantar semula penciptaan yang tidak pasti.</p></div><details class=\"card-about\" data-output-fields><summary>Medan respons</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Medan</th><th>Jenis</th></tr></thead><tbody><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">text (when present)</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span></td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">usage (when present)</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span></td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Ralat dan langkah seterusnya</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respons</th><th>Syarat</th><th>Langkah seterusnya</th></tr></thead><tbody><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Badan JSON atau ID model kanonik yang dinyatakan secara jelas tidak sah.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan respons dan betulkan medan permintaan yang dinyatakan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Kunci API Ailoot tidak sah.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Gunakan kunci API Ailoot anda yang dibenarkan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>403 · <code>permission_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Kumpulan kunci tidak membenarkan kaedah ini.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan butiran ralat yang dikembalikan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Kaedah yang dipilih tidak mempunyai laluan yang dibenarkan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan butiran ralat yang dikembalikan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Tarif yang diterima tidak dapat memperoleh kuantiti input atau batas yang diperlukan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan respons; gunakan bentuk perwakilan input yang diperlukan oleh tarif yang diterima.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>503 · <code></code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Storan, laluan, harga kaedah atau penahanan dana yang diperlukan tidak tersedia.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan respons asal yang lengkap. Penahanan dana yang tidak pasti bukan kebenaran untuk menghantar semula.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>502 · <code>server_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Hasil asal, penggunaan atau penyelesaian caj memerlukan semakan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan ID permintaan sebenar dan respons asal. Baca rekod sedia ada milik anda; jangan hantar semula permintaan penciptaan.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias model</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>Alias laluan kaedah</h4><p class=\"note-s\">Gunakan laluan kaedah yang dipaparkan di atas.</p><h4>ID pemanggil berkaitan</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": "Badan JSON atau ID model kanonik yang dinyatakan secara jelas tidak sah.",
                "http_status": 400,
                "recovery": "Simpan respons dan betulkan medan permintaan yang dinyatakan.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Kunci API Ailoot tidak sah.",
                "http_status": 401,
                "recovery": "Gunakan kunci API Ailoot anda yang dibenarkan.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Kumpulan kunci tidak membenarkan kaedah ini.",
                "http_status": 403,
                "recovery": "Simpan butiran ralat yang dikembalikan.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "Kaedah yang dipilih tidak mempunyai laluan yang dibenarkan.",
                "http_status": 404,
                "recovery": "Simpan butiran ralat yang dikembalikan.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Tarif yang diterima tidak dapat memperoleh kuantiti input atau batas yang diperlukan.",
                "http_status": 422,
                "recovery": "Simpan respons; gunakan bentuk perwakilan input yang diperlukan oleh tarif yang diterima.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Storan, laluan, harga kaedah atau penahanan dana yang diperlukan tidak tersedia.",
                "http_status": 503,
                "recovery": "Simpan respons asal yang lengkap. Penahanan dana yang tidak pasti bukan kebenaran untuk menghantar semula.",
                "type": null
              },
              {
                "code": null,
                "condition": "Hasil asal, penggunaan atau penyelesaian caj memerlukan semakan.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Simpan ID permintaan sebenar dan respons asal. Baca rekod sedia ada milik anda; jangan hantar semula permintaan penciptaan.",
                "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": "Simpan X-Client-Request-ID sebenar dan respons lengkap. Baca aset asal milik anda serta pautan kandungan bertandatangan yang tepat; jangan sekali-kali hantar semula penciptaan yang tidak pasti."
            },
            "outputs": {
              "all_results": "Simpan respons dan pengepala yang lengkap, setiap output sebenar, pengecam asal yang dikembalikan serta semua medan penggunaan. Pulihkan operasi asal tanpa menghantar permintaan penciptaan sekali lagi.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Badan respons asal yang lengkap, status dan pengepala yang dimajukan. Pengendali ini tidak menambah bentuk JSON sejagat, medan teks atau struktur pembungkus tugas."
            },
            "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": [
              "Contoh ini membaca fail PCM WAV sebenar anda yang tidak kosong, mengekodkan keseluruhan bait fail sebagai base64 dan menghantar input_audio.format sebagai 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": "task_id tepat daripada rekod media sedia ada milik anda",
                "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": "Transkripsi",
        "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": "80f0a72f2f1703bd26bc3682304cc5c45a7bae7bac62bdb1141f0e845e0a1a03",
    "input_html_sha256": "2f8e2b791111f3978bfa87d8ee30bf4e9cf95ac17e4bd4e92c6b3a3f863d25d6",
    "private_audit_sha256": "77bebc0799d71c000871a3b606ac1ecc7c73cc535ff30ca305dea3231b50f681",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ms/fish-audio-transcribe-1/",
    "description": "Transcribe 1 menukar rakaman audio pendek kepada teks dengan pengesanan bahasa automatik dan cap masa peringkat perkataan secara pilihan. Gunakan transkrip untuk nota suara, klip yang boleh dicari atau penyediaan sari kata, sambil memisahkan segmen bermasa daripada teks penuh yang boleh dibaca.",
    "locale": "ms",
    "md_url": "https://ailoot.ai/models/ms/fish-audio-transcribe-1/index.md",
    "title": "Fish Audio: Transcribe 1 — Ailoot",
    "url": "https://ailoot.ai/models/ms/fish-audio-transcribe-1/"
  },
  "rawModel": {
    "about": "Transcribe 1 ialah model pertuturan kepada teks umum Fish Audio untuk rakaman pendek. Ia menerima fail audio dan mengembalikan perkataan yang dikenal pasti sebagai teks, berserta tempoh rakaman, segmen bermasa secara pilihan dan maklumat bahasa jika diketahui. Model ini berguna untuk nota suara pendek, arahan lisan, petikan rakaman atau klip audio yang memerlukan perwakilan teks yang boleh dibaca.\n\nContoh aliran kerja nota suara menyimpan rakaman bersama transkrip penuhnya dan pengecam klip asal. Langkah aplikasi kemudian boleh mencari teks itu, menyusun nota atau membina ringkasan sambil mengekalkan sumber pertuturan. Untuk arahan, transkrip membekalkan perkataan yang dikenal pasti kepada aplikasi; sebarang tindakan ialah langkah pentafsiran dan pelaksanaan yang berasingan. Untuk petikan temu bual, rekodkan kedudukan klip dalam audio lengkap supaya petikan kata-kata boleh disemak pada lokasi yang betul.\n\nPengeluar menerima WAV, MP3, AAC termasuk M4A/MP4, FLAC dan Ogg yang mengandungi Opus atau Vorbis. Rakaman pelayar dalam WebM perlu ditukar kepada Ogg/Opus, MP3 atau WAV untuk model ini; Pro mendokumenkan sokongan natif untuk bekas tambahan. Bekalkan satu fail audio bagi setiap permintaan. Peruntukan permintaan model asas yang didokumenkan ialah sehingga 50 MiB, dengan fail MP3 dan Opus dikekalkan di bawah 25 MiB. Saiz fail dan panjang rakaman ialah pertimbangan berbeza: fail termampat boleh muat dalam peruntukan muat naik tetapi masih mengambil masa terlalu lama untuk diproses.\n\nTranscribe 1 direka untuk rakaman pendek. Pengeluar mengesyorkan Pro untuk audio yang melebihi beberapa minit; permintaan panjang kepada model asas boleh gagal jika melebihi had masa pemprosesan. Apabila menyediakan sumber lebih panjang untuk transkripsi klip pendek, kekalkan ofset permulaan setiap klip dan pastikan transkrip yang dikembalikan meliputi seluruh klip sebelum menggabungkan hasil. Tambahkan ofset asal pada masa segmen setempat supaya navigasi kekal terhubung dengan rakaman penuh. Panduan model asas tidak patut ditafsirkan sebagai peruntukan 60 minit Pro yang berasingan.\n\nRespons pengeluar merangkumi text, duration dan segments. Tempoh dinyatakan dalam saat, dan transkrip penuh yang boleh dibaca patut dikekalkan sebagai susunan kata utama klip. Cap masa adalah pilihan: ignore_timestamps mempunyai nilai lalai true dalam API pengeluar, manakala false meminta segmen peringkat perkataan dengan text, masa start dan end dalam saat. Permintaan penjajaran menambah masa pemprosesan. Tatasusunan segments yang kosong boleh mencerminkan pemasaan yang dilangkau, ketiadaan pertuturan atau penjajaran yang tidak tersedia buat sementara, jadi ia tidak patut ditafsirkan secara automatik sebagai transkrip penuh yang kosong.\n\nSegmen biasanya berupa perkataan, atau satu atau beberapa aksara dalam bahasa Cina dan Jepun. Teksnya tidak menyertakan tanda baca dan boleh menormalkan nilai secara berbeza daripada transkrip penuh; ia bukan salinan respons yang boleh dibaca secara aksara demi aksara. Sesuatu segmen boleh mempunyai masa start dan end yang sama. Gunakan segmen untuk mencari kedudukan dalam rakaman atau menyediakan paparan bermasa, dan gunakan teks penuh apabila susunan kata dan tanda baca penting. Kekalkan kedua-dua perwakilan itu secara berasingan dalam artifak yang dihasilkan.\n\nBahasa dikesan secara automatik, sama ada petunjuk bahasa pilihan diberikan atau tidak. Pengeluar mendokumenkan kod ISO 639-1 huruf kecil untuk petunjuk dan mengembalikan kod bahasa untuk logik aplikasi bersama nama bahasa untuk paparan jika diketahui. Respons melaporkan satu bahasa, bukannya setiap bahasa dalam rakaman yang bertukar-tukar bahasa. Simpan susunan kata sumber dan metadata bahasa yang tersedia bersama hasil, bukannya menganggap permintaan transkripsi sebagai operasi terjemahan.\n\nUntuk aliran kerja sari kata, kumpulkan segmen bermasa yang berturutan menjadi isyarat sari kata yang boleh dibaca, bukannya memaparkan satu perkataan pada satu masa. Output yang berguna ialah fail SRT atau WebVTT yang dipautkan pada klip asal, dengan sempadan isyarat yang sesuai dengan jeda dan jumlah teks pada skrin yang mudah dibaca. Periksa pemasaan yang tiada dan pastikan akhir setiap isyarat selepas permulaannya. Pengumpulan sari kata dan pemformatan fail ialah langkah aplikasi yang dibina daripada penjajaran yang dikembalikan, dan pilihan paparannya patut sesuai dengan pemain serta penonton.\n\nKawalan Transcribe 1 yang didokumenkan ialah audio, petunjuk bahasa dan pilihan cap masa. Penanda penutur, giliran penutur berstruktur, kawalan peristiwa emosi dan petunjuk bilangan penutur Pro ialah ciri berasingan; ia bukan sebahagian daripada kontrak respons model asas ini yang didokumenkan. Pilih artifak yang diperlukan sebelum pemprosesan: teks biasa yang boleh dibaca untuk nota, atau teks bersama penjajaran untuk navigasi main balik dan sari kata. Mengekalkan pengecam klip, transkrip dan sebarang pemasaan yang tersedia menjadikan hasil itu berguna untuk peringkat aplikasi seterusnya.",
    "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": "Maklumat lengkap tentang harga konfigurasi terdapat dalam butiran."
      }
    ],
    "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": "Badan JSON atau ID model kanonik yang dinyatakan secara jelas tidak sah.",
                "http_status": 400,
                "recovery": "Simpan respons dan betulkan medan permintaan yang dinyatakan.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Kunci API Ailoot tidak sah.",
                "http_status": 401,
                "recovery": "Gunakan kunci API Ailoot anda yang dibenarkan.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Kumpulan kunci tidak membenarkan kaedah ini.",
                "http_status": 403,
                "recovery": "Simpan butiran ralat yang dikembalikan.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "Kaedah yang dipilih tidak mempunyai laluan yang dibenarkan.",
                "http_status": 404,
                "recovery": "Simpan butiran ralat yang dikembalikan.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Tarif yang diterima tidak dapat memperoleh kuantiti input atau batas yang diperlukan.",
                "http_status": 422,
                "recovery": "Simpan respons; gunakan bentuk perwakilan input yang diperlukan oleh tarif yang diterima.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Storan, laluan, harga kaedah atau penahanan dana yang diperlukan tidak tersedia.",
                "http_status": 503,
                "recovery": "Simpan respons asal yang lengkap. Penahanan dana yang tidak pasti bukan kebenaran untuk menghantar semula.",
                "type": null
              },
              {
                "code": null,
                "condition": "Hasil asal, penggunaan atau penyelesaian caj memerlukan semakan.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Simpan ID permintaan sebenar dan respons asal. Baca rekod sedia ada milik anda; jangan hantar semula permintaan penciptaan.",
                "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": "Simpan X-Client-Request-ID sebenar dan respons lengkap. Baca aset asal milik anda serta pautan kandungan bertandatangan yang tepat; jangan sekali-kali hantar semula penciptaan yang tidak pasti."
            },
            "outputs": {
              "all_results": "Simpan respons dan pengepala yang lengkap, setiap output sebenar, pengecam asal yang dikembalikan serta semua medan penggunaan. Pulihkan operasi asal tanpa menghantar permintaan penciptaan sekali lagi.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Badan respons asal yang lengkap, status dan pengepala yang dimajukan. Pengendali ini tidak menambah bentuk JSON sejagat, medan teks atau struktur pembungkus tugas."
            },
            "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": [
              "Contoh ini membaca fail PCM WAV sebenar anda yang tidak kosong, mengekodkan keseluruhan bait fail sebagai base64 dan menghantar input_audio.format sebagai 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": "task_id tepat daripada rekod media sedia ada milik anda",
                "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": "Transkripsi",
        "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 menukar rakaman audio pendek kepada teks dengan pengesanan bahasa automatik dan cap masa peringkat perkataan secara pilihan. Gunakan transkrip untuk nota suara, klip yang boleh dicari atau penyediaan sari kata, sambil memisahkan segmen bermasa daripada teks penuh yang boleh dibaca."
  },
  "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 menukar rakaman audio pendek kepada teks dengan pengesanan bahasa automatik dan cap masa peringkat perkataan secara pilihan. Gunakan transkrip untuk nota suara, klip yang boleh dicari atau penyediaan sari kata, sambil memisahkan segmen bermasa daripada teks penuh yang boleh dibaca.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "a28b1af652c5eb49e5045729c1e8da3b9e453712caa8d310c367afdff9b58b3d",
    "renderer_sha256": "1dab5ba62521e9568c8b7c82005622cabbf330a075df7cce1f83274a04009460"
  },
  "sourceRevision": "97ce8ecf504b8e66e6d136a0852c0500237d379e2cbe9a84a1caaf7536d7096b"
}
