{
  "aboutHtml": "<p>Voxtral TTS adalah model teks ke suara 4B Mistral AI untuk menghasilkan audio ucapan dari teks dan referensi suara. Halaman model pembuatnya mengidentifikasi edisi 2603 sebagai voxtral-mini-tts-2603, sedangkan kartu bobot yang dirilis bernama Voxtral 4B TTS 2603. Entri ini membahas rilis generasi ucapan tersebut, terpisah dari pemahaman audio Voxtral Small, transkripsi, dan model masukan waktu nyata yang lebih baru.</p><p>Ucapan ekspresif dan adaptasi suara</p><p>Model ini dirancang untuk menangkap jeda, irama, intonasi, aksen, dan ekspresi emosional suara referensi. Suara bertindak sebagai instruksi mengenai bunyi teks; ikhtisar pembuatnya tidak mewajibkan tag prosodi atau emosi terpisah, maupun transkrip rekaman referensi. Teks sumber menentukan apa yang dikatakan, sedangkan referensi audio memandu penyampaiannya.</p><p>Ikhtisar menjelaskan adaptasi suara dari audio sepanjang dua hingga tiga detik saja. Deskripsi arsitektur membahas prompt suara sepanjang lima hingga dua puluh lima detik. Pernyataan ini memiliki cakupan berbeda: contoh adaptasi singkat bukan keharusan menggunakan referensi sesingkat mungkin. Pilih ucapan yang jelas dan mewakili gaya serta aksen yang diinginkan untuk hasil akhir.</p><p>Kartu rilis mencakup dua puluh suara prasetel dan adaptasi ke suara baru. Alur kerja ucapan pembuatnya dapat memakai profil suara tersimpan atau klip referensi sekali pakai. Menyimpan profil memungkinkan referensi suara yang sama digunakan kembali dalam permintaan ucapan terpisah, sedangkan klip sekali pakai menyediakannya untuk tugas saat ini. Profil dan rekaman yang dihasilkan merupakan artefak berbeda.</p><p>Bahasa dan penyampaian lintas bahasa</p><p>Rilis ini mendukung bahasa Inggris, Prancis, Spanyol, Jerman, Italia, Portugis, Belanda, Arab, dan Hindi, dengan variasi dialek, transfer suara lintas bahasa, dan pencampuran kode yang dijelaskan pembuatnya. Untuk hasil terbaik, panduan ucapan menyarankan mencocokkan bahasa referensi dengan bahasa teks. Transfer lintas bahasa dapat mempertahankan aksen referensi sambil mengucapkan teks yang disiapkan dalam bahasa lain yang didukung.</p><p>Tugas narasi praktis dapat menggunakan gaya suara yang sama untuk penjelasan dalam berbagai bahasa yang didukung, dengan setiap teks disiapkan untuk pendengar yang dituju. Balasan asisten suara dapat memakai naskah percakapan singkat, alih-alih membacakan dokumen yang belum disunting. Model teks ke suara mewujudkan kata-kata yang disiapkan; tahap penerjemahan atau penulisan jawaban yang menghasilkan kata-kata tersebut merupakan langkah terpisah.</p><p>Menyiapkan teks</p><p>Panduan ucapan pembuatnya menyarankan teks yang dapat diucapkan. Tulis angka dan simbol dalam bentuk yang seharusnya diucapkan agar model tidak perlu memilih di antara beberapa kemungkinan pembacaan. Angka dapat berupa besaran, waktu, atau pengenal; tentukan susunan kata lisan yang dimaksud sebelum sintesis. Jabarkan singkatan ketika pelafalan penting, dengan huruf yang dipisahkan jika itulah pembacaan yang dimaksud.</p><p>Hindari pemformatan kaya, emoji, dan karakter khusus yang tidak akan diwujudkan sebagai konten lisan. Siapkan kalimat lengkap dengan tanda baca dan susunan kata yang diperlukan untuk penyampaian. Panduan menyarankan prompt di bawah 300 kata untuk hasil terbaik. Ini merupakan rekomendasi kualitas, bukan batas maksimum panjang masukan yang dinyatakan.</p><p>Untuk penjelasan prosedural, tulis tindakan dan kondisi dalam kalimat yang dapat diikuti pendengar. Untuk pengumuman, tempatkan informasi penting sebelum detail opsional. Untuk balasan suara, pertahankan jawaban faktual dan hapus format khusus tampilan atau notasi sumber yang tidak boleh diucapkan. Persiapan ini membuat naskah itu sendiri sesuai untuk audio sebelum referensi menentukan gayanya.</p><p>Streaming, keluaran, dan durasi</p><p>Pembuatnya mendokumentasikan penyampaian dasar dan streaming serta menjelaskan generasi bawaan hingga dua menit audio. Kartu bobot yang dirilis juga mencantumkan inferensi batch untuk menyiapkan beberapa tugas ucapan. Generasi layanan yang lebih panjang menggunakan interleaving, alih-alih menganggap satu potongan bawaan tidak berbatas. Untuk narasi yang lebih panjang, siapkan bagian yang koheren dan jaga konsistensi persiapan suara serta teks dengan alur kerja penyampaian yang menangani kelanjutan.</p><p>Kartu rilis menetapkan audio 24 kHz dan menyebut format keluaran WAV, PCM, FLAC, MP3, AAC, serta Opus. Panduan layanan ucapan membahas MP3 untuk penyampaian terkompresi, WAV untuk PCM tanpa kompresi, FLAC untuk kompresi tanpa kehilangan kualitas, serta PCM atau Opus untuk streaming. Pilih format yang didukung alur kerja yang terhubung dan sesuai untuk pemutar atau tahap pemrosesannya. Pemilihan format dan perilaku streaming terpisah dari adaptasi suara itu sendiri.</p><p>Arsitektur model dan batas praktis</p><p>Pengumuman menjelaskan arsitektur autoregresif dengan flow matching, yang memiliki inti dekoder Transformer berparameter 3,4 miliar, Transformer akustik berparameter 390 juta, dan codec audio neural berparameter 300 juta. Dekoder memprediksi konten semantik dan komponen akustik menghasilkan representasi ucapan, sedangkan codec menangani audio. Komponen ini menjelaskan label model sekitar 4B; komponen tersebut bukan bahasa masukan tambahan atau model generasi jawaban yang berbeda.</p><p>Keluaran praktis berupa rekaman hasil sintesis atau aliran audio yang dikaitkan dengan naskah yang disiapkan dan suara pilihan. Pertahankan kaitan itu saat menghasilkan beberapa bagian agar aplikasi dapat menyimpan, memutar, atau merangkai materi yang benar. Model menghasilkan audio, bukan transkrip, vektor pencarian semantik, atau jawaban faktual yang baru ditulis.</p><p>Pertahankan edisi ucapan 2603, bahasa yang didukung, dan gaya referensi. Sumber yang dibaca memberikan pernyataan bawaan dua menit dan rekomendasi persiapan di bawah 300 kata, tetapi tidak menetapkan batas maksimum karakter teks tersendiri atau total durasi rekaman yang dirangkai. Gunakan teks, suara, dan kebutuhan penyampaian sebenarnya untuk menentukan artefak audio akhir.</p>",
  "aboutText": "Voxtral TTS adalah model teks ke suara 4B Mistral AI untuk menghasilkan audio ucapan dari teks dan referensi suara. Halaman model pembuatnya mengidentifikasi edisi 2603 sebagai voxtral-mini-tts-2603, sedangkan kartu bobot yang dirilis bernama Voxtral 4B TTS 2603. Entri ini membahas rilis generasi ucapan tersebut, terpisah dari pemahaman audio Voxtral Small, transkripsi, dan model masukan waktu nyata yang lebih baru.\n\nUcapan ekspresif dan adaptasi suara\n\nModel ini dirancang untuk menangkap jeda, irama, intonasi, aksen, dan ekspresi emosional suara referensi. Suara bertindak sebagai instruksi mengenai bunyi teks; ikhtisar pembuatnya tidak mewajibkan tag prosodi atau emosi terpisah, maupun transkrip rekaman referensi. Teks sumber menentukan apa yang dikatakan, sedangkan referensi audio memandu penyampaiannya.\n\nIkhtisar menjelaskan adaptasi suara dari audio sepanjang dua hingga tiga detik saja. Deskripsi arsitektur membahas prompt suara sepanjang lima hingga dua puluh lima detik. Pernyataan ini memiliki cakupan berbeda: contoh adaptasi singkat bukan keharusan menggunakan referensi sesingkat mungkin. Pilih ucapan yang jelas dan mewakili gaya serta aksen yang diinginkan untuk hasil akhir.\n\nKartu rilis mencakup dua puluh suara prasetel dan adaptasi ke suara baru. Alur kerja ucapan pembuatnya dapat memakai profil suara tersimpan atau klip referensi sekali pakai. Menyimpan profil memungkinkan referensi suara yang sama digunakan kembali dalam permintaan ucapan terpisah, sedangkan klip sekali pakai menyediakannya untuk tugas saat ini. Profil dan rekaman yang dihasilkan merupakan artefak berbeda.\n\nBahasa dan penyampaian lintas bahasa\n\nRilis ini mendukung bahasa Inggris, Prancis, Spanyol, Jerman, Italia, Portugis, Belanda, Arab, dan Hindi, dengan variasi dialek, transfer suara lintas bahasa, dan pencampuran kode yang dijelaskan pembuatnya. Untuk hasil terbaik, panduan ucapan menyarankan mencocokkan bahasa referensi dengan bahasa teks. Transfer lintas bahasa dapat mempertahankan aksen referensi sambil mengucapkan teks yang disiapkan dalam bahasa lain yang didukung.\n\nTugas narasi praktis dapat menggunakan gaya suara yang sama untuk penjelasan dalam berbagai bahasa yang didukung, dengan setiap teks disiapkan untuk pendengar yang dituju. Balasan asisten suara dapat memakai naskah percakapan singkat, alih-alih membacakan dokumen yang belum disunting. Model teks ke suara mewujudkan kata-kata yang disiapkan; tahap penerjemahan atau penulisan jawaban yang menghasilkan kata-kata tersebut merupakan langkah terpisah.\n\nMenyiapkan teks\n\nPanduan ucapan pembuatnya menyarankan teks yang dapat diucapkan. Tulis angka dan simbol dalam bentuk yang seharusnya diucapkan agar model tidak perlu memilih di antara beberapa kemungkinan pembacaan. Angka dapat berupa besaran, waktu, atau pengenal; tentukan susunan kata lisan yang dimaksud sebelum sintesis. Jabarkan singkatan ketika pelafalan penting, dengan huruf yang dipisahkan jika itulah pembacaan yang dimaksud.\n\nHindari pemformatan kaya, emoji, dan karakter khusus yang tidak akan diwujudkan sebagai konten lisan. Siapkan kalimat lengkap dengan tanda baca dan susunan kata yang diperlukan untuk penyampaian. Panduan menyarankan prompt di bawah 300 kata untuk hasil terbaik. Ini merupakan rekomendasi kualitas, bukan batas maksimum panjang masukan yang dinyatakan.\n\nUntuk penjelasan prosedural, tulis tindakan dan kondisi dalam kalimat yang dapat diikuti pendengar. Untuk pengumuman, tempatkan informasi penting sebelum detail opsional. Untuk balasan suara, pertahankan jawaban faktual dan hapus format khusus tampilan atau notasi sumber yang tidak boleh diucapkan. Persiapan ini membuat naskah itu sendiri sesuai untuk audio sebelum referensi menentukan gayanya.\n\nStreaming, keluaran, dan durasi\n\nPembuatnya mendokumentasikan penyampaian dasar dan streaming serta menjelaskan generasi bawaan hingga dua menit audio. Kartu bobot yang dirilis juga mencantumkan inferensi batch untuk menyiapkan beberapa tugas ucapan. Generasi layanan yang lebih panjang menggunakan interleaving, alih-alih menganggap satu potongan bawaan tidak berbatas. Untuk narasi yang lebih panjang, siapkan bagian yang koheren dan jaga konsistensi persiapan suara serta teks dengan alur kerja penyampaian yang menangani kelanjutan.\n\nKartu rilis menetapkan audio 24 kHz dan menyebut format keluaran WAV, PCM, FLAC, MP3, AAC, serta Opus. Panduan layanan ucapan membahas MP3 untuk penyampaian terkompresi, WAV untuk PCM tanpa kompresi, FLAC untuk kompresi tanpa kehilangan kualitas, serta PCM atau Opus untuk streaming. Pilih format yang didukung alur kerja yang terhubung dan sesuai untuk pemutar atau tahap pemrosesannya. Pemilihan format dan perilaku streaming terpisah dari adaptasi suara itu sendiri.\n\nArsitektur model dan batas praktis\n\nPengumuman menjelaskan arsitektur autoregresif dengan flow matching, yang memiliki inti dekoder Transformer berparameter 3,4 miliar, Transformer akustik berparameter 390 juta, dan codec audio neural berparameter 300 juta. Dekoder memprediksi konten semantik dan komponen akustik menghasilkan representasi ucapan, sedangkan codec menangani audio. Komponen ini menjelaskan label model sekitar 4B; komponen tersebut bukan bahasa masukan tambahan atau model generasi jawaban yang berbeda.\n\nKeluaran praktis berupa rekaman hasil sintesis atau aliran audio yang dikaitkan dengan naskah yang disiapkan dan suara pilihan. Pertahankan kaitan itu saat menghasilkan beberapa bagian agar aplikasi dapat menyimpan, memutar, atau merangkai materi yang benar. Model menghasilkan audio, bukan transkrip, vektor pencarian semantik, atau jawaban faktual yang baru ditulis.\n\nPertahankan edisi ucapan 2603, bahasa yang didukung, dan gaya referensi. Sumber yang dibaca memberikan pernyataan bawaan dua menit dan rekomendasi persiapan di bawah 300 kata, tetapi tidak menetapkan batas maksimum karakter teks tersendiri atau total durasi rekaman yang dirangkai. Gunakan teks, suara, dan kebutuhan penyampaian sebenarnya untuk menentukan artefak audio akhir.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "499af113eb1ee503f3835f0ecff0ecd9f9c7337cbb5231f4d9958aef0cd136fe",
    "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\">•</span><h2 id=\"sheet-title\">Mistral: Voxtral Mini TTS</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Tutup\">×</button></div><div class=\"idline\"><span>Mistral /</span><code>mistralai/voxtral-mini-tts-2603</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|mistralai%2Fvoxtral-mini-tts-2603\">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\">Voxtral TTS adalah model generasi ucapan 4B dari Mistral AI dengan adaptasi suara berbasis referensi dalam sembilan bahasa. Model ini mengubah teks yang disiapkan menjadi audio ekspresif, mendukung prompt suara sekali pakai atau yang dapat digunakan kembali serta streaming, dan menghasilkan keluaran 24 kHz dalam format audio yang didokumentasikan.</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>Voxtral TTS adalah model teks ke suara 4B Mistral AI untuk menghasilkan audio ucapan dari teks dan referensi suara. Halaman model pembuatnya mengidentifikasi edisi 2603 sebagai voxtral-mini-tts-2603, sedangkan kartu bobot yang dirilis bernama Voxtral 4B TTS 2603. Entri ini membahas rilis generasi ucapan tersebut, terpisah dari pemahaman audio Voxtral Small, transkripsi, dan model masukan waktu nyata yang lebih baru.</p><p>Ucapan ekspresif dan adaptasi suara</p><p>Model ini dirancang untuk menangkap jeda, irama, intonasi, aksen, dan ekspresi emosional suara referensi. Suara bertindak sebagai instruksi mengenai bunyi teks; ikhtisar pembuatnya tidak mewajibkan tag prosodi atau emosi terpisah, maupun transkrip rekaman referensi. Teks sumber menentukan apa yang dikatakan, sedangkan referensi audio memandu penyampaiannya.</p><p>Ikhtisar menjelaskan adaptasi suara dari audio sepanjang dua hingga tiga detik saja. Deskripsi arsitektur membahas prompt suara sepanjang lima hingga dua puluh lima detik. Pernyataan ini memiliki cakupan berbeda: contoh adaptasi singkat bukan keharusan menggunakan referensi sesingkat mungkin. Pilih ucapan yang jelas dan mewakili gaya serta aksen yang diinginkan untuk hasil akhir.</p><p>Kartu rilis mencakup dua puluh suara prasetel dan adaptasi ke suara baru. Alur kerja ucapan pembuatnya dapat memakai profil suara tersimpan atau klip referensi sekali pakai. Menyimpan profil memungkinkan referensi suara yang sama digunakan kembali dalam permintaan ucapan terpisah, sedangkan klip sekali pakai menyediakannya untuk tugas saat ini. Profil dan rekaman yang dihasilkan merupakan artefak berbeda.</p><p>Bahasa dan penyampaian lintas bahasa</p><p>Rilis ini mendukung bahasa Inggris, Prancis, Spanyol, Jerman, Italia, Portugis, Belanda, Arab, dan Hindi, dengan variasi dialek, transfer suara lintas bahasa, dan pencampuran kode yang dijelaskan pembuatnya. Untuk hasil terbaik, panduan ucapan menyarankan mencocokkan bahasa referensi dengan bahasa teks. Transfer lintas bahasa dapat mempertahankan aksen referensi sambil mengucapkan teks yang disiapkan dalam bahasa lain yang didukung.</p><p>Tugas narasi praktis dapat menggunakan gaya suara yang sama untuk penjelasan dalam berbagai bahasa yang didukung, dengan setiap teks disiapkan untuk pendengar yang dituju. Balasan asisten suara dapat memakai naskah percakapan singkat, alih-alih membacakan dokumen yang belum disunting. Model teks ke suara mewujudkan kata-kata yang disiapkan; tahap penerjemahan atau penulisan jawaban yang menghasilkan kata-kata tersebut merupakan langkah terpisah.</p><p>Menyiapkan teks</p><p>Panduan ucapan pembuatnya menyarankan teks yang dapat diucapkan. Tulis angka dan simbol dalam bentuk yang seharusnya diucapkan agar model tidak perlu memilih di antara beberapa kemungkinan pembacaan. Angka dapat berupa besaran, waktu, atau pengenal; tentukan susunan kata lisan yang dimaksud sebelum sintesis. Jabarkan singkatan ketika pelafalan penting, dengan huruf yang dipisahkan jika itulah pembacaan yang dimaksud.</p><p>Hindari pemformatan kaya, emoji, dan karakter khusus yang tidak akan diwujudkan sebagai konten lisan. Siapkan kalimat lengkap dengan tanda baca dan susunan kata yang diperlukan untuk penyampaian. Panduan menyarankan prompt di bawah 300 kata untuk hasil terbaik. Ini merupakan rekomendasi kualitas, bukan batas maksimum panjang masukan yang dinyatakan.</p><p>Untuk penjelasan prosedural, tulis tindakan dan kondisi dalam kalimat yang dapat diikuti pendengar. Untuk pengumuman, tempatkan informasi penting sebelum detail opsional. Untuk balasan suara, pertahankan jawaban faktual dan hapus format khusus tampilan atau notasi sumber yang tidak boleh diucapkan. Persiapan ini membuat naskah itu sendiri sesuai untuk audio sebelum referensi menentukan gayanya.</p><p>Streaming, keluaran, dan durasi</p><p>Pembuatnya mendokumentasikan penyampaian dasar dan streaming serta menjelaskan generasi bawaan hingga dua menit audio. Kartu bobot yang dirilis juga mencantumkan inferensi batch untuk menyiapkan beberapa tugas ucapan. Generasi layanan yang lebih panjang menggunakan interleaving, alih-alih menganggap satu potongan bawaan tidak berbatas. Untuk narasi yang lebih panjang, siapkan bagian yang koheren dan jaga konsistensi persiapan suara serta teks dengan alur kerja penyampaian yang menangani kelanjutan.</p><p>Kartu rilis menetapkan audio 24 kHz dan menyebut format keluaran WAV, PCM, FLAC, MP3, AAC, serta Opus. Panduan layanan ucapan membahas MP3 untuk penyampaian terkompresi, WAV untuk PCM tanpa kompresi, FLAC untuk kompresi tanpa kehilangan kualitas, serta PCM atau Opus untuk streaming. Pilih format yang didukung alur kerja yang terhubung dan sesuai untuk pemutar atau tahap pemrosesannya. Pemilihan format dan perilaku streaming terpisah dari adaptasi suara itu sendiri.</p><p>Arsitektur model dan batas praktis</p><p>Pengumuman menjelaskan arsitektur autoregresif dengan flow matching, yang memiliki inti dekoder Transformer berparameter 3,4 miliar, Transformer akustik berparameter 390 juta, dan codec audio neural berparameter 300 juta. Dekoder memprediksi konten semantik dan komponen akustik menghasilkan representasi ucapan, sedangkan codec menangani audio. Komponen ini menjelaskan label model sekitar 4B; komponen tersebut bukan bahasa masukan tambahan atau model generasi jawaban yang berbeda.</p><p>Keluaran praktis berupa rekaman hasil sintesis atau aliran audio yang dikaitkan dengan naskah yang disiapkan dan suara pilihan. Pertahankan kaitan itu saat menghasilkan beberapa bagian agar aplikasi dapat menyimpan, memutar, atau merangkai materi yang benar. Model menghasilkan audio, bukan transkrip, vektor pencarian semantik, atau jawaban faktual yang baru ditulis.</p><p>Pertahankan edisi ucapan 2603, bahasa yang didukung, dan gaya referensi. Sumber yang dibaca memberikan pernyataan bawaan dua menit dan rekomendasi persiapan di bawah 300 kata, tetapi tidak menetapkan batas maksimum karakter teks tersendiri atau total durasi rekaman yang dirangkai. Gunakan teks, suara, dan kebutuhan penyampaian sebenarnya untuk menentukan artefak audio akhir.</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 · Sintesis 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><div><dt>Format keluaran</dt><dd>mp3</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 data-parameter-availability=\"source_interface\"><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>mistralai/voxtral-mini-tts-2603</div></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><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><div>Satuan: karakter Unicode</div></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><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>en_paul_sad, en_paul_neutral, en_paul_happy, en_paul_frustrated, en_paul_excited, en_paul_confident, en_paul_cheerful, en_paul_angry, gb_oliver_neutral, gb_oliver_sad, gb_oliver_excited, gb_oliver_curious, gb_oliver_confident, gb_oliver_cheerful, gb_oliver_angry, gb_jane_sarcasm, gb_jane_confused, gb_jane_shameful, gb_jane_sad, gb_jane_neutral, gb_jane_jealousy, gb_jane_frustrated, gb_jane_curious, gb_jane_confident, fr_marie_sad, fr_marie_neutral, fr_marie_happy, fr_marie_excited, fr_marie_curious, fr_marie_angry</div></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><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>Wajib</td><td data-cell-label=\"Nilai &amp; batasan\"><span class=\"card-cell-label\">Nilai &amp; batasan</span><div>mp3</div></td><td data-cell-label=\"Bawaan\" data-default=\"unspecified\"><span class=\"card-cell-label\">Bawaan</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinasi bahan masukan</summary><p class=\"note-s\"><b>text_to_speech</b> · Wajib: input</p></details><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, response_format</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>voice_ids</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>en_paul_sad, en_paul_neutral, en_paul_happy, en_paul_frustrated, en_paul_excited, en_paul_confident, en_paul_cheerful, en_paul_angry, gb_oliver_neutral, gb_oliver_sad, gb_oliver_excited, gb_oliver_curious, gb_oliver_confident, gb_oliver_cheerful, gb_oliver_angry, gb_jane_sarcasm, gb_jane_confused, gb_jane_shameful, gb_jane_sad, gb_jane_neutral, gb_jane_jealousy, gb_jane_frustrated, gb_jane_curious, gb_jane_confident, fr_marie_sad, fr_marie_neutral, fr_marie_happy, fr_marie_excited, fr_marie_curious, fr_marie_angry</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>response_format</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>mp3</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>max_input_characters</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>other_options</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>input</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>teks UTF-8 persis; jumlah karakter Unicode tanpa normalisasi</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><p class=\"note-s\">Pilih suara yang tepat dari profil model ini.</p><p class=\"note-s\">Karakter masukan dan detik audio merupakan satuan pengukuran yang berbeda.</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>Jumlah yang ditagihkan</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=\"Jumlah yang ditagihkan\"><span class=\"card-cell-label\">Jumlah yang ditagihkan</span>—</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>Ultra</th><td data-cell-label=\"Jadwal tarif\"><span class=\"card-cell-label\">Jadwal tarif</span>—</td><td data-cell-label=\"Jumlah yang ditagihkan\"><span class=\"card-cell-label\">Jumlah yang ditagihkan</span>Setiap titik kode Unicode dihitung sebagai satu karakter, termasuk karakter Han.</td><td data-cell-label=\"Satuan penagihan\"><span class=\"card-cell-label\">Satuan penagihan</span>per 1K karakter masukan</td><td data-cell-label=\"Biaya\"><span class=\"card-cell-label\">Biaya</span><div><span>Masukan · karakter masukan</span> <b>$0.032</b> <span class=\"price-unit\">per 1K karakter masukan</span></div></td></tr></tbody></table></div></div><div data-declared-reference-pricing><h4>Detail tarif referensi</h4><p class=\"note-s\">Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Mistral: Voxtral Mini TTS</summary><h4>Harga menurut konfigurasi</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Kondisi penagihan</th><th>Biaya</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Mistral: Voxtral Mini TTS · Konfigurasi bawaan</th><td data-cell-label=\"Kondisi penagihan\"><span class=\"card-cell-label\">Kondisi penagihan</span>Konfigurasi bawaan</td><td data-cell-label=\"Biaya\"><span class=\"card-cell-label\">Biaya</span><div><span>Masukan · Karakter masukan</span> <b>US$0,000032</b> <span class=\"price-unit\">per karakter masukan</span></div></td></tr></tbody></table></div></details></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 · Sintesis 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-1943-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1943-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</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-1943-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1943-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;mistralai/voxtral-mini-tts-2603&quot;, &quot;input&quot;: &quot;Good afternoon! This is a short voice take.&quot;}&#39;)\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nallowed=json.loads(&#39;[&quot;en_paul_sad&quot;, &quot;en_paul_neutral&quot;, &quot;en_paul_happy&quot;, &quot;en_paul_frustrated&quot;, &quot;en_paul_excited&quot;, &quot;en_paul_confident&quot;, &quot;en_paul_cheerful&quot;, &quot;en_paul_angry&quot;, &quot;gb_oliver_neutral&quot;, &quot;gb_oliver_sad&quot;, &quot;gb_oliver_excited&quot;, &quot;gb_oliver_curious&quot;, &quot;gb_oliver_confident&quot;, &quot;gb_oliver_cheerful&quot;, &quot;gb_oliver_angry&quot;, &quot;gb_jane_sarcasm&quot;, &quot;gb_jane_confused&quot;, &quot;gb_jane_shameful&quot;, &quot;gb_jane_sad&quot;, &quot;gb_jane_neutral&quot;, &quot;gb_jane_jealousy&quot;, &quot;gb_jane_frustrated&quot;, &quot;gb_jane_curious&quot;, &quot;gb_jane_confident&quot;, &quot;fr_marie_sad&quot;, &quot;fr_marie_neutral&quot;, &quot;fr_marie_happy&quot;, &quot;fr_marie_excited&quot;, &quot;fr_marie_curious&quot;, &quot;fr_marie_angry&quot;]&#39;)\nif voice not in allowed: raise SystemExit(&quot;Choose an accepted voice ID from this exact model profile&quot;)\np[&quot;voice&quot;]=voice\np[&quot;response_format&quot;]=&quot;mp3&quot;\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Terima dan simpan hasil</h3><h4>Ailoot Ultra · Sintesis ucapan</h4><p class=\"note-s\">mp3</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>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-1944-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-0\" aria-selected=\"true\" tabindex=\"0\">Pustaka media</button><button class=\"cg-tab\" id=\"model-code-1944-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Status tugas</button><button class=\"cg-tab\" id=\"model-code-1944-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Detail aset</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-1944-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-assets.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1944-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_MEDIA_TASK_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/tasks/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-task.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-task.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1944-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_ASSET_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/assets/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-asset.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-asset.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>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 hasil biner dan header secara lengkap. Jika JSON atau beberapa keluaran dikembalikan, simpan setiap item data dan ambil data dari setiap URL aset bertanda tangan yang benar-benar dikembalikan.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jika respons asli perlu diperiksa</h5><p class=\"note-s\">Simpan operation_id/X-Client-Request-ID asli untuk rekonsiliasi tanpa pengiriman ulang; tidak ada rute polling khusus audio.</p></div><details class=\"card-about\" data-output-fields><summary>Kolom respons</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Kolom</th><th>Jenis</th></tr></thead><tbody><tr><th data-cell-label=\"Kolom\" scope=\"row\"><span class=\"card-cell-label\">Kolom</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>bytes</td></tr><tr><th data-cell-label=\"Kolom\" scope=\"row\"><span class=\"card-cell-label\">Kolom</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Kesalahan dan langkah berikutnya</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respons</th><th>Kondisi</th><th>Langkah berikutnya</th></tr></thead><tbody><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Kondisi\"><span class=\"card-cell-label\">Kondisi</span>Bidang wajib, representasi materi, atau nilai parameter tidak valid</td><td data-cell-label=\"Langkah berikutnya\"><span class=\"card-cell-label\">Langkah berikutnya</span>Perbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span><code>server_error</code></th><td data-cell-label=\"Kondisi\"><span class=\"card-cell-label\">Kondisi</span>Respons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa</td><td data-cell-label=\"Langkah berikutnya\"><span class=\"card-cell-label\">Langkah berikutnya</span>Simpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias model</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=mistralai%2Fvoxtral-mini-tts-2603&amp;route=Ultra&amp;caller=mistralai%2Fvoxtral-mini-tts-2603&amp;fmt=speech\"><code>mistralai/voxtral-mini-tts-2603</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=mistralai%2Fvoxtral-mini-tts-2603&amp;route=Ultra&amp;caller=mistralai%2Fvoxtral-mini-tts-2603&amp;fmt=speech\"><code>mistralai/voxtral-mini-tts-2603</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "mistralai/voxtral-mini-tts-2603",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|mistralai%2Fvoxtral-mini-tts-2603",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Bidang wajib, representasi materi, atau nilai parameter tidak valid",
                "http_status": 400,
                "recovery": "Perbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Respons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa",
                "http_status": null,
                "recovery": "Simpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Simpan operation_id/X-Client-Request-ID asli untuk rekonsiliasi tanpa pengiriman ulang; tidak ada rute polling khusus audio."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Simpan hasil biner dan header secara lengkap. Jika JSON atau beberapa keluaran dikembalikan, simpan setiap item data dan ambil data dari setiap URL aset bertanda tangan yang benar-benar dikembalikan.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mistralai/voxtral-mini-tts-2603"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "karakter Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "en_paul_sad",
                  "en_paul_neutral",
                  "en_paul_happy",
                  "en_paul_frustrated",
                  "en_paul_excited",
                  "en_paul_confident",
                  "en_paul_cheerful",
                  "en_paul_angry",
                  "gb_oliver_neutral",
                  "gb_oliver_sad",
                  "gb_oliver_excited",
                  "gb_oliver_curious",
                  "gb_oliver_confident",
                  "gb_oliver_cheerful",
                  "gb_oliver_angry",
                  "gb_jane_sarcasm",
                  "gb_jane_confused",
                  "gb_jane_shameful",
                  "gb_jane_sad",
                  "gb_jane_neutral",
                  "gb_jane_jealousy",
                  "gb_jane_frustrated",
                  "gb_jane_curious",
                  "gb_jane_confident",
                  "fr_marie_sad",
                  "fr_marie_neutral",
                  "fr_marie_happy",
                  "fr_marie_excited",
                  "fr_marie_curious",
                  "fr_marie_angry"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Pilih suara yang tepat dari profil model ini.",
            "Karakter masukan dan detik audio merupakan satuan pengukuran yang berbeda."
          ],
          "input": {
            "content_type": "application/json",
            "input": "teks UTF-8 persis; jumlah karakter Unicode tanpa normalisasi",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "en_paul_sad",
              "en_paul_neutral",
              "en_paul_happy",
              "en_paul_frustrated",
              "en_paul_excited",
              "en_paul_confident",
              "en_paul_cheerful",
              "en_paul_angry",
              "gb_oliver_neutral",
              "gb_oliver_sad",
              "gb_oliver_excited",
              "gb_oliver_curious",
              "gb_oliver_confident",
              "gb_oliver_cheerful",
              "gb_oliver_angry",
              "gb_jane_sarcasm",
              "gb_jane_confused",
              "gb_jane_shameful",
              "gb_jane_sad",
              "gb_jane_neutral",
              "gb_jane_jealousy",
              "gb_jane_frustrated",
              "gb_jane_curious",
              "gb_jane_confident",
              "fr_marie_sad",
              "fr_marie_neutral",
              "fr_marie_happy",
              "fr_marie_excited",
              "fr_marie_curious",
              "fr_marie_angry"
            ]
          },
          "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": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "20ebfeb88167b8c33fea",
            "label": "Mistral: Voxtral Mini TTS",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Konfigurasi bawaan"
                },
                "label": "Mistral: Voxtral Mini TTS · Konfigurasi bawaan",
                "units": [
                  {
                    "amount": "0.000032",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "3ceae9e888e4cc9cd6e6009e",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"mistralai/voxtral-mini-tts-2603\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"en_paul_sad\", \"en_paul_neutral\", \"en_paul_happy\", \"en_paul_frustrated\", \"en_paul_excited\", \"en_paul_confident\", \"en_paul_cheerful\", \"en_paul_angry\", \"gb_oliver_neutral\", \"gb_oliver_sad\", \"gb_oliver_excited\", \"gb_oliver_curious\", \"gb_oliver_confident\", \"gb_oliver_cheerful\", \"gb_oliver_angry\", \"gb_jane_sarcasm\", \"gb_jane_confused\", \"gb_jane_shameful\", \"gb_jane_sad\", \"gb_jane_neutral\", \"gb_jane_jealousy\", \"gb_jane_frustrated\", \"gb_jane_curious\", \"gb_jane_confident\", \"fr_marie_sad\", \"fr_marie_neutral\", \"fr_marie_happy\", \"fr_marie_excited\", \"fr_marie_curious\", \"fr_marie_angry\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3.2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    }
  ],
  "model_id": "mistralai/voxtral-mini-tts-2603",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "bc723b96ac82a2399455f457025c66cf85dda62e73673ec927f52d851a619569",
    "input_html_sha256": "dcea3202f0d6c687812065e6b5c37cda59888224beb6186d5dd60e500ebe2578",
    "private_audit_sha256": "f7e8c90b3cfd0fc7a693ca4b81d19c9d43e68376bf49c37da9e60130c8969c8c",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/id/mistralai-voxtral-mini-tts-2603/",
    "description": "Voxtral TTS adalah model generasi ucapan 4B dari Mistral AI dengan adaptasi suara berbasis referensi dalam sembilan bahasa. Model ini mengubah teks yang disiapkan menjadi audio ekspresif, mendukung prompt suara sekali pakai atau yang dapat digunakan kembali serta streaming, dan menghasilkan keluaran 24 kHz dalam format audio yang didokumentasikan.",
    "locale": "id",
    "md_url": "https://ailoot.ai/models/id/mistralai-voxtral-mini-tts-2603/index.md",
    "title": "Mistral: Voxtral Mini TTS — Ailoot",
    "url": "https://ailoot.ai/models/id/mistralai-voxtral-mini-tts-2603/"
  },
  "rawModel": {
    "about": "Voxtral TTS adalah model teks ke suara 4B Mistral AI untuk menghasilkan audio ucapan dari teks dan referensi suara. Halaman model pembuatnya mengidentifikasi edisi 2603 sebagai voxtral-mini-tts-2603, sedangkan kartu bobot yang dirilis bernama Voxtral 4B TTS 2603. Entri ini membahas rilis generasi ucapan tersebut, terpisah dari pemahaman audio Voxtral Small, transkripsi, dan model masukan waktu nyata yang lebih baru.\n\nUcapan ekspresif dan adaptasi suara\n\nModel ini dirancang untuk menangkap jeda, irama, intonasi, aksen, dan ekspresi emosional suara referensi. Suara bertindak sebagai instruksi mengenai bunyi teks; ikhtisar pembuatnya tidak mewajibkan tag prosodi atau emosi terpisah, maupun transkrip rekaman referensi. Teks sumber menentukan apa yang dikatakan, sedangkan referensi audio memandu penyampaiannya.\n\nIkhtisar menjelaskan adaptasi suara dari audio sepanjang dua hingga tiga detik saja. Deskripsi arsitektur membahas prompt suara sepanjang lima hingga dua puluh lima detik. Pernyataan ini memiliki cakupan berbeda: contoh adaptasi singkat bukan keharusan menggunakan referensi sesingkat mungkin. Pilih ucapan yang jelas dan mewakili gaya serta aksen yang diinginkan untuk hasil akhir.\n\nKartu rilis mencakup dua puluh suara prasetel dan adaptasi ke suara baru. Alur kerja ucapan pembuatnya dapat memakai profil suara tersimpan atau klip referensi sekali pakai. Menyimpan profil memungkinkan referensi suara yang sama digunakan kembali dalam permintaan ucapan terpisah, sedangkan klip sekali pakai menyediakannya untuk tugas saat ini. Profil dan rekaman yang dihasilkan merupakan artefak berbeda.\n\nBahasa dan penyampaian lintas bahasa\n\nRilis ini mendukung bahasa Inggris, Prancis, Spanyol, Jerman, Italia, Portugis, Belanda, Arab, dan Hindi, dengan variasi dialek, transfer suara lintas bahasa, dan pencampuran kode yang dijelaskan pembuatnya. Untuk hasil terbaik, panduan ucapan menyarankan mencocokkan bahasa referensi dengan bahasa teks. Transfer lintas bahasa dapat mempertahankan aksen referensi sambil mengucapkan teks yang disiapkan dalam bahasa lain yang didukung.\n\nTugas narasi praktis dapat menggunakan gaya suara yang sama untuk penjelasan dalam berbagai bahasa yang didukung, dengan setiap teks disiapkan untuk pendengar yang dituju. Balasan asisten suara dapat memakai naskah percakapan singkat, alih-alih membacakan dokumen yang belum disunting. Model teks ke suara mewujudkan kata-kata yang disiapkan; tahap penerjemahan atau penulisan jawaban yang menghasilkan kata-kata tersebut merupakan langkah terpisah.\n\nMenyiapkan teks\n\nPanduan ucapan pembuatnya menyarankan teks yang dapat diucapkan. Tulis angka dan simbol dalam bentuk yang seharusnya diucapkan agar model tidak perlu memilih di antara beberapa kemungkinan pembacaan. Angka dapat berupa besaran, waktu, atau pengenal; tentukan susunan kata lisan yang dimaksud sebelum sintesis. Jabarkan singkatan ketika pelafalan penting, dengan huruf yang dipisahkan jika itulah pembacaan yang dimaksud.\n\nHindari pemformatan kaya, emoji, dan karakter khusus yang tidak akan diwujudkan sebagai konten lisan. Siapkan kalimat lengkap dengan tanda baca dan susunan kata yang diperlukan untuk penyampaian. Panduan menyarankan prompt di bawah 300 kata untuk hasil terbaik. Ini merupakan rekomendasi kualitas, bukan batas maksimum panjang masukan yang dinyatakan.\n\nUntuk penjelasan prosedural, tulis tindakan dan kondisi dalam kalimat yang dapat diikuti pendengar. Untuk pengumuman, tempatkan informasi penting sebelum detail opsional. Untuk balasan suara, pertahankan jawaban faktual dan hapus format khusus tampilan atau notasi sumber yang tidak boleh diucapkan. Persiapan ini membuat naskah itu sendiri sesuai untuk audio sebelum referensi menentukan gayanya.\n\nStreaming, keluaran, dan durasi\n\nPembuatnya mendokumentasikan penyampaian dasar dan streaming serta menjelaskan generasi bawaan hingga dua menit audio. Kartu bobot yang dirilis juga mencantumkan inferensi batch untuk menyiapkan beberapa tugas ucapan. Generasi layanan yang lebih panjang menggunakan interleaving, alih-alih menganggap satu potongan bawaan tidak berbatas. Untuk narasi yang lebih panjang, siapkan bagian yang koheren dan jaga konsistensi persiapan suara serta teks dengan alur kerja penyampaian yang menangani kelanjutan.\n\nKartu rilis menetapkan audio 24 kHz dan menyebut format keluaran WAV, PCM, FLAC, MP3, AAC, serta Opus. Panduan layanan ucapan membahas MP3 untuk penyampaian terkompresi, WAV untuk PCM tanpa kompresi, FLAC untuk kompresi tanpa kehilangan kualitas, serta PCM atau Opus untuk streaming. Pilih format yang didukung alur kerja yang terhubung dan sesuai untuk pemutar atau tahap pemrosesannya. Pemilihan format dan perilaku streaming terpisah dari adaptasi suara itu sendiri.\n\nArsitektur model dan batas praktis\n\nPengumuman menjelaskan arsitektur autoregresif dengan flow matching, yang memiliki inti dekoder Transformer berparameter 3,4 miliar, Transformer akustik berparameter 390 juta, dan codec audio neural berparameter 300 juta. Dekoder memprediksi konten semantik dan komponen akustik menghasilkan representasi ucapan, sedangkan codec menangani audio. Komponen ini menjelaskan label model sekitar 4B; komponen tersebut bukan bahasa masukan tambahan atau model generasi jawaban yang berbeda.\n\nKeluaran praktis berupa rekaman hasil sintesis atau aliran audio yang dikaitkan dengan naskah yang disiapkan dan suara pilihan. Pertahankan kaitan itu saat menghasilkan beberapa bagian agar aplikasi dapat menyimpan, memutar, atau merangkai materi yang benar. Model menghasilkan audio, bukan transkrip, vektor pencarian semantik, atau jawaban faktual yang baru ditulis.\n\nPertahankan edisi ucapan 2603, bahasa yang didukung, dan gaya referensi. Sumber yang dibaca memberikan pernyataan bawaan dua menit dan rekomendasi persiapan di bawah 300 kata, tetapi tidak menetapkan batas maksimum karakter teks tersendiri atau total durasi rekaman yang dirangkai. Gunakan teks, suara, dan kebutuhan penyampaian sebenarnya untuk menentukan artefak audio akhir.",
    "alias_of": null,
    "aliases": [],
    "author": "Mistral",
    "available": null,
    "canonical_model": "mistralai/voxtral-mini-tts-2603",
    "capabilities": {
      "context_length": 4096,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ],
        "summary": "Informasi lengkap harga konfigurasi tersedia di bagian detail."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "mistralai/voxtral-mini-tts-2603",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Bidang wajib, representasi materi, atau nilai parameter tidak valid",
                "http_status": 400,
                "recovery": "Perbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Respons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa",
                "http_status": null,
                "recovery": "Simpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Simpan operation_id/X-Client-Request-ID asli untuk rekonsiliasi tanpa pengiriman ulang; tidak ada rute polling khusus audio."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Simpan hasil biner dan header secara lengkap. Jika JSON atau beberapa keluaran dikembalikan, simpan setiap item data dan ambil data dari setiap URL aset bertanda tangan yang benar-benar dikembalikan.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mistralai/voxtral-mini-tts-2603"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "karakter Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "en_paul_sad",
                  "en_paul_neutral",
                  "en_paul_happy",
                  "en_paul_frustrated",
                  "en_paul_excited",
                  "en_paul_confident",
                  "en_paul_cheerful",
                  "en_paul_angry",
                  "gb_oliver_neutral",
                  "gb_oliver_sad",
                  "gb_oliver_excited",
                  "gb_oliver_curious",
                  "gb_oliver_confident",
                  "gb_oliver_cheerful",
                  "gb_oliver_angry",
                  "gb_jane_sarcasm",
                  "gb_jane_confused",
                  "gb_jane_shameful",
                  "gb_jane_sad",
                  "gb_jane_neutral",
                  "gb_jane_jealousy",
                  "gb_jane_frustrated",
                  "gb_jane_curious",
                  "gb_jane_confident",
                  "fr_marie_sad",
                  "fr_marie_neutral",
                  "fr_marie_happy",
                  "fr_marie_excited",
                  "fr_marie_curious",
                  "fr_marie_angry"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Pilih suara yang tepat dari profil model ini.",
            "Karakter masukan dan detik audio merupakan satuan pengukuran yang berbeda."
          ],
          "input": {
            "content_type": "application/json",
            "input": "teks UTF-8 persis; jumlah karakter Unicode tanpa normalisasi",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "en_paul_sad",
              "en_paul_neutral",
              "en_paul_happy",
              "en_paul_frustrated",
              "en_paul_excited",
              "en_paul_confident",
              "en_paul_cheerful",
              "en_paul_angry",
              "gb_oliver_neutral",
              "gb_oliver_sad",
              "gb_oliver_excited",
              "gb_oliver_curious",
              "gb_oliver_confident",
              "gb_oliver_cheerful",
              "gb_oliver_angry",
              "gb_jane_sarcasm",
              "gb_jane_confused",
              "gb_jane_shameful",
              "gb_jane_sad",
              "gb_jane_neutral",
              "gb_jane_jealousy",
              "gb_jane_frustrated",
              "gb_jane_curious",
              "gb_jane_confident",
              "fr_marie_sad",
              "fr_marie_neutral",
              "fr_marie_happy",
              "fr_marie_excited",
              "fr_marie_curious",
              "fr_marie_angry"
            ]
          },
          "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": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "20ebfeb88167b8c33fea",
            "label": "Mistral: Voxtral Mini TTS",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Konfigurasi bawaan"
                },
                "label": "Mistral: Voxtral Mini TTS · Konfigurasi bawaan",
                "units": [
                  {
                    "amount": "0.000032",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "3ceae9e888e4cc9cd6e6009e",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"mistralai/voxtral-mini-tts-2603\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"en_paul_sad\", \"en_paul_neutral\", \"en_paul_happy\", \"en_paul_frustrated\", \"en_paul_excited\", \"en_paul_confident\", \"en_paul_cheerful\", \"en_paul_angry\", \"gb_oliver_neutral\", \"gb_oliver_sad\", \"gb_oliver_excited\", \"gb_oliver_curious\", \"gb_oliver_confident\", \"gb_oliver_cheerful\", \"gb_oliver_angry\", \"gb_jane_sarcasm\", \"gb_jane_confused\", \"gb_jane_shameful\", \"gb_jane_sad\", \"gb_jane_neutral\", \"gb_jane_jealousy\", \"gb_jane_frustrated\", \"gb_jane_curious\", \"gb_jane_confident\", \"fr_marie_sad\", \"fr_marie_neutral\", \"fr_marie_happy\", \"fr_marie_excited\", \"fr_marie_curious\", \"fr_marie_angry\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3.2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "mistralai/voxtral-mini-tts-2603",
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra"
      }
    ],
    "name": "Mistral: Voxtral Mini TTS",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "hosted_reference"
        },
        "dimensions": {
          "variant": null
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000032",
            "amount_unit": "usd_per_input_character",
            "conditions": {
              "variant": null
            },
            "key": "pricing.prompt",
            "label": "prompt",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_character"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_not_separately_charged_output",
            "conditions": {
              "variant": null
            },
            "key": "pricing.completion",
            "label": "completion",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "not_separately_charged_output"
          }
        ]
      }
    ],
    "public_id": "mistralai/voxtral-mini-tts-2603",
    "short": "Voxtral TTS adalah model generasi ucapan 4B dari Mistral AI dengan adaptasi suara berbasis referensi dalam sembilan bahasa. Model ini mengubah teks yang disiapkan menjadi audio ekspresif, mendukung prompt suara sekali pakai atau yang dapat digunakan kembali serta streaming, dan menghasilkan keluaran 24 kHz dalam format audio yang didokumentasikan."
  },
  "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": "Voxtral TTS adalah model generasi ucapan 4B dari Mistral AI dengan adaptasi suara berbasis referensi dalam sembilan bahasa. Model ini mengubah teks yang disiapkan menjadi audio ekspresif, mendukung prompt suara sekali pakai atau yang dapat digunakan kembali serta streaming, dan menghasilkan keluaran 24 kHz dalam format audio yang didokumentasikan.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "986e427ae8b73d405e57dbebb8f3a86c73d94eaa3085350a964cd78a3830bdc1",
    "renderer_sha256": "2a0471475a29000c23db326ca1e315df73dee7524f6bc2907818ee3458813f2d"
  },
  "sourceRevision": "725e1494848ad0bf4ec91d0eb03ef0806b787d91074fdab0b7922f9a8aa2ffef"
}
