{
  "aboutHtml": "<h4>Sintesi rapida di battute conversazionali</h4><p>Speech 2.8 Turbo unisce la produzione rapida di audio a un movimento naturale della voce. Il produttore posiziona Turbo per un suono conversazionale fluido: battute brevi, lettura vocale di testi e interazione vocale. Questa scheda riceve testo e restituisce audio parlato.</p><h4>Risate, respiri e interiezioni</h4><p>Come la versione HD di questa generazione, Turbo supporta i marcatori sonori di Speech 2.8. Il testo può includere indicazioni di risate, risatine, tosse, schiarimenti della voce, inspirazioni, espirazioni, sospiri e altri suoni brevi. Questa irregolarità controllabile rende la battuta simile a una conversazione: compaiono respirazione e pause collegate al contenuto.</p><p>Il marcatore sonoro riguarda un punto specifico del testo. Si utilizzano le notazioni tra parentesi previste dal modello, per esempio <code>(laughs)</code> o <code>(breath)</code>. Una descrizione arbitraria dell&#39;effetto non equivale a un marcatore supportato.</p><h4>Voce e lingua</h4><p>La famiglia Speech 2.8 supporta <strong>40 lingue</strong>, tra cui il russo, e l&#39;uso di voci pronte. Il produttore mette in evidenza una texture riconoscibile della voce, le caratteristiche della respirazione e la riduzione delle distorsioni digitali. La clonazione riguarda una preparazione separata della voce, che può poi essere utilizzata nella sintesi.</p><p>MiniMax prevede scelta della voce e controllo di ritmo, volume e altezza. La velocità si imposta nell&#39;intervallo <strong>0,5–2</strong>, il volume superiore a 0 e fino a <strong>10</strong>, la modifica dell&#39;altezza da <strong>−12 a 12</strong>. L&#39;emozione può essere lasciata alla scelta del modello in base al significato del testo oppure indicata manualmente: gioia, tristezza, rabbia, paura, disgusto, sorpresa o calma.</p><p>La pronuncia può essere precisata con un dizionario di sostituzioni e notazione fonetica; sono previsti alfabeto fonetico internazionale, pinyin cinese e varianti di lettura giapponesi. Le pause vengono impostate tra i segmenti pronunciati nell&#39;intervallo <strong>0,01–99,99 secondi</strong>. La durata della pausa viene definita con una precisione di due cifre decimali; i marcatori vengono collocati tra i segmenti pronunciati e non consecutivamente. Queste impostazioni permettono di adeguare il suono di nomi, abbreviazioni e parole ambigue all&#39;idea della lettura vocale.</p><h4>Output progressivo e formato audio</h4><p>La sintesi riceve testo con meno di <strong>10 000 caratteri</strong>. Per testi lunghi oltre 3000 caratteri il produttore consiglia l&#39;output in streaming; è prevista anche la ricezione dell&#39;audio finale interamente. Le impostazioni generali di sintesi comprendono MP3, PCM, FLAC, WAV, Opus e varianti G.711 μ-law, mono o stereo; i formati disponibili per una specifica richiesta dipendono dagli strumenti di Ailoot.</p><p>La velocità di Turbo è una caratteristica della variante del modello, non una promessa di latenza fissa della battuta pronta. Qui non viene impostata una latenza numerica per questa richiesta. Le impostazioni estese elencate del produttore richiedono supporto nella modalità di accesso scelta attraverso Ailoot.</p><p>Le impostazioni audio aggiuntive comprendono le frequenze di campionamento <strong>8, 16, 22,05, 24, 32 e 44,1 kHz</strong>. Per MP3 è previsto un bitrate di <strong>32, 64, 128 o 256 kbit/s</strong>. Si possono anche modificare la coloritura della voce e applicare un solo effetto: eco spazioso, eco di sala, suono telefonico o voce robotica. Gli effetti di modifica della voce sono supportati per MP3, WAV e FLAC quando si riceve l&#39;audio interamente; nell&#39;output in streaming soltanto per MP3. I formati G.711 μ-law utilizzano una frequenza di 8 kHz. Queste capacità riguardano le impostazioni di sintesi di MiniMax.</p><p>Il produttore prevede la sincronizzazione tra parlato e testo: riferimenti temporali per frasi, per parole o per parole nell&#39;output progressivo. Questo risultato aiuta ad associare la pronuncia alla visualizzazione del testo. La capacità aggiuntiva richiede il supporto del formato di risposta corrispondente.</p>",
  "aboutText": "### Sintesi rapida di battute conversazionali\n\nSpeech 2.8 Turbo unisce la produzione rapida di audio a un movimento naturale della voce. Il produttore posiziona Turbo per un suono conversazionale fluido: battute brevi, lettura vocale di testi e interazione vocale. Questa scheda riceve testo e restituisce audio parlato.\n\n### Risate, respiri e interiezioni\n\nCome la versione HD di questa generazione, Turbo supporta i marcatori sonori di Speech 2.8. Il testo può includere indicazioni di risate, risatine, tosse, schiarimenti della voce, inspirazioni, espirazioni, sospiri e altri suoni brevi. Questa irregolarità controllabile rende la battuta simile a una conversazione: compaiono respirazione e pause collegate al contenuto.\n\nIl marcatore sonoro riguarda un punto specifico del testo. Si utilizzano le notazioni tra parentesi previste dal modello, per esempio `(laughs)` o `(breath)`. Una descrizione arbitraria dell'effetto non equivale a un marcatore supportato.\n\n### Voce e lingua\n\nLa famiglia Speech 2.8 supporta **40 lingue**, tra cui il russo, e l'uso di voci pronte. Il produttore mette in evidenza una texture riconoscibile della voce, le caratteristiche della respirazione e la riduzione delle distorsioni digitali. La clonazione riguarda una preparazione separata della voce, che può poi essere utilizzata nella sintesi.\n\nMiniMax prevede scelta della voce e controllo di ritmo, volume e altezza. La velocità si imposta nell'intervallo **0,5–2**, il volume superiore a 0 e fino a **10**, la modifica dell'altezza da **−12 a 12**. L'emozione può essere lasciata alla scelta del modello in base al significato del testo oppure indicata manualmente: gioia, tristezza, rabbia, paura, disgusto, sorpresa o calma.\n\nLa pronuncia può essere precisata con un dizionario di sostituzioni e notazione fonetica; sono previsti alfabeto fonetico internazionale, pinyin cinese e varianti di lettura giapponesi. Le pause vengono impostate tra i segmenti pronunciati nell'intervallo **0,01–99,99 secondi**. La durata della pausa viene definita con una precisione di due cifre decimali; i marcatori vengono collocati tra i segmenti pronunciati e non consecutivamente. Queste impostazioni permettono di adeguare il suono di nomi, abbreviazioni e parole ambigue all'idea della lettura vocale.\n\n### Output progressivo e formato audio\n\nLa sintesi riceve testo con meno di **10 000 caratteri**. Per testi lunghi oltre 3000 caratteri il produttore consiglia l'output in streaming; è prevista anche la ricezione dell'audio finale interamente. Le impostazioni generali di sintesi comprendono MP3, PCM, FLAC, WAV, Opus e varianti G.711 μ-law, mono o stereo; i formati disponibili per una specifica richiesta dipendono dagli strumenti di Ailoot.\n\nLa velocità di Turbo è una caratteristica della variante del modello, non una promessa di latenza fissa della battuta pronta. Qui non viene impostata una latenza numerica per questa richiesta. Le impostazioni estese elencate del produttore richiedono supporto nella modalità di accesso scelta attraverso Ailoot.\n\nLe impostazioni audio aggiuntive comprendono le frequenze di campionamento **8, 16, 22,05, 24, 32 e 44,1 kHz**. Per MP3 è previsto un bitrate di **32, 64, 128 o 256 kbit/s**. Si possono anche modificare la coloritura della voce e applicare un solo effetto: eco spazioso, eco di sala, suono telefonico o voce robotica. Gli effetti di modifica della voce sono supportati per MP3, WAV e FLAC quando si riceve l'audio interamente; nell'output in streaming soltanto per MP3. I formati G.711 μ-law utilizzano una frequenza di 8 kHz. Queste capacità riguardano le impostazioni di sintesi di MiniMax.\n\nIl produttore prevede la sincronizzazione tra parlato e testo: riferimenti temporali per frasi, per parole o per parole nell'output progressivo. Questo risultato aiuta ad associare la pronuncia alla visualizzazione del testo. La capacità aggiuntiva richiede il supporto del formato di risposta corrispondente.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "3e274e503f10dd2496254f4cc9b7b530aa191272a3101814fb20c18f49122ffc",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "it",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">MM</span><h2 id=\"sheet-title\">speech-2.8-turbo</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Chiudi\">×</button></div><div class=\"idline\"><span>MiniMax /</span><code>speech-2.8-turbo</code><button type=\"button\" id=\"copy-id\">Copia ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sezioni della scheda del modello\"><button type=\"button\" data-card-jump=\"overview\">Introduzione</button><button type=\"button\" data-card-jump=\"methods\">Input e metodi</button><button type=\"button\" data-card-jump=\"pricing\">Tariffe</button><button type=\"button\" data-card-jump=\"examples\">Esempi</button><button type=\"button\" data-card-jump=\"results\">Risultati</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metodi API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|speech|/v1/audio/speech|speech-2.8-turbo\">Sintesi vocale</button></div><div class=\"idline\"><label for=\"card-model-id\">ID del modello</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|speech-2.8-turbo\" selected>speech-2.8-turbo</option><option value=\"Core|speech|/v1/audio/speech|minimax-speech-turbo\">minimax-speech-turbo</option></select></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\">Introduzione</h3><p class=\"mdesc-full\">Speech 2.8 Turbo offre sintesi rapida di parlato naturale, con marcatori sonori e controllo dell&#39;espressività.</p><dl class=\"card-io\" data-card-io><div><dt>Input accettati</dt><dd>Testo</dd></div><div><dt>Risultati</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Informazioni sul modello</summary><p class=\"note-s\" data-model-method-boundary>Questa descrizione illustra le funzionalità del modello. Gli input, gli output e le opzioni disponibili in Ailoot per il metodo selezionato sono elencati di seguito.</p><div class=\"mabout\" id=\"m-about\"><h4>Sintesi rapida di battute conversazionali</h4><p>Speech 2.8 Turbo unisce la produzione rapida di audio a un movimento naturale della voce. Il produttore posiziona Turbo per un suono conversazionale fluido: battute brevi, lettura vocale di testi e interazione vocale. Questa scheda riceve testo e restituisce audio parlato.</p><h4>Risate, respiri e interiezioni</h4><p>Come la versione HD di questa generazione, Turbo supporta i marcatori sonori di Speech 2.8. Il testo può includere indicazioni di risate, risatine, tosse, schiarimenti della voce, inspirazioni, espirazioni, sospiri e altri suoni brevi. Questa irregolarità controllabile rende la battuta simile a una conversazione: compaiono respirazione e pause collegate al contenuto.</p><p>Il marcatore sonoro riguarda un punto specifico del testo. Si utilizzano le notazioni tra parentesi previste dal modello, per esempio <code>(laughs)</code> o <code>(breath)</code>. Una descrizione arbitraria dell&#39;effetto non equivale a un marcatore supportato.</p><h4>Voce e lingua</h4><p>La famiglia Speech 2.8 supporta <strong>40 lingue</strong>, tra cui il russo, e l&#39;uso di voci pronte. Il produttore mette in evidenza una texture riconoscibile della voce, le caratteristiche della respirazione e la riduzione delle distorsioni digitali. La clonazione riguarda una preparazione separata della voce, che può poi essere utilizzata nella sintesi.</p><p>MiniMax prevede scelta della voce e controllo di ritmo, volume e altezza. La velocità si imposta nell&#39;intervallo <strong>0,5–2</strong>, il volume superiore a 0 e fino a <strong>10</strong>, la modifica dell&#39;altezza da <strong>−12 a 12</strong>. L&#39;emozione può essere lasciata alla scelta del modello in base al significato del testo oppure indicata manualmente: gioia, tristezza, rabbia, paura, disgusto, sorpresa o calma.</p><p>La pronuncia può essere precisata con un dizionario di sostituzioni e notazione fonetica; sono previsti alfabeto fonetico internazionale, pinyin cinese e varianti di lettura giapponesi. Le pause vengono impostate tra i segmenti pronunciati nell&#39;intervallo <strong>0,01–99,99 secondi</strong>. La durata della pausa viene definita con una precisione di due cifre decimali; i marcatori vengono collocati tra i segmenti pronunciati e non consecutivamente. Queste impostazioni permettono di adeguare il suono di nomi, abbreviazioni e parole ambigue all&#39;idea della lettura vocale.</p><h4>Output progressivo e formato audio</h4><p>La sintesi riceve testo con meno di <strong>10 000 caratteri</strong>. Per testi lunghi oltre 3000 caratteri il produttore consiglia l&#39;output in streaming; è prevista anche la ricezione dell&#39;audio finale interamente. Le impostazioni generali di sintesi comprendono MP3, PCM, FLAC, WAV, Opus e varianti G.711 μ-law, mono o stereo; i formati disponibili per una specifica richiesta dipendono dagli strumenti di Ailoot.</p><p>La velocità di Turbo è una caratteristica della variante del modello, non una promessa di latenza fissa della battuta pronta. Qui non viene impostata una latenza numerica per questa richiesta. Le impostazioni estese elencate del produttore richiedono supporto nella modalità di accesso scelta attraverso Ailoot.</p><p>Le impostazioni audio aggiuntive comprendono le frequenze di campionamento <strong>8, 16, 22,05, 24, 32 e 44,1 kHz</strong>. Per MP3 è previsto un bitrate di <strong>32, 64, 128 o 256 kbit/s</strong>. Si possono anche modificare la coloritura della voce e applicare un solo effetto: eco spazioso, eco di sala, suono telefonico o voce robotica. Gli effetti di modifica della voce sono supportati per MP3, WAV e FLAC quando si riceve l&#39;audio interamente; nell&#39;output in streaming soltanto per MP3. I formati G.711 μ-law utilizzano una frequenza di 8 kHz. Queste capacità riguardano le impostazioni di sintesi di MiniMax.</p><p>Il produttore prevede la sincronizzazione tra parlato e testo: riferimenti temporali per frasi, per parole o per parole nell&#39;output progressivo. Questo risultato aiuta ad associare la pronuncia alla visualizzazione del testo. La capacità aggiuntiva richiede il supporto del formato di risposta corrispondente.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponibile in Ailoot · input e metodi</h3><details class=\"card-method\" open><summary><b>Ailoot · Sintesi vocale</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Tipi di input</dt><dd><code>text</code></dd></div><div><dt>Tipi di output</dt><dd><code>speech</code></dd></div><div><dt>Formato di output</dt><dd>mp3</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Campo</th><th>Tipo</th><th>Requisito</th><th>Valori e limiti</th><th>Predefinito</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>speech-2.8-turbo</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>Lunghezza minima: 1</div><div>Lunghezza massima (esclusa): 10.000</div><div>Unità: caratteri Unicode</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>Schema: ^[A-Za-z0-9_-]{1,128}$</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>mp3</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinazioni di materiali in input</summary><p class=\"note-s\"><b>text_to_speech</b> · Obbligatorio: input</p></details><details class=\"note-s\" data-method-contract><summary>Parametri e ciclo di vita del metodo</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametro</th><th>Contratto</th></tr></thead><tbody><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>material_types</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>text</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>required</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>null</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>optional_controls</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>null</td></tr></tbody></table></div><p>Ciclo di vita: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · task_id effettivamente restituito o record della libreria multimediale</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\">Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tariffe</h3><h4>Tariffe dei metodi Ailoot</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Sintesi vocale</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Input</dt><dd>60,00 USD <em>per 1 milione di caratteri</em></dd></div></dl></section><p class=\"note-s\">Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. <a href=\"/docs/it/billing/reserve/\">Come funzionano la prenotazione e l’addebito finale →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esempi di richieste</h3><h4>Ailoot · Sintesi vocale</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Varianti di codice\"><button class=\"cg-tab\" id=\"model-code-474-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-474-panel-0\" aria-selected=\"true\" tabindex=\"0\">Esempio di sintesi vocale</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copia il codice\"><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-474-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-474-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\n: &quot;${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}&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;speech-2.8-turbo&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nimport re\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nif not re.fullmatch(r&quot;[A-Za-z0-9_-]{1,128}&quot;,voice):raise SystemExit(&quot;Set an actual accepted voice ID&quot;)\np[&quot;voice&quot;]=voice\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\">Ricevi e salva i risultati</h3><h4>Ailoot · Sintesi vocale</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><div class=\"card-result-process\" data-all-results><h5>Conserva tutti i risultati completati</h5><p class=\"note-s\">Conserva ogni risposta, file e parte di contenuto restituiti per intero.</p><p class=\"note-s\">Conserva il risultato binario completo e gli header. Se vengono restituiti JSON o più output, conserva ogni elemento data e recupera ogni URL firmato effettivo della risorsa.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Se occorre verificare la risposta originale</h5><p class=\"note-s\">Conserva operation_id/X-Client-Request-ID originale per la riconciliazione senza reinvio; non esiste una rotta dedicata al polling audio.</p></div><details class=\"card-about\" data-output-fields><summary>Campi della risposta</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Campo</th><th>Tipo</th></tr></thead><tbody><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>bytes</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Errori e passaggi successivi</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Risposta</th><th>Condizione</th><th>Passaggio successivo</th></tr></thead><tbody><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>Campi obbligatori, rappresentazione del materiale o valore del parametro non validi</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span>Correggi i campi indicati prima di una nuova richiesta di creazione.</td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span><code>server_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>La risposta restituita indica che l&#39;operazione o il risultato richiede una verifica</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span>Conserva l&#39;ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l&#39;operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias del modello</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=speech-2.8-turbo&amp;fmt=speech\"><code>speech-2.8-turbo</code></a>, <a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=minimax-speech-turbo&amp;fmt=speech\"><code>minimax-speech-turbo</code></a></span></p><h4>Alias dei percorsi dei metodi</h4><p class=\"note-s\">Usa i percorsi dei metodi indicati sopra.</p><h4>ID di chiamata correlati</h4><p class=\"note-s\"><a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=speech-2.8-turbo&amp;fmt=speech\"><code>speech-2.8-turbo</code></a>, <a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=minimax-speech-turbo&amp;fmt=speech\"><code>minimax-speech-turbo</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "speech-2.8-turbo",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "speech-2.8-turbo",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|speech-2.8-turbo",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": 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": "Campi obbligatori, rappresentazione del materiale o valore del parametro non validi",
                "http_status": 400,
                "recovery": "Correggi i campi indicati prima di una nuova richiesta di creazione.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La risposta restituita indica che l'operazione o il risultato richiede una verifica",
                "http_status": null,
                "recovery": "Conserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "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": "Conserva operation_id/X-Client-Request-ID originale per la riconciliazione senza reinvio; non esiste una rotta dedicata al polling 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": "Conserva il risultato binario completo e gli header. Se vengono restituiti JSON o più output, conserva ogni elemento data e recupera ogni URL firmato effettivo della risorsa.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-2.8-turbo"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caratteri Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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 effettivamente restituito o record della libreria multimediale",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-2.8-turbo\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\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": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Sintesi vocale",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 60,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-2.8-turbo",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 60
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">MM</span><h2 id=\"sheet-title\">speech-2.8-turbo</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Chiudi\">×</button></div><div class=\"idline\"><span>MiniMax /</span><code>minimax-speech-turbo</code><button type=\"button\" id=\"copy-id\">Copia ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Sezioni della scheda del modello\"><button type=\"button\" data-card-jump=\"overview\">Introduzione</button><button type=\"button\" data-card-jump=\"methods\">Input e metodi</button><button type=\"button\" data-card-jump=\"pricing\">Tariffe</button><button type=\"button\" data-card-jump=\"examples\">Esempi</button><button type=\"button\" data-card-jump=\"results\">Risultati</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Metodi API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|speech|/v1/audio/speech|minimax-speech-turbo\">Sintesi vocale</button></div><div class=\"idline\"><label for=\"card-model-id\">ID del modello</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|speech-2.8-turbo\">speech-2.8-turbo</option><option value=\"Core|speech|/v1/audio/speech|minimax-speech-turbo\" selected>minimax-speech-turbo</option></select></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\">Introduzione</h3><p class=\"mdesc-full\">Speech 2.8 Turbo offre sintesi rapida di parlato naturale, con marcatori sonori e controllo dell&#39;espressività.</p><dl class=\"card-io\" data-card-io><div><dt>Input accettati</dt><dd>Testo</dd></div><div><dt>Risultati</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Informazioni sul modello</summary><p class=\"note-s\" data-model-method-boundary>Questa descrizione illustra le funzionalità del modello. Gli input, gli output e le opzioni disponibili in Ailoot per il metodo selezionato sono elencati di seguito.</p><div class=\"mabout\" id=\"m-about\"><h4>Sintesi rapida di battute conversazionali</h4><p>Speech 2.8 Turbo unisce la produzione rapida di audio a un movimento naturale della voce. Il produttore posiziona Turbo per un suono conversazionale fluido: battute brevi, lettura vocale di testi e interazione vocale. Questa scheda riceve testo e restituisce audio parlato.</p><h4>Risate, respiri e interiezioni</h4><p>Come la versione HD di questa generazione, Turbo supporta i marcatori sonori di Speech 2.8. Il testo può includere indicazioni di risate, risatine, tosse, schiarimenti della voce, inspirazioni, espirazioni, sospiri e altri suoni brevi. Questa irregolarità controllabile rende la battuta simile a una conversazione: compaiono respirazione e pause collegate al contenuto.</p><p>Il marcatore sonoro riguarda un punto specifico del testo. Si utilizzano le notazioni tra parentesi previste dal modello, per esempio <code>(laughs)</code> o <code>(breath)</code>. Una descrizione arbitraria dell&#39;effetto non equivale a un marcatore supportato.</p><h4>Voce e lingua</h4><p>La famiglia Speech 2.8 supporta <strong>40 lingue</strong>, tra cui il russo, e l&#39;uso di voci pronte. Il produttore mette in evidenza una texture riconoscibile della voce, le caratteristiche della respirazione e la riduzione delle distorsioni digitali. La clonazione riguarda una preparazione separata della voce, che può poi essere utilizzata nella sintesi.</p><p>MiniMax prevede scelta della voce e controllo di ritmo, volume e altezza. La velocità si imposta nell&#39;intervallo <strong>0,5–2</strong>, il volume superiore a 0 e fino a <strong>10</strong>, la modifica dell&#39;altezza da <strong>−12 a 12</strong>. L&#39;emozione può essere lasciata alla scelta del modello in base al significato del testo oppure indicata manualmente: gioia, tristezza, rabbia, paura, disgusto, sorpresa o calma.</p><p>La pronuncia può essere precisata con un dizionario di sostituzioni e notazione fonetica; sono previsti alfabeto fonetico internazionale, pinyin cinese e varianti di lettura giapponesi. Le pause vengono impostate tra i segmenti pronunciati nell&#39;intervallo <strong>0,01–99,99 secondi</strong>. La durata della pausa viene definita con una precisione di due cifre decimali; i marcatori vengono collocati tra i segmenti pronunciati e non consecutivamente. Queste impostazioni permettono di adeguare il suono di nomi, abbreviazioni e parole ambigue all&#39;idea della lettura vocale.</p><h4>Output progressivo e formato audio</h4><p>La sintesi riceve testo con meno di <strong>10 000 caratteri</strong>. Per testi lunghi oltre 3000 caratteri il produttore consiglia l&#39;output in streaming; è prevista anche la ricezione dell&#39;audio finale interamente. Le impostazioni generali di sintesi comprendono MP3, PCM, FLAC, WAV, Opus e varianti G.711 μ-law, mono o stereo; i formati disponibili per una specifica richiesta dipendono dagli strumenti di Ailoot.</p><p>La velocità di Turbo è una caratteristica della variante del modello, non una promessa di latenza fissa della battuta pronta. Qui non viene impostata una latenza numerica per questa richiesta. Le impostazioni estese elencate del produttore richiedono supporto nella modalità di accesso scelta attraverso Ailoot.</p><p>Le impostazioni audio aggiuntive comprendono le frequenze di campionamento <strong>8, 16, 22,05, 24, 32 e 44,1 kHz</strong>. Per MP3 è previsto un bitrate di <strong>32, 64, 128 o 256 kbit/s</strong>. Si possono anche modificare la coloritura della voce e applicare un solo effetto: eco spazioso, eco di sala, suono telefonico o voce robotica. Gli effetti di modifica della voce sono supportati per MP3, WAV e FLAC quando si riceve l&#39;audio interamente; nell&#39;output in streaming soltanto per MP3. I formati G.711 μ-law utilizzano una frequenza di 8 kHz. Queste capacità riguardano le impostazioni di sintesi di MiniMax.</p><p>Il produttore prevede la sincronizzazione tra parlato e testo: riferimenti temporali per frasi, per parole o per parole nell&#39;output progressivo. Questo risultato aiuta ad associare la pronuncia alla visualizzazione del testo. La capacità aggiuntiva richiede il supporto del formato di risposta corrispondente.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponibile in Ailoot · input e metodi</h3><details class=\"card-method\" open><summary><b>Ailoot · Sintesi vocale</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Tipi di input</dt><dd><code>text</code></dd></div><div><dt>Tipi di output</dt><dd><code>speech</code></dd></div><div><dt>Formato di output</dt><dd>mp3</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Campo</th><th>Tipo</th><th>Requisito</th><th>Valori e limiti</th><th>Predefinito</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>minimax-speech-turbo</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>Lunghezza minima: 1</div><div>Lunghezza massima (esclusa): 10.000</div><div>Unità: caratteri Unicode</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obbligatorio</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>Schema: ^[A-Za-z0-9_-]{1,128}$</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Facoltativo</td><td data-cell-label=\"Valori e limiti\"><span class=\"card-cell-label\">Valori e limiti</span><div>mp3</div></td><td data-cell-label=\"Predefinito\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predefinito</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinazioni di materiali in input</summary><p class=\"note-s\"><b>text_to_speech</b> · Obbligatorio: input</p></details><details class=\"note-s\" data-method-contract><summary>Parametri e ciclo di vita del metodo</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametro</th><th>Contratto</th></tr></thead><tbody><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>material_types</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>text</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>required</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>null</td></tr><tr><th data-cell-label=\"Parametro\" scope=\"row\"><span class=\"card-cell-label\">Parametro</span><code>optional_controls</code></th><td data-cell-label=\"Contratto\"><span class=\"card-cell-label\">Contratto</span>null</td></tr></tbody></table></div><p>Ciclo di vita: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · task_id effettivamente restituito o record della libreria multimediale</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\">Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tariffe</h3><h4>Tariffe dei metodi Ailoot</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Sintesi vocale</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Input</dt><dd>60,00 USD <em>per 1 milione di caratteri</em></dd></div></dl></section><p class=\"note-s\">Ailoot prenota un importo stimato prima di una richiesta. Dopo il risultato, addebita il costo finale in base all’utilizzo misurato. Per lo streaming, l’addebito usa il record finale di utilizzo. <a href=\"/docs/it/billing/reserve/\">Come funzionano la prenotazione e l’addebito finale →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esempi di richieste</h3><h4>Ailoot · Sintesi vocale</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Varianti di codice\"><button class=\"cg-tab\" id=\"model-code-475-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-475-panel-0\" aria-selected=\"true\" tabindex=\"0\">Esempio di sintesi vocale</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copia il codice\"><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-475-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-475-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\n: &quot;${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}&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;minimax-speech-turbo&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nimport re\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nif not re.fullmatch(r&quot;[A-Za-z0-9_-]{1,128}&quot;,voice):raise SystemExit(&quot;Set an actual accepted voice ID&quot;)\np[&quot;voice&quot;]=voice\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\">Ricevi e salva i risultati</h3><h4>Ailoot · Sintesi vocale</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><div class=\"card-result-process\" data-all-results><h5>Conserva tutti i risultati completati</h5><p class=\"note-s\">Conserva ogni risposta, file e parte di contenuto restituiti per intero.</p><p class=\"note-s\">Conserva il risultato binario completo e gli header. Se vengono restituiti JSON o più output, conserva ogni elemento data e recupera ogni URL firmato effettivo della risorsa.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Se occorre verificare la risposta originale</h5><p class=\"note-s\">Conserva operation_id/X-Client-Request-ID originale per la riconciliazione senza reinvio; non esiste una rotta dedicata al polling audio.</p></div><details class=\"card-about\" data-output-fields><summary>Campi della risposta</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Campo</th><th>Tipo</th></tr></thead><tbody><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>bytes</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Errori e passaggi successivi</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Risposta</th><th>Condizione</th><th>Passaggio successivo</th></tr></thead><tbody><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>Campi obbligatori, rappresentazione del materiale o valore del parametro non validi</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span>Correggi i campi indicati prima di una nuova richiesta di creazione.</td></tr><tr><th data-cell-label=\"Risposta\" scope=\"row\"><span class=\"card-cell-label\">Risposta</span><code>server_error</code></th><td data-cell-label=\"Condizione\"><span class=\"card-cell-label\">Condizione</span>La risposta restituita indica che l&#39;operazione o il risultato richiede una verifica</td><td data-cell-label=\"Passaggio successivo\"><span class=\"card-cell-label\">Passaggio successivo</span>Conserva l&#39;ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l&#39;operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias del modello</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=speech-2.8-turbo&amp;fmt=speech\"><code>speech-2.8-turbo</code></a>, <a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=minimax-speech-turbo&amp;fmt=speech\"><code>minimax-speech-turbo</code></a></span></p><h4>Alias dei percorsi dei metodi</h4><p class=\"note-s\">Usa i percorsi dei metodi indicati sopra.</p><h4>ID di chiamata correlati</h4><p class=\"note-s\"><a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=speech-2.8-turbo&amp;fmt=speech\"><code>speech-2.8-turbo</code></a>, <a href=\"#m=speech-2.8-turbo&amp;route=Core&amp;caller=minimax-speech-turbo&amp;fmt=speech\"><code>minimax-speech-turbo</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "minimax-speech-turbo",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "minimax-speech-turbo",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|minimax-speech-turbo",
      "ordinal": 1,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": 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": "Campi obbligatori, rappresentazione del materiale o valore del parametro non validi",
                "http_status": 400,
                "recovery": "Correggi i campi indicati prima di una nuova richiesta di creazione.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La risposta restituita indica che l'operazione o il risultato richiede una verifica",
                "http_status": null,
                "recovery": "Conserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "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": "Conserva operation_id/X-Client-Request-ID originale per la riconciliazione senza reinvio; non esiste una rotta dedicata al polling 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": "Conserva il risultato binario completo e gli header. Se vengono restituiti JSON o più output, conserva ogni elemento data e recupera ogni URL firmato effettivo della risorsa.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "minimax-speech-turbo"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caratteri Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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 effettivamente restituito o record della libreria multimediale",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"minimax-speech-turbo\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\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": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Sintesi vocale",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 60,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "minimax-speech-turbo",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 60
          }
        ]
      }
    }
  ],
  "model_id": "speech-2.8-turbo",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "59684015663584b596ac397e8211c9a9dd56e04845f67ea8ef80b96ce21dad19",
    "input_html_sha256": "a5133e4176ffbdaa8cdfd0a42f685ea420110c9799cdc3b7567dfc215f7681df",
    "private_audit_sha256": "660fed8f71cebd3911b82214f6fc4838be81ba820e52c34a91fb5f5c99888281",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/it/speech-2-8-turbo/",
    "description": "Speech 2.8 Turbo offre sintesi rapida di parlato naturale, con marcatori sonori e controllo dell'espressività.",
    "locale": "it",
    "md_url": "https://ailoot.ai/models/it/speech-2-8-turbo/index.md",
    "title": "speech-2.8-turbo — Ailoot",
    "url": "https://ailoot.ai/models/it/speech-2-8-turbo/"
  },
  "rawModel": {
    "about": "### Sintesi rapida di battute conversazionali\n\nSpeech 2.8 Turbo unisce la produzione rapida di audio a un movimento naturale della voce. Il produttore posiziona Turbo per un suono conversazionale fluido: battute brevi, lettura vocale di testi e interazione vocale. Questa scheda riceve testo e restituisce audio parlato.\n\n### Risate, respiri e interiezioni\n\nCome la versione HD di questa generazione, Turbo supporta i marcatori sonori di Speech 2.8. Il testo può includere indicazioni di risate, risatine, tosse, schiarimenti della voce, inspirazioni, espirazioni, sospiri e altri suoni brevi. Questa irregolarità controllabile rende la battuta simile a una conversazione: compaiono respirazione e pause collegate al contenuto.\n\nIl marcatore sonoro riguarda un punto specifico del testo. Si utilizzano le notazioni tra parentesi previste dal modello, per esempio `(laughs)` o `(breath)`. Una descrizione arbitraria dell'effetto non equivale a un marcatore supportato.\n\n### Voce e lingua\n\nLa famiglia Speech 2.8 supporta **40 lingue**, tra cui il russo, e l'uso di voci pronte. Il produttore mette in evidenza una texture riconoscibile della voce, le caratteristiche della respirazione e la riduzione delle distorsioni digitali. La clonazione riguarda una preparazione separata della voce, che può poi essere utilizzata nella sintesi.\n\nMiniMax prevede scelta della voce e controllo di ritmo, volume e altezza. La velocità si imposta nell'intervallo **0,5–2**, il volume superiore a 0 e fino a **10**, la modifica dell'altezza da **−12 a 12**. L'emozione può essere lasciata alla scelta del modello in base al significato del testo oppure indicata manualmente: gioia, tristezza, rabbia, paura, disgusto, sorpresa o calma.\n\nLa pronuncia può essere precisata con un dizionario di sostituzioni e notazione fonetica; sono previsti alfabeto fonetico internazionale, pinyin cinese e varianti di lettura giapponesi. Le pause vengono impostate tra i segmenti pronunciati nell'intervallo **0,01–99,99 secondi**. La durata della pausa viene definita con una precisione di due cifre decimali; i marcatori vengono collocati tra i segmenti pronunciati e non consecutivamente. Queste impostazioni permettono di adeguare il suono di nomi, abbreviazioni e parole ambigue all'idea della lettura vocale.\n\n### Output progressivo e formato audio\n\nLa sintesi riceve testo con meno di **10 000 caratteri**. Per testi lunghi oltre 3000 caratteri il produttore consiglia l'output in streaming; è prevista anche la ricezione dell'audio finale interamente. Le impostazioni generali di sintesi comprendono MP3, PCM, FLAC, WAV, Opus e varianti G.711 μ-law, mono o stereo; i formati disponibili per una specifica richiesta dipendono dagli strumenti di Ailoot.\n\nLa velocità di Turbo è una caratteristica della variante del modello, non una promessa di latenza fissa della battuta pronta. Qui non viene impostata una latenza numerica per questa richiesta. Le impostazioni estese elencate del produttore richiedono supporto nella modalità di accesso scelta attraverso Ailoot.\n\nLe impostazioni audio aggiuntive comprendono le frequenze di campionamento **8, 16, 22,05, 24, 32 e 44,1 kHz**. Per MP3 è previsto un bitrate di **32, 64, 128 o 256 kbit/s**. Si possono anche modificare la coloritura della voce e applicare un solo effetto: eco spazioso, eco di sala, suono telefonico o voce robotica. Gli effetti di modifica della voce sono supportati per MP3, WAV e FLAC quando si riceve l'audio interamente; nell'output in streaming soltanto per MP3. I formati G.711 μ-law utilizzano una frequenza di 8 kHz. Queste capacità riguardano le impostazioni di sintesi di MiniMax.\n\nIl produttore prevede la sincronizzazione tra parlato e testo: riferimenti temporali per frasi, per parole o per parole nell'output progressivo. Questo risultato aiuta ad associare la pronuncia alla visualizzazione del testo. La capacità aggiuntiva richiede il supporto del formato di risposta corrispondente.",
    "alias_of": null,
    "aliases": [
      "minimax-speech-turbo"
    ],
    "author": "MiniMax",
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "speech-2.8-turbo",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": 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": "Campi obbligatori, rappresentazione del materiale o valore del parametro non validi",
                "http_status": 400,
                "recovery": "Correggi i campi indicati prima di una nuova richiesta di creazione.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La risposta restituita indica che l'operazione o il risultato richiede una verifica",
                "http_status": null,
                "recovery": "Conserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "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": "Conserva operation_id/X-Client-Request-ID originale per la riconciliazione senza reinvio; non esiste una rotta dedicata al polling 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": "Conserva il risultato binario completo e gli header. Se vengono restituiti JSON o più output, conserva ogni elemento data e recupera ogni URL firmato effettivo della risorsa.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "speech-2.8-turbo"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caratteri Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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 effettivamente restituito o record della libreria multimediale",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"speech-2.8-turbo\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\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": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Sintesi vocale",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 60,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "speech-2.8-turbo",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 60
          }
        ]
      },
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": 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": "Campi obbligatori, rappresentazione del materiale o valore del parametro non validi",
                "http_status": 400,
                "recovery": "Correggi i campi indicati prima di una nuova richiesta di creazione.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La risposta restituita indica che l'operazione o il risultato richiede una verifica",
                "http_status": null,
                "recovery": "Conserva l'ID originale di operazione/task restituito, gli header della richiesta e la risposta; continua a leggere l'operazione originale tramite le modalità supportate. Non reinviare la richiesta di creazione.",
                "type": "server_error"
              }
            ],
            "hints": [
              "MiniMax accepts optionalresponse_formatmp3. Actual voice IDs come from the selected model voice profile.",
              "The facade uses bufferedMP3; provider speed/volume/pitch/sample-rate fields are fixed by the adapter, not callercontrols."
            ],
            "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": "Conserva operation_id/X-Client-Request-ID originale per la riconciliazione senza reinvio; non esiste una rotta dedicata al polling 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": "Conserva il risultato binario completo e gli header. Se vengono restituiti JSON o più output, conserva ogni elemento data e recupera ogni URL firmato effettivo della risorsa.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "minimax-speech-turbo"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length_exclusive": 10000,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caratteri Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "voice",
                "pattern": "^[A-Za-z0-9_-]{1,128}$",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Le strutture dei metodi e gli ID sono esatti; la capacità del fornitore è distinta dall’ammissione delle richieste."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "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 effettivamente restituito o record della libreria multimediale",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\n: \"${AILOOT_VOICE_ID:?Set the actual accepted voice ID for this model}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"minimax-speech-turbo\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nimport re\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nif not re.fullmatch(r\"[A-Za-z0-9_-]{1,128}\",voice):raise SystemExit(\"Set an actual accepted voice ID\")\np[\"voice\"]=voice\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": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Sintesi vocale",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 60,
                "amount_unit": "usd_per_display_unit",
                "key": "tts_million_chars",
                "label": "per 1 million characters",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "minimax-speech-turbo",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "tts_million_chars",
        "units": [
          {
            "key": "tts_million_chars",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 60
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "speech-2.8-turbo",
        "request_model_id": "speech-2.8-turbo",
        "route_label": "Core"
      },
      {
        "canonical_model_id": "speech-2.8-turbo",
        "request_model_id": "minimax-speech-turbo",
        "route_label": "Core"
      }
    ],
    "name": "speech-2.8-turbo",
    "price": {
      "in": 60,
      "in_label": "per 1 million characters",
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Speech 2.8 Turbo offre sintesi rapida di parlato naturale, con marcatori sonori e controllo dell'espressività."
  },
  "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
        },
        {
          "contract_json_pointer": "/methods/1/rawMethod/contract",
          "html_json_pointer": "/methods/1/html",
          "method_ordinal": 1
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod",
        "/methods/1/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Speech 2.8 Turbo offre sintesi rapida di parlato naturale, con marcatori sonori e controllo dell'espressività.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "9df45dd5d89141a246f8cb1712ed71d326a8f1e2e1ae7747f5f3a535a1760e0a",
    "renderer_sha256": "3be1a96012c3c76b38a7b9bea6a57c0def38c56103737bee6a5e77aaa75e488a"
  },
  "sourceRevision": "43e430a512af03240dbfb70c9c4ca678368c2938afff35772543b0377bd4cb3c"
}
