{
  "aboutHtml": "<p>Google Gemini 3.1 Flash TTS Preview adalah edisi text-to-speech dari keluarga Gemini 3.1 Flash Audio. Model ini menerima teks dan menghasilkan audio ucapan dengan ekspresi yang diarahkan melalui prompt. Google menggambarkan generasi ini sebagai peningkatan kealamian ucapan, kemampuan pengendalian, dan kinerja multibahasa, dengan dukungan bawaan untuk dialog multipembicara serta lebih dari 70 bahasa. Penggunaan praktisnya mencakup pelajaran singkat bernarasi, percakapan karakter, atau bagian ucapan yang penyampaiannya sama pentingnya dengan kata-katanya.</p><p>Siapkan naskah yang telah selesai dan arahan penampilan suara. Generasi ini menggunakan instruksi bahasa alami di dalam masukan teks untuk memandu gaya vokal, tempo, dan penyampaian. Rilis Google memperkenalkan arahan adegan untuk menetapkan situasi, Audio Profiles pembicara untuk mendefinisikan karakter, serta Director’s Notes untuk memandu tempo, nada, dan aksen. Jaga agar bagian-bagian tersebut dapat diidentifikasi ketika menyiapkan prompt, sehingga kata-kata yang dimaksud dan instruksi penampilan dapat ditinjau secara terpisah. Arahan yang hemat lebih mudah direvisi daripada beberapa deskripsi suara yang saling bersaing.</p><p>Misalnya, contoh arahan latihan dapat menggambarkan narator tenang yang menjelaskan sebuah pameran museum, dengan frasa yang terukur dan nada lebih hangat pada kalimat terakhir. Naskah yang menyertainya harus memuat nama-nama sebenarnya dari pameran tersebut dan kata-kata persis yang perlu diucapkan. Untuk dialog, berikan profil karakter yang berbeda dan urutan giliran bicara yang jelas. Gunakan konteks adegan untuk menjelaskan apakah satu pembicara sedang menenangkan pembicara lain, mengajukan pertanyaan sungguhan, atau merespons dengan keterkejutan yang tertahan. Artefak yang dihasilkan untuk dinilai adalah penampilan naskah tersebut yang terdengar.</p><p>Tag audio inline menambahkan kontrol lokal di dalam teks, sehingga ekspresi pembicara dapat berubah dalam satu kalimat, bukan sepenuhnya bergantung pada arahan pembuka. Google menjelaskan bahwa tag mengendalikan gaya vokal, tempo, dan penyampaian. Gunakan tag ketika penampilan memerlukan pergeseran tertentu dan biarkan bagian kata-kata lainnya tetap alami untuk diucapkan. Perbedaan yang berguna dalam edisi ini adalah antara arahan karakter atau adegan tingkat tinggi dan perubahan lokal dalam penyampaian. Bagian netral singkat dapat menetapkan suara dasar sebelum naskah menambahkan arahan emosional yang lebih banyak.</p><p>Untuk pekerjaan multibahasa, berikan naskah dalam bahasa akhir dan nyatakan aksen serta gaya bicara yang diinginkan dalam arahan. Pengumuman Google mendokumentasikan dukungan untuk lebih dari 70 bahasa. Sebagai persiapan editorial praktis, gunakan satu ejaan konsisten untuk nama yang berulang, uraikan singkatan ambigu ketika satu cara baca diwajibkan, dan periksa angka dalam hasil ucapan. Label bahasa saja tidak menentukan bagaimana nama merek atau istilah serapan harus terdengar. Bandingkan bagian yang memuat istilah tersebut dengan pembacaan yang dimaksud sebelum menerima narasi panjang.</p><p>Halaman model Gemini API khususnya mencantumkan batas masukan 8,192 token dan batas keluaran 16,384 token untuk model pratinjau ini. Kartu model TTS asli DeepMind secara terpisah mencantumkan masukan teks hingga 16K token dan keluaran audio 32K token; angka kartu model tersebut berbeda dari batas penyajian Gemini API. Hitung arahan penampilan sebagai bagian dari masukan yang disiapkan bersama naskah. Alokasi keluaran dinyatakan dalam token audio, sehingga tidak menjamin durasi rekaman tertentu. Susun pelajaran atau cerita panjang menjadi bagian yang koheren, pertahankan arahan karakter yang sama, dan dengarkan sambungannya. Untuk dialog bernaskah, periksa atribusi dan urutan giliran selain kata-kata yang diucapkan serta penyampaian emosional.</p><p>Dokumentasi migrasi Google mengidentifikasi keluaran bawaan 3.1 sebagai PCM mentah tanpa header dengan tipe audio/l16. Byte audio memerlukan informasi pemutaran atau kontainer yang sesuai saat menyiapkan rekaman yang dapat disunting; menambahkan nama berkas WAV saja tidak membuat header WAV. Periksa format yang benar-benar dikembalikan sebelum mengimpor hasilnya. Google juga menyatakan bahwa audio yang dihasilkan Gemini 3.1 Flash TTS membawa watermark SynthID yang tidak dapat didengar. Watermark berkaitan dengan identifikasi audio yang dihasilkan dan tidak menggantikan transkrip, label pembicara, atau peninjauan dengan mendengarkan.</p><p>Gaya persiapan 3.1 berbeda secara berarti dari 3.8. Gemini 3.8 memindahkan arahan berkelanjutan dan identitas pembicara ke metadata ucapan terstruktur, menggunakan tag peristiwa sesaat dengan kurung sudut, dan mengubah keluaran bawaan permintaan yang selesai menjadi WAV. Pertahankan prompt 3.1 sebagai prompt 3.1, alih-alih mencampurkan struktur permintaan yang lebih baru tersebut. Tabel model yang didukung Google mencantumkan sintesis satu dan beberapa pembicara untuk 3.1, sedangkan kontrol suara hasil desain dan replikasi suara berada pada entri 3.8. Edisi Flash Live yang terpisah menangani masukan audio interaktif; edisi TTS ini melayani produksi audio dari teks yang telah disiapkan.</p><p>Tinjau rekaman terhadap naskah tertulis untuk menemukan kata yang hilang atau berulang, nama, waktu pergantian giliran, dan perubahan emosi yang dimaksud. Jika satu kalimat memerlukan penekanan berbeda, revisi arahan lokal tersebut dan periksa transisi yang terpengaruh. Alur ini membuat arahan penampilan berguna: arahan merekam apa yang harus tetap stabil tentang pembicara dan apa yang harus berubah dalam bagian tersebut, sedangkan naskah mempertahankan konten yang perlu didengar audiens.</p>",
  "aboutText": "Google Gemini 3.1 Flash TTS Preview adalah edisi text-to-speech dari keluarga Gemini 3.1 Flash Audio. Model ini menerima teks dan menghasilkan audio ucapan dengan ekspresi yang diarahkan melalui prompt. Google menggambarkan generasi ini sebagai peningkatan kealamian ucapan, kemampuan pengendalian, dan kinerja multibahasa, dengan dukungan bawaan untuk dialog multipembicara serta lebih dari 70 bahasa. Penggunaan praktisnya mencakup pelajaran singkat bernarasi, percakapan karakter, atau bagian ucapan yang penyampaiannya sama pentingnya dengan kata-katanya.\n\nSiapkan naskah yang telah selesai dan arahan penampilan suara. Generasi ini menggunakan instruksi bahasa alami di dalam masukan teks untuk memandu gaya vokal, tempo, dan penyampaian. Rilis Google memperkenalkan arahan adegan untuk menetapkan situasi, Audio Profiles pembicara untuk mendefinisikan karakter, serta Director’s Notes untuk memandu tempo, nada, dan aksen. Jaga agar bagian-bagian tersebut dapat diidentifikasi ketika menyiapkan prompt, sehingga kata-kata yang dimaksud dan instruksi penampilan dapat ditinjau secara terpisah. Arahan yang hemat lebih mudah direvisi daripada beberapa deskripsi suara yang saling bersaing.\n\nMisalnya, contoh arahan latihan dapat menggambarkan narator tenang yang menjelaskan sebuah pameran museum, dengan frasa yang terukur dan nada lebih hangat pada kalimat terakhir. Naskah yang menyertainya harus memuat nama-nama sebenarnya dari pameran tersebut dan kata-kata persis yang perlu diucapkan. Untuk dialog, berikan profil karakter yang berbeda dan urutan giliran bicara yang jelas. Gunakan konteks adegan untuk menjelaskan apakah satu pembicara sedang menenangkan pembicara lain, mengajukan pertanyaan sungguhan, atau merespons dengan keterkejutan yang tertahan. Artefak yang dihasilkan untuk dinilai adalah penampilan naskah tersebut yang terdengar.\n\nTag audio inline menambahkan kontrol lokal di dalam teks, sehingga ekspresi pembicara dapat berubah dalam satu kalimat, bukan sepenuhnya bergantung pada arahan pembuka. Google menjelaskan bahwa tag mengendalikan gaya vokal, tempo, dan penyampaian. Gunakan tag ketika penampilan memerlukan pergeseran tertentu dan biarkan bagian kata-kata lainnya tetap alami untuk diucapkan. Perbedaan yang berguna dalam edisi ini adalah antara arahan karakter atau adegan tingkat tinggi dan perubahan lokal dalam penyampaian. Bagian netral singkat dapat menetapkan suara dasar sebelum naskah menambahkan arahan emosional yang lebih banyak.\n\nUntuk pekerjaan multibahasa, berikan naskah dalam bahasa akhir dan nyatakan aksen serta gaya bicara yang diinginkan dalam arahan. Pengumuman Google mendokumentasikan dukungan untuk lebih dari 70 bahasa. Sebagai persiapan editorial praktis, gunakan satu ejaan konsisten untuk nama yang berulang, uraikan singkatan ambigu ketika satu cara baca diwajibkan, dan periksa angka dalam hasil ucapan. Label bahasa saja tidak menentukan bagaimana nama merek atau istilah serapan harus terdengar. Bandingkan bagian yang memuat istilah tersebut dengan pembacaan yang dimaksud sebelum menerima narasi panjang.\n\nHalaman model Gemini API khususnya mencantumkan batas masukan 8,192 token dan batas keluaran 16,384 token untuk model pratinjau ini. Kartu model TTS asli DeepMind secara terpisah mencantumkan masukan teks hingga 16K token dan keluaran audio 32K token; angka kartu model tersebut berbeda dari batas penyajian Gemini API. Hitung arahan penampilan sebagai bagian dari masukan yang disiapkan bersama naskah. Alokasi keluaran dinyatakan dalam token audio, sehingga tidak menjamin durasi rekaman tertentu. Susun pelajaran atau cerita panjang menjadi bagian yang koheren, pertahankan arahan karakter yang sama, dan dengarkan sambungannya. Untuk dialog bernaskah, periksa atribusi dan urutan giliran selain kata-kata yang diucapkan serta penyampaian emosional.\n\nDokumentasi migrasi Google mengidentifikasi keluaran bawaan 3.1 sebagai PCM mentah tanpa header dengan tipe audio/l16. Byte audio memerlukan informasi pemutaran atau kontainer yang sesuai saat menyiapkan rekaman yang dapat disunting; menambahkan nama berkas WAV saja tidak membuat header WAV. Periksa format yang benar-benar dikembalikan sebelum mengimpor hasilnya. Google juga menyatakan bahwa audio yang dihasilkan Gemini 3.1 Flash TTS membawa watermark SynthID yang tidak dapat didengar. Watermark berkaitan dengan identifikasi audio yang dihasilkan dan tidak menggantikan transkrip, label pembicara, atau peninjauan dengan mendengarkan.\n\nGaya persiapan 3.1 berbeda secara berarti dari 3.8. Gemini 3.8 memindahkan arahan berkelanjutan dan identitas pembicara ke metadata ucapan terstruktur, menggunakan tag peristiwa sesaat dengan kurung sudut, dan mengubah keluaran bawaan permintaan yang selesai menjadi WAV. Pertahankan prompt 3.1 sebagai prompt 3.1, alih-alih mencampurkan struktur permintaan yang lebih baru tersebut. Tabel model yang didukung Google mencantumkan sintesis satu dan beberapa pembicara untuk 3.1, sedangkan kontrol suara hasil desain dan replikasi suara berada pada entri 3.8. Edisi Flash Live yang terpisah menangani masukan audio interaktif; edisi TTS ini melayani produksi audio dari teks yang telah disiapkan.\n\nTinjau rekaman terhadap naskah tertulis untuk menemukan kata yang hilang atau berulang, nama, waktu pergantian giliran, dan perubahan emosi yang dimaksud. Jika satu kalimat memerlukan penekanan berbeda, revisi arahan lokal tersebut dan periksa transisi yang terpengaruh. Alur ini membuat arahan penampilan berguna: arahan merekam apa yang harus tetap stabil tentang pembicara dan apa yang harus berubah dalam bagian tersebut, sedangkan naskah mempertahankan konten yang perlu didengar audiens.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "b32b219b50171833b36e37fb714d8a70270e68f095a7b45bb4931b3f85fc39a2",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "id",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Google: Gemini 3.1 Flash TTS Preview</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Tutup\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-3.1-flash-tts-preview</code><button type=\"button\" id=\"copy-id\">Salin ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Bagian kartu model\"><button type=\"button\" data-card-jump=\"overview\">Mulai</button><button type=\"button\" data-card-jump=\"methods\">Masukan &amp; metode</button><button type=\"button\" data-card-jump=\"pricing\">Paket</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=\"Metode 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|speech|/v1/audio/speech|google%2Fgemini-3.1-flash-tts-preview\">Sintesis ucapan</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\">Mulai</h3><p class=\"mdesc-full\">Google Gemini 3.1 Flash TTS Preview mengubah naskah tertulis menjadi audio ucapan yang ekspresif. Arahan bahasa alami, Audio Profiles pembicara, Director’s Notes, dan tag audio inline membentuk tempo, nada, serta aksen. Model ini memiliki dukungan bawaan untuk dialog serta mendukung lebih dari 70 bahasa, menggunakan format prompt dan audio 3.1.</p><dl class=\"card-io\" data-card-io><div><dt>Masukan yang diterima</dt><dd>Teks</dd></div><div><dt>Hasil</dt><dd>Audio</dd></div></dl><details class=\"card-about\"><summary>Tentang model</summary><p class=\"note-s\" data-model-method-boundary>Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.</p><div class=\"mabout\" id=\"m-about\"><p>Google Gemini 3.1 Flash TTS Preview adalah edisi text-to-speech dari keluarga Gemini 3.1 Flash Audio. Model ini menerima teks dan menghasilkan audio ucapan dengan ekspresi yang diarahkan melalui prompt. Google menggambarkan generasi ini sebagai peningkatan kealamian ucapan, kemampuan pengendalian, dan kinerja multibahasa, dengan dukungan bawaan untuk dialog multipembicara serta lebih dari 70 bahasa. Penggunaan praktisnya mencakup pelajaran singkat bernarasi, percakapan karakter, atau bagian ucapan yang penyampaiannya sama pentingnya dengan kata-katanya.</p><p>Siapkan naskah yang telah selesai dan arahan penampilan suara. Generasi ini menggunakan instruksi bahasa alami di dalam masukan teks untuk memandu gaya vokal, tempo, dan penyampaian. Rilis Google memperkenalkan arahan adegan untuk menetapkan situasi, Audio Profiles pembicara untuk mendefinisikan karakter, serta Director’s Notes untuk memandu tempo, nada, dan aksen. Jaga agar bagian-bagian tersebut dapat diidentifikasi ketika menyiapkan prompt, sehingga kata-kata yang dimaksud dan instruksi penampilan dapat ditinjau secara terpisah. Arahan yang hemat lebih mudah direvisi daripada beberapa deskripsi suara yang saling bersaing.</p><p>Misalnya, contoh arahan latihan dapat menggambarkan narator tenang yang menjelaskan sebuah pameran museum, dengan frasa yang terukur dan nada lebih hangat pada kalimat terakhir. Naskah yang menyertainya harus memuat nama-nama sebenarnya dari pameran tersebut dan kata-kata persis yang perlu diucapkan. Untuk dialog, berikan profil karakter yang berbeda dan urutan giliran bicara yang jelas. Gunakan konteks adegan untuk menjelaskan apakah satu pembicara sedang menenangkan pembicara lain, mengajukan pertanyaan sungguhan, atau merespons dengan keterkejutan yang tertahan. Artefak yang dihasilkan untuk dinilai adalah penampilan naskah tersebut yang terdengar.</p><p>Tag audio inline menambahkan kontrol lokal di dalam teks, sehingga ekspresi pembicara dapat berubah dalam satu kalimat, bukan sepenuhnya bergantung pada arahan pembuka. Google menjelaskan bahwa tag mengendalikan gaya vokal, tempo, dan penyampaian. Gunakan tag ketika penampilan memerlukan pergeseran tertentu dan biarkan bagian kata-kata lainnya tetap alami untuk diucapkan. Perbedaan yang berguna dalam edisi ini adalah antara arahan karakter atau adegan tingkat tinggi dan perubahan lokal dalam penyampaian. Bagian netral singkat dapat menetapkan suara dasar sebelum naskah menambahkan arahan emosional yang lebih banyak.</p><p>Untuk pekerjaan multibahasa, berikan naskah dalam bahasa akhir dan nyatakan aksen serta gaya bicara yang diinginkan dalam arahan. Pengumuman Google mendokumentasikan dukungan untuk lebih dari 70 bahasa. Sebagai persiapan editorial praktis, gunakan satu ejaan konsisten untuk nama yang berulang, uraikan singkatan ambigu ketika satu cara baca diwajibkan, dan periksa angka dalam hasil ucapan. Label bahasa saja tidak menentukan bagaimana nama merek atau istilah serapan harus terdengar. Bandingkan bagian yang memuat istilah tersebut dengan pembacaan yang dimaksud sebelum menerima narasi panjang.</p><p>Halaman model Gemini API khususnya mencantumkan batas masukan 8,192 token dan batas keluaran 16,384 token untuk model pratinjau ini. Kartu model TTS asli DeepMind secara terpisah mencantumkan masukan teks hingga 16K token dan keluaran audio 32K token; angka kartu model tersebut berbeda dari batas penyajian Gemini API. Hitung arahan penampilan sebagai bagian dari masukan yang disiapkan bersama naskah. Alokasi keluaran dinyatakan dalam token audio, sehingga tidak menjamin durasi rekaman tertentu. Susun pelajaran atau cerita panjang menjadi bagian yang koheren, pertahankan arahan karakter yang sama, dan dengarkan sambungannya. Untuk dialog bernaskah, periksa atribusi dan urutan giliran selain kata-kata yang diucapkan serta penyampaian emosional.</p><p>Dokumentasi migrasi Google mengidentifikasi keluaran bawaan 3.1 sebagai PCM mentah tanpa header dengan tipe audio/l16. Byte audio memerlukan informasi pemutaran atau kontainer yang sesuai saat menyiapkan rekaman yang dapat disunting; menambahkan nama berkas WAV saja tidak membuat header WAV. Periksa format yang benar-benar dikembalikan sebelum mengimpor hasilnya. Google juga menyatakan bahwa audio yang dihasilkan Gemini 3.1 Flash TTS membawa watermark SynthID yang tidak dapat didengar. Watermark berkaitan dengan identifikasi audio yang dihasilkan dan tidak menggantikan transkrip, label pembicara, atau peninjauan dengan mendengarkan.</p><p>Gaya persiapan 3.1 berbeda secara berarti dari 3.8. Gemini 3.8 memindahkan arahan berkelanjutan dan identitas pembicara ke metadata ucapan terstruktur, menggunakan tag peristiwa sesaat dengan kurung sudut, dan mengubah keluaran bawaan permintaan yang selesai menjadi WAV. Pertahankan prompt 3.1 sebagai prompt 3.1, alih-alih mencampurkan struktur permintaan yang lebih baru tersebut. Tabel model yang didukung Google mencantumkan sintesis satu dan beberapa pembicara untuk 3.1, sedangkan kontrol suara hasil desain dan replikasi suara berada pada entri 3.8. Edisi Flash Live yang terpisah menangani masukan audio interaktif; edisi TTS ini melayani produksi audio dari teks yang telah disiapkan.</p><p>Tinjau rekaman terhadap naskah tertulis untuk menemukan kata yang hilang atau berulang, nama, waktu pergantian giliran, dan perubahan emosi yang dimaksud. Jika satu kalimat memerlukan penekanan berbeda, revisi arahan lokal tersebut dan periksa transisi yang terpengaruh. Alur ini membuat arahan penampilan berguna: arahan merekam apa yang harus tetap stabil tentang pembicara dan apa yang harus berubah dalam bagian tersebut, sedangkan naskah mempertahankan konten yang perlu didengar audiens.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tersedia di Ailoot · masukan &amp; metode</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Ucapan</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Masukan</dt><dd><code>text</code></dd></div><div><dt>Keluaran</dt><dd><code>audio</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Kolom</th><th>Jenis</th><th>Persyaratan</th><th>Nilai &amp; batasan</th><th>Bawaan</th></tr></thead><tbody><tr><th data-cell-label=\"Kolom\" scope=\"row\"><span class=\"card-cell-label\">Kolom</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=\"Persyaratan\"><span class=\"card-cell-label\">Persyaratan</span>Wajib</td><td data-cell-label=\"Nilai &amp; batasan\"><span class=\"card-cell-label\">Nilai &amp; batasan</span><div>google/gemini-3.1-flash-tts-preview</div></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr><tr><th data-cell-label=\"Kolom\" scope=\"row\"><span class=\"card-cell-label\">Kolom</span><code class=\"card-field-name\">input</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=\"Persyaratan\"><span class=\"card-cell-label\">Persyaratan</span>Wajib</td><td data-cell-label=\"Nilai &amp; batasan\"><span class=\"card-cell-label\">Nilai &amp; batasan</span><div>Panjang minimum: 1</div></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr><tr><th data-cell-label=\"Kolom\" scope=\"row\"><span class=\"card-cell-label\">Kolom</span><code class=\"card-field-name\">voice</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=\"Persyaratan\"><span class=\"card-cell-label\">Persyaratan</span>Wajib</td><td data-cell-label=\"Nilai &amp; batasan\"><span class=\"card-cell-label\">Nilai &amp; batasan</span><div>Zephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat</div><div>Panjang minimum: 1</div></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr><tr><th data-cell-label=\"Kolom\" scope=\"row\"><span class=\"card-cell-label\">Kolom</span><code class=\"card-field-name\">response_format</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=\"Persyaratan\"><span class=\"card-cell-label\">Persyaratan</span>Opsional</td><td data-cell-label=\"Nilai &amp; batasan\"><span class=\"card-cell-label\">Nilai &amp; batasan</span><div>mp3, pcm</div></td><td data-cell-label=\"Bawaan\" data-default=\"known\"><span class=\"card-cell-label\">Bawaan</span>pcm</td></tr><tr><th data-cell-label=\"Kolom\" scope=\"row\"><span class=\"card-cell-label\">Kolom</span><code class=\"card-field-name\">provider</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=\"Persyaratan\"><span class=\"card-cell-label\">Persyaratan</span>Opsional</td><td data-cell-label=\"Nilai &amp; batasan\"><span class=\"card-cell-label\">Nilai &amp; batasan</span></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Parameter metode dan siklus hidup</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, voice</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>text</td></tr></tbody></table></div><p>Siklus hidup: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · task_id aktual yang dikembalikan atau catatan pustaka media</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\">Paket</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.</p><dl data-price-conditions><dt>Mode Fast</dt><dd>Tidak ditentukan <span class=\"note-s\">Saat mode fast dipilih</span></dd><dt>Mode Flex</dt><dd>Tidak ditentukan <span class=\"note-s\">Saat mode flex dipilih</span></dd><dt>Upaya penalaran maksimum</dt><dd>Tidak ditentukan <span class=\"note-s\">Saat upaya penalaran maksimum menggunakan penyesuaian default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarif Ailoot</h4><h4>Harga menurut konfigurasi</h4><p class=\"note-s\">Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Jadwal tarif</th><th>Satuan penagihan</th><th>Biaya</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Tarif dasar token</th><td data-cell-label=\"Jadwal tarif\"><span class=\"card-cell-label\">Jadwal tarif</span>Tarif dasar</td><td data-cell-label=\"Satuan penagihan\"><span class=\"card-cell-label\">Satuan penagihan</span>—</td><td data-cell-label=\"Biaya\"><span class=\"card-cell-label\">Biaya</span><div><span>Masukan · Token masukan</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Keluaran · Token keluaran</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Masukan · Pembacaan cache</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Masukan · Penulisan cache</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Masukan · 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>token masukan</th><td data-cell-label=\"Jadwal tarif\"><span class=\"card-cell-label\">Jadwal tarif</span>—</td><td data-cell-label=\"Satuan penagihan\"><span class=\"card-cell-label\">Satuan penagihan</span>/ 1K token</td><td data-cell-label=\"Biaya\"><span class=\"card-cell-label\">Biaya</span><div><span>Masukan</span> <b>$0.002</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>token keluaran</th><td data-cell-label=\"Jadwal tarif\"><span class=\"card-cell-label\">Jadwal tarif</span>—</td><td data-cell-label=\"Satuan penagihan\"><span class=\"card-cell-label\">Satuan penagihan</span>/ 1K token</td><td data-cell-label=\"Biaya\"><span class=\"card-cell-label\">Biaya</span><div><span>Keluaran</span> <b>$0.04</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. <a href=\"/docs/id/billing/reserve/\">Cara kerja cadangan dan penyelesaian tagihan →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Contoh permintaan</h3><h4>Ailoot Ultra · Ucapan</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kode\"><button class=\"cg-tab\" id=\"model-code-1460-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1460-panel-0\" aria-selected=\"true\" tabindex=\"0\">Gunakan input sebenarnya dan simpan hasil secara lengkap</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kode\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1460-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1460-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_TEXT:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_TEXT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;google/gemini-3.1-flash-tts-preview&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;Orus&#39;, &#39;response_format&#39;: &#39;pcm&#39;}\nrequest[&#39;input&#39;]=os.environ[&#39;AILOOT_INPUT_TEXT&#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/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\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 · Ucapan</h4><p class=\"note-s\">Audio biner secara utuh atau respons audio_url asli, header, dan setiap aset milik Ailoot.</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>Pembacaan konten lain</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kode\"><button class=\"cg-tab\" id=\"model-code-1461-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1461-panel-0\" aria-selected=\"true\" tabindex=\"0\">Baca aset yang sudah ada dan menjadi milik Anda</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kode\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1461-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1461-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Simpan semua hasil yang selesai</h5><p class=\"note-s\">Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.</p><p class=\"note-s\">Simpan respons dan header secara lengkap, setiap keluaran aktual, identifikator asli yang dikembalikan, dan semua kolom usage. Pulihkan operasi asli tanpa mengirim ulang permintaan pembuatan.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jika respons asli perlu diperiksa</h5><p class=\"note-s\">Simpan X-Client-Request-ID yang dikembalikan untuk rekonsiliasi. Baca hanya nilai task_id/asset_id yang benar-benar dikembalikan atau pustaka media milik Anda; jangan pernah membuat URL tugas dari ID operasi dan jangan pernah mengirim ulang permintaan pembuatan.</p></div></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=google%2Fgemini-3.1-flash-tts-preview&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-flash-tts-preview&amp;fmt=speech\"><code>google/gemini-3.1-flash-tts-preview</code></a></span></p><h4>Alias jalur metode</h4><p class=\"note-s\">Gunakan jalur metode yang ditampilkan di atas.</p><h4>ID pemanggil terkait</h4><p class=\"note-s\"><a href=\"#m=google%2Fgemini-3.1-flash-tts-preview&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-flash-tts-preview&amp;fmt=speech\"><code>google/gemini-3.1-flash-tts-preview</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-3.1-flash-tts-preview",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|google%2Fgemini-3.1-flash-tts-preview",
      "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.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Simpan X-Client-Request-ID yang dikembalikan untuk rekonsiliasi. Baca hanya nilai task_id/asset_id yang benar-benar dikembalikan atau pustaka media milik Anda; jangan pernah membuat URL tugas dari ID operasi dan jangan pernah mengirim ulang permintaan pembuatan."
            },
            "outputs": {
              "all_results": "Simpan respons dan header secara lengkap, setiap keluaran aktual, identifikator asli yang dikembalikan, dan semua kolom usage. Pulihkan operasi asli tanpa mengirim ulang permintaan pembuatan.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Audio biner secara utuh atau respons audio_url asli, header, dan setiap aset milik Ailoot."
            },
            "parameters": [
              {
                "enum": [
                  "google/gemini-3.1-flash-tts-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "Zephyr",
                  "Puck",
                  "Charon",
                  "Kore",
                  "Fenrir",
                  "Leda",
                  "Orus",
                  "Aoede",
                  "Callirrhoe",
                  "Autonoe",
                  "Enceladus",
                  "Iapetus",
                  "Umbriel",
                  "Algieba",
                  "Despina",
                  "Erinome",
                  "Algenib",
                  "Rasalgethi",
                  "Laomedeia",
                  "Achernar",
                  "Alnilam",
                  "Schedar",
                  "Gacrux",
                  "Pulcherrima",
                  "Achird",
                  "Zubenelgenubi",
                  "Vindemiatrix",
                  "Sadachbia",
                  "Sadaltager",
                  "Sulafat"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.1-flash-tts-preview"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "Zephyr",
                    "Puck",
                    "Charon",
                    "Kore",
                    "Fenrir",
                    "Leda",
                    "Orus",
                    "Aoede",
                    "Callirrhoe",
                    "Autonoe",
                    "Enceladus",
                    "Iapetus",
                    "Umbriel",
                    "Algieba",
                    "Despina",
                    "Erinome",
                    "Algenib",
                    "Rasalgethi",
                    "Laomedeia",
                    "Achernar",
                    "Alnilam",
                    "Schedar",
                    "Gacrux",
                    "Pulcherrima",
                    "Achird",
                    "Zubenelgenubi",
                    "Vindemiatrix",
                    "Sadachbia",
                    "Sadaltager",
                    "Sulafat"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "google/gemini-3.1-flash-tts-preview",
                "response_format": "pcm",
                "voice": "Orus"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id aktual yang dikembalikan atau catatan pustaka media",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "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": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'google/gemini-3.1-flash-tts-preview', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'Orus', 'response_format': 'pcm'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\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/speech \\\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 response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "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": [
          "text"
        ],
        "label": "Ucapan",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "input_token": 2e-06,
            "output_token": 4e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "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.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000002",
            "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": "0.04000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.00004",
            "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"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemini-3.1-flash-tts-preview",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "b28d7d4d2c8357e40de3c07042b5fe14d5e2e827a51320eadff23eb017ffd246",
    "input_html_sha256": "0c4b70c6bfd18e588015eeeba661853b289d652329ce633f077aabf2e749541c",
    "private_audit_sha256": "422f35ab551a1bcd60a133ea0589b55e413755cdc298f0d01e737b80b80b40b5",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/id/google-gemini-3-1-flash-tts-preview/",
    "description": "Google Gemini 3.1 Flash TTS Preview mengubah naskah tertulis menjadi audio ucapan yang ekspresif. Arahan bahasa alami, Audio Profiles pembicara, Director’s Notes, dan tag audio inline membentuk tempo, nada, serta aksen. Model ini memiliki dukungan bawaan untuk dialog serta mendukung lebih dari 70 bahasa, menggunakan format prompt dan audio 3.1.",
    "locale": "id",
    "md_url": "https://ailoot.ai/models/id/google-gemini-3-1-flash-tts-preview/index.md",
    "title": "Google: Gemini 3.1 Flash TTS Preview — Ailoot",
    "url": "https://ailoot.ai/models/id/google-gemini-3-1-flash-tts-preview/"
  },
  "rawModel": {
    "about": "Google Gemini 3.1 Flash TTS Preview adalah edisi text-to-speech dari keluarga Gemini 3.1 Flash Audio. Model ini menerima teks dan menghasilkan audio ucapan dengan ekspresi yang diarahkan melalui prompt. Google menggambarkan generasi ini sebagai peningkatan kealamian ucapan, kemampuan pengendalian, dan kinerja multibahasa, dengan dukungan bawaan untuk dialog multipembicara serta lebih dari 70 bahasa. Penggunaan praktisnya mencakup pelajaran singkat bernarasi, percakapan karakter, atau bagian ucapan yang penyampaiannya sama pentingnya dengan kata-katanya.\n\nSiapkan naskah yang telah selesai dan arahan penampilan suara. Generasi ini menggunakan instruksi bahasa alami di dalam masukan teks untuk memandu gaya vokal, tempo, dan penyampaian. Rilis Google memperkenalkan arahan adegan untuk menetapkan situasi, Audio Profiles pembicara untuk mendefinisikan karakter, serta Director’s Notes untuk memandu tempo, nada, dan aksen. Jaga agar bagian-bagian tersebut dapat diidentifikasi ketika menyiapkan prompt, sehingga kata-kata yang dimaksud dan instruksi penampilan dapat ditinjau secara terpisah. Arahan yang hemat lebih mudah direvisi daripada beberapa deskripsi suara yang saling bersaing.\n\nMisalnya, contoh arahan latihan dapat menggambarkan narator tenang yang menjelaskan sebuah pameran museum, dengan frasa yang terukur dan nada lebih hangat pada kalimat terakhir. Naskah yang menyertainya harus memuat nama-nama sebenarnya dari pameran tersebut dan kata-kata persis yang perlu diucapkan. Untuk dialog, berikan profil karakter yang berbeda dan urutan giliran bicara yang jelas. Gunakan konteks adegan untuk menjelaskan apakah satu pembicara sedang menenangkan pembicara lain, mengajukan pertanyaan sungguhan, atau merespons dengan keterkejutan yang tertahan. Artefak yang dihasilkan untuk dinilai adalah penampilan naskah tersebut yang terdengar.\n\nTag audio inline menambahkan kontrol lokal di dalam teks, sehingga ekspresi pembicara dapat berubah dalam satu kalimat, bukan sepenuhnya bergantung pada arahan pembuka. Google menjelaskan bahwa tag mengendalikan gaya vokal, tempo, dan penyampaian. Gunakan tag ketika penampilan memerlukan pergeseran tertentu dan biarkan bagian kata-kata lainnya tetap alami untuk diucapkan. Perbedaan yang berguna dalam edisi ini adalah antara arahan karakter atau adegan tingkat tinggi dan perubahan lokal dalam penyampaian. Bagian netral singkat dapat menetapkan suara dasar sebelum naskah menambahkan arahan emosional yang lebih banyak.\n\nUntuk pekerjaan multibahasa, berikan naskah dalam bahasa akhir dan nyatakan aksen serta gaya bicara yang diinginkan dalam arahan. Pengumuman Google mendokumentasikan dukungan untuk lebih dari 70 bahasa. Sebagai persiapan editorial praktis, gunakan satu ejaan konsisten untuk nama yang berulang, uraikan singkatan ambigu ketika satu cara baca diwajibkan, dan periksa angka dalam hasil ucapan. Label bahasa saja tidak menentukan bagaimana nama merek atau istilah serapan harus terdengar. Bandingkan bagian yang memuat istilah tersebut dengan pembacaan yang dimaksud sebelum menerima narasi panjang.\n\nHalaman model Gemini API khususnya mencantumkan batas masukan 8,192 token dan batas keluaran 16,384 token untuk model pratinjau ini. Kartu model TTS asli DeepMind secara terpisah mencantumkan masukan teks hingga 16K token dan keluaran audio 32K token; angka kartu model tersebut berbeda dari batas penyajian Gemini API. Hitung arahan penampilan sebagai bagian dari masukan yang disiapkan bersama naskah. Alokasi keluaran dinyatakan dalam token audio, sehingga tidak menjamin durasi rekaman tertentu. Susun pelajaran atau cerita panjang menjadi bagian yang koheren, pertahankan arahan karakter yang sama, dan dengarkan sambungannya. Untuk dialog bernaskah, periksa atribusi dan urutan giliran selain kata-kata yang diucapkan serta penyampaian emosional.\n\nDokumentasi migrasi Google mengidentifikasi keluaran bawaan 3.1 sebagai PCM mentah tanpa header dengan tipe audio/l16. Byte audio memerlukan informasi pemutaran atau kontainer yang sesuai saat menyiapkan rekaman yang dapat disunting; menambahkan nama berkas WAV saja tidak membuat header WAV. Periksa format yang benar-benar dikembalikan sebelum mengimpor hasilnya. Google juga menyatakan bahwa audio yang dihasilkan Gemini 3.1 Flash TTS membawa watermark SynthID yang tidak dapat didengar. Watermark berkaitan dengan identifikasi audio yang dihasilkan dan tidak menggantikan transkrip, label pembicara, atau peninjauan dengan mendengarkan.\n\nGaya persiapan 3.1 berbeda secara berarti dari 3.8. Gemini 3.8 memindahkan arahan berkelanjutan dan identitas pembicara ke metadata ucapan terstruktur, menggunakan tag peristiwa sesaat dengan kurung sudut, dan mengubah keluaran bawaan permintaan yang selesai menjadi WAV. Pertahankan prompt 3.1 sebagai prompt 3.1, alih-alih mencampurkan struktur permintaan yang lebih baru tersebut. Tabel model yang didukung Google mencantumkan sintesis satu dan beberapa pembicara untuk 3.1, sedangkan kontrol suara hasil desain dan replikasi suara berada pada entri 3.8. Edisi Flash Live yang terpisah menangani masukan audio interaktif; edisi TTS ini melayani produksi audio dari teks yang telah disiapkan.\n\nTinjau rekaman terhadap naskah tertulis untuk menemukan kata yang hilang atau berulang, nama, waktu pergantian giliran, dan perubahan emosi yang dimaksud. Jika satu kalimat memerlukan penekanan berbeda, revisi arahan lokal tersebut dan periksa transisi yang terpengaruh. Alur ini membuat arahan penampilan berguna: arahan merekam apa yang harus tetap stabil tentang pembicara dan apa yang harus berubah dalam bagian tersebut, sedangkan naskah mempertahankan konten yang perlu didengar audiens.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "capabilities": {
      "context_length": 32768,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000002",
            "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": "0.04000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.00004",
            "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"
          }
        ],
        "summary": "Informasi lengkap harga konfigurasi tersedia di bagian detail."
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "google/gemini-3.1-flash-tts-preview",
    "input": [
      "text"
    ],
    "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.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Simpan X-Client-Request-ID yang dikembalikan untuk rekonsiliasi. Baca hanya nilai task_id/asset_id yang benar-benar dikembalikan atau pustaka media milik Anda; jangan pernah membuat URL tugas dari ID operasi dan jangan pernah mengirim ulang permintaan pembuatan."
            },
            "outputs": {
              "all_results": "Simpan respons dan header secara lengkap, setiap keluaran aktual, identifikator asli yang dikembalikan, dan semua kolom usage. Pulihkan operasi asli tanpa mengirim ulang permintaan pembuatan.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Audio biner secara utuh atau respons audio_url asli, header, dan setiap aset milik Ailoot."
            },
            "parameters": [
              {
                "enum": [
                  "google/gemini-3.1-flash-tts-preview"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "Zephyr",
                  "Puck",
                  "Charon",
                  "Kore",
                  "Fenrir",
                  "Leda",
                  "Orus",
                  "Aoede",
                  "Callirrhoe",
                  "Autonoe",
                  "Enceladus",
                  "Iapetus",
                  "Umbriel",
                  "Algieba",
                  "Despina",
                  "Erinome",
                  "Algenib",
                  "Rasalgethi",
                  "Laomedeia",
                  "Achernar",
                  "Alnilam",
                  "Schedar",
                  "Gacrux",
                  "Pulcherrima",
                  "Achird",
                  "Zubenelgenubi",
                  "Vindemiatrix",
                  "Sadachbia",
                  "Sadaltager",
                  "Sulafat"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.1-flash-tts-preview"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "Zephyr",
                    "Puck",
                    "Charon",
                    "Kore",
                    "Fenrir",
                    "Leda",
                    "Orus",
                    "Aoede",
                    "Callirrhoe",
                    "Autonoe",
                    "Enceladus",
                    "Iapetus",
                    "Umbriel",
                    "Algieba",
                    "Despina",
                    "Erinome",
                    "Algenib",
                    "Rasalgethi",
                    "Laomedeia",
                    "Achernar",
                    "Alnilam",
                    "Schedar",
                    "Gacrux",
                    "Pulcherrima",
                    "Achird",
                    "Zubenelgenubi",
                    "Vindemiatrix",
                    "Sadachbia",
                    "Sadaltager",
                    "Sulafat"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "google/gemini-3.1-flash-tts-preview",
                "response_format": "pcm",
                "voice": "Orus"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id aktual yang dikembalikan atau catatan pustaka media",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "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": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'google/gemini-3.1-flash-tts-preview', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'Orus', 'response_format': 'pcm'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\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/speech \\\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 response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "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": [
          "text"
        ],
        "label": "Ucapan",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "input_token": 2e-06,
            "output_token": 4e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000002",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.04000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.00004",
                "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"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "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.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000002",
            "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": "0.04000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.00004",
            "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"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemini-3.1-flash-tts-preview",
        "request_model_id": "google/gemini-3.1-flash-tts-preview",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemini 3.1 Flash TTS Preview",
    "price": {
      "in": null,
      "in_label": null,
      "out": 0.04,
      "out_label": "/ 1K tokens",
      "sort_in": null,
      "sort_out": 0.04,
      "varies": true
    },
    "short": "Google Gemini 3.1 Flash TTS Preview mengubah naskah tertulis menjadi audio ucapan yang ekspresif. Arahan bahasa alami, Audio Profiles pembicara, Director’s Notes, dan tag audio inline membentuk tempo, nada, serta aksen. Model ini memiliki dukungan bawaan untuk dialog serta mendukung lebih dari 70 bahasa, menggunakan format prompt dan audio 3.1."
  },
  "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": "Google Gemini 3.1 Flash TTS Preview mengubah naskah tertulis menjadi audio ucapan yang ekspresif. Arahan bahasa alami, Audio Profiles pembicara, Director’s Notes, dan tag audio inline membentuk tempo, nada, serta aksen. Model ini memiliki dukungan bawaan untuk dialog serta mendukung lebih dari 70 bahasa, menggunakan format prompt dan audio 3.1.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "84944ffb1664ad8bd6e7c68bd8522527035b17331aa698b388dee7875a9f3dae",
    "renderer_sha256": "2a0471475a29000c23db326ca1e315df73dee7524f6bc2907818ee3458813f2d"
  },
  "sourceRevision": "884e08d8bee96b59256adc9af6ab25191b794a3311bab2886285526da2938b40"
}
