{
  "aboutHtml": "<p>Voxtral TTS es el modelo de conversión de texto a voz de 4B de Mistral AI para generar audio hablado a partir de texto y una referencia de voz. La página del modelo del fabricante identifica la edición 2603 como voxtral-mini-tts-2603, mientras que la ficha de los pesos publicados se denomina Voxtral 4B TTS 2603. Esta entrada corresponde a esa versión de generación de voz, distinta de Voxtral Small para comprensión de audio, transcripción y modelos posteriores de entrada en tiempo real.</p><p>Voz expresiva y adaptación de voz</p><p>El modelo está diseñado para captar las pausas, el ritmo, la entonación, el acento y la expresión emocional de una voz de referencia. La voz actúa como una instrucción sobre cómo debe sonar el texto; la presentación del fabricante no exige etiquetas independientes de prosodia o emoción ni una transcripción de la grabación de referencia. El texto de origen determina lo que se dice, mientras que la referencia de audio orienta la interpretación.</p><p>La presentación describe la adaptación de una voz con tan solo dos o tres segundos de audio. La descripción de la arquitectura habla de referencias de voz de cinco a veinticinco segundos. Esas afirmaciones tienen alcances diferentes: un ejemplo de adaptación breve no obliga a utilizar la referencia más corta posible. Elija voz clara que represente el estilo y el acento deseados para el resultado final.</p><p>La ficha publicada incluye veinte voces predefinidas y adaptación a voces nuevas. El flujo de voz del fabricante puede utilizar un perfil de voz guardado o un clip de referencia de un solo uso. Guardar un perfil permite reutilizar la misma referencia de voz en solicitudes de voz independientes, mientras que un clip de un solo uso la proporciona para la tarea actual. Un perfil y una grabación generada son recursos diferentes.</p><p>Idiomas y locución entre idiomas</p><p>La versión admite inglés, francés, español, alemán, italiano, portugués, neerlandés, árabe e hindi, con variación dialectal, transferencia de voz entre idiomas y mezcla de idiomas descritas por el fabricante. Para obtener el mejor resultado, la guía de voz recomienda que el idioma de la referencia coincida con el del texto. La transferencia entre idiomas puede conservar el acento de la referencia al pronunciar el texto preparado en otro idioma compatible.</p><p>Una tarea práctica de narración puede utilizar el mismo estilo de voz para una explicación en distintos idiomas compatibles, con cada texto preparado para su oyente previsto. La respuesta de un asistente de voz puede utilizar un guion breve y conversacional, en lugar de leer en voz alta un documento sin editar. El modelo de conversión de texto a voz pronuncia las palabras preparadas; cualquier fase de traducción o redacción de respuestas que produzca esas palabras es un paso independiente.</p><p>Preparación del texto</p><p>La guía de voz del fabricante recomienda texto que pueda verbalizarse. Escriba los números y los símbolos tal como deban pronunciarse para que el modelo no tenga que elegir entre distintas lecturas. Un número puede ser una cantidad, una hora o un identificador; defina la redacción oral prevista antes de la síntesis. Desarrolle las abreviaturas cuando importe la pronunciación y utilice letras separadas cuando esa sea la lectura deseada.</p><p>Evite formato enriquecido, emojis y caracteres especiales que no vayan a reproducirse como contenido hablado. Prepare oraciones completas con la puntuación y las palabras necesarias para la interpretación. La guía recomienda entradas de menos de 300 palabras para obtener mejores resultados. Es una recomendación de calidad, no una longitud máxima de entrada declarada como límite estricto.</p><p>Para una explicación de un procedimiento, escriba la acción y la condición en una frase que el oyente pueda seguir. Para un anuncio, coloque la información importante antes de los detalles opcionales. Para una respuesta de voz, conserve la respuesta factual y elimine el formato exclusivo de pantalla o las anotaciones de fuentes que no deban pronunciarse. Estos preparativos hacen que el propio guion sea adecuado para audio antes de que la referencia determine su estilo.</p><p>Streaming, salida y duración</p><p>El fabricante documenta entrega básica y en streaming y describe la generación nativa de hasta dos minutos de audio. La ficha de los pesos publicados también incluye inferencia por lotes para preparar varias tareas de voz. Las generaciones más largas del servicio utilizan intercalado, en lugar de tratar un bloque nativo como ilimitado. Para narraciones más largas, prepare secciones coherentes y mantenga constantes la voz y la preparación del texto de acuerdo con el flujo de entrega que gestiona la continuación.</p><p>La ficha publicada especifica audio de 24 kHz y enumera los formatos de salida WAV, PCM, FLAC, MP3, AAC y Opus. La guía del servicio de voz trata MP3 para entrega comprimida, WAV para PCM sin comprimir, FLAC para compresión sin pérdida y PCM u Opus para streaming. Elija un formato admitido por el flujo conectado y adecuado para su reproductor o fase de procesamiento. La selección del formato y el comportamiento del streaming son distintos de la propia adaptación de voz.</p><p>Arquitectura del modelo y límites prácticos</p><p>El anuncio describe una arquitectura autorregresiva de flow matching con una base de decodificador Transformer de 3.4B, un Transformer acústico de 390 millones de parámetros y un códec de audio neuronal de 300 millones de parámetros. El decodificador predice el contenido semántico y el componente acústico produce la representación del habla, mientras que el códec se encarga del audio. Estos componentes explican la denominación aproximada de modelo de 4B; no son idiomas de entrada adicionales ni un modelo distinto de generación de respuestas.</p><p>Una salida práctica es la grabación sintetizada o el flujo de audio asociado a su guion preparado y a la voz elegida. Conserve esas asociaciones al generar varias secciones para que la aplicación pueda guardar, reproducir o ensamblar el material correcto. El modelo produce audio, en lugar de una transcripción, un vector de búsqueda semántica o una respuesta factual recién redactada.</p><p>Conserve la edición de voz 2603, el idioma compatible y el estilo de referencia. Las fuentes consultadas aportan la afirmación de dos minutos nativos y la recomendación de preparar menos de 300 palabras, pero no establecen un límite estricto independiente de caracteres de texto ni de duración total de una grabación ensamblada. Utilice los requisitos reales de texto, voz y entrega para definir el recurso de audio terminado.</p>",
  "aboutText": "Voxtral TTS es el modelo de conversión de texto a voz de 4B de Mistral AI para generar audio hablado a partir de texto y una referencia de voz. La página del modelo del fabricante identifica la edición 2603 como voxtral-mini-tts-2603, mientras que la ficha de los pesos publicados se denomina Voxtral 4B TTS 2603. Esta entrada corresponde a esa versión de generación de voz, distinta de Voxtral Small para comprensión de audio, transcripción y modelos posteriores de entrada en tiempo real.\n\nVoz expresiva y adaptación de voz\n\nEl modelo está diseñado para captar las pausas, el ritmo, la entonación, el acento y la expresión emocional de una voz de referencia. La voz actúa como una instrucción sobre cómo debe sonar el texto; la presentación del fabricante no exige etiquetas independientes de prosodia o emoción ni una transcripción de la grabación de referencia. El texto de origen determina lo que se dice, mientras que la referencia de audio orienta la interpretación.\n\nLa presentación describe la adaptación de una voz con tan solo dos o tres segundos de audio. La descripción de la arquitectura habla de referencias de voz de cinco a veinticinco segundos. Esas afirmaciones tienen alcances diferentes: un ejemplo de adaptación breve no obliga a utilizar la referencia más corta posible. Elija voz clara que represente el estilo y el acento deseados para el resultado final.\n\nLa ficha publicada incluye veinte voces predefinidas y adaptación a voces nuevas. El flujo de voz del fabricante puede utilizar un perfil de voz guardado o un clip de referencia de un solo uso. Guardar un perfil permite reutilizar la misma referencia de voz en solicitudes de voz independientes, mientras que un clip de un solo uso la proporciona para la tarea actual. Un perfil y una grabación generada son recursos diferentes.\n\nIdiomas y locución entre idiomas\n\nLa versión admite inglés, francés, español, alemán, italiano, portugués, neerlandés, árabe e hindi, con variación dialectal, transferencia de voz entre idiomas y mezcla de idiomas descritas por el fabricante. Para obtener el mejor resultado, la guía de voz recomienda que el idioma de la referencia coincida con el del texto. La transferencia entre idiomas puede conservar el acento de la referencia al pronunciar el texto preparado en otro idioma compatible.\n\nUna tarea práctica de narración puede utilizar el mismo estilo de voz para una explicación en distintos idiomas compatibles, con cada texto preparado para su oyente previsto. La respuesta de un asistente de voz puede utilizar un guion breve y conversacional, en lugar de leer en voz alta un documento sin editar. El modelo de conversión de texto a voz pronuncia las palabras preparadas; cualquier fase de traducción o redacción de respuestas que produzca esas palabras es un paso independiente.\n\nPreparación del texto\n\nLa guía de voz del fabricante recomienda texto que pueda verbalizarse. Escriba los números y los símbolos tal como deban pronunciarse para que el modelo no tenga que elegir entre distintas lecturas. Un número puede ser una cantidad, una hora o un identificador; defina la redacción oral prevista antes de la síntesis. Desarrolle las abreviaturas cuando importe la pronunciación y utilice letras separadas cuando esa sea la lectura deseada.\n\nEvite formato enriquecido, emojis y caracteres especiales que no vayan a reproducirse como contenido hablado. Prepare oraciones completas con la puntuación y las palabras necesarias para la interpretación. La guía recomienda entradas de menos de 300 palabras para obtener mejores resultados. Es una recomendación de calidad, no una longitud máxima de entrada declarada como límite estricto.\n\nPara una explicación de un procedimiento, escriba la acción y la condición en una frase que el oyente pueda seguir. Para un anuncio, coloque la información importante antes de los detalles opcionales. Para una respuesta de voz, conserve la respuesta factual y elimine el formato exclusivo de pantalla o las anotaciones de fuentes que no deban pronunciarse. Estos preparativos hacen que el propio guion sea adecuado para audio antes de que la referencia determine su estilo.\n\nStreaming, salida y duración\n\nEl fabricante documenta entrega básica y en streaming y describe la generación nativa de hasta dos minutos de audio. La ficha de los pesos publicados también incluye inferencia por lotes para preparar varias tareas de voz. Las generaciones más largas del servicio utilizan intercalado, en lugar de tratar un bloque nativo como ilimitado. Para narraciones más largas, prepare secciones coherentes y mantenga constantes la voz y la preparación del texto de acuerdo con el flujo de entrega que gestiona la continuación.\n\nLa ficha publicada especifica audio de 24 kHz y enumera los formatos de salida WAV, PCM, FLAC, MP3, AAC y Opus. La guía del servicio de voz trata MP3 para entrega comprimida, WAV para PCM sin comprimir, FLAC para compresión sin pérdida y PCM u Opus para streaming. Elija un formato admitido por el flujo conectado y adecuado para su reproductor o fase de procesamiento. La selección del formato y el comportamiento del streaming son distintos de la propia adaptación de voz.\n\nArquitectura del modelo y límites prácticos\n\nEl anuncio describe una arquitectura autorregresiva de flow matching con una base de decodificador Transformer de 3.4B, un Transformer acústico de 390 millones de parámetros y un códec de audio neuronal de 300 millones de parámetros. El decodificador predice el contenido semántico y el componente acústico produce la representación del habla, mientras que el códec se encarga del audio. Estos componentes explican la denominación aproximada de modelo de 4B; no son idiomas de entrada adicionales ni un modelo distinto de generación de respuestas.\n\nUna salida práctica es la grabación sintetizada o el flujo de audio asociado a su guion preparado y a la voz elegida. Conserve esas asociaciones al generar varias secciones para que la aplicación pueda guardar, reproducir o ensamblar el material correcto. El modelo produce audio, en lugar de una transcripción, un vector de búsqueda semántica o una respuesta factual recién redactada.\n\nConserve la edición de voz 2603, el idioma compatible y el estilo de referencia. Las fuentes consultadas aportan la afirmación de dos minutos nativos y la recomendación de preparar menos de 300 palabras, pero no establecen un límite estricto independiente de caracteres de texto ni de duración total de una grabación ensamblada. Utilice los requisitos reales de texto, voz y entrega para definir el recurso de audio terminado.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "83a94208d759d46a9ffca3fd1fe0c4ab84e479f68b01cbee572bd4d6ce135f49",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "es",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Mistral: Voxtral Mini TTS</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Cerrar\">×</button></div><div class=\"idline\"><span>Mistral /</span><code>mistralai/voxtral-mini-tts-2603</code><button type=\"button\" id=\"copy-id\">Copiar ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Secciones de la ficha del modelo\"><button type=\"button\" data-card-jump=\"overview\">Primeros pasos</button><button type=\"button\" data-card-jump=\"methods\">Entradas y métodos</button><button type=\"button\" data-card-jump=\"pricing\">Planes</button><button type=\"button\" data-card-jump=\"examples\">Ejemplos</button><button type=\"button\" data-card-jump=\"results\">Resultados</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Métodos de API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|mistralai%2Fvoxtral-mini-tts-2603\">Síntesis de voz</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Primeros pasos</h3><p class=\"mdesc-full\">Voxtral TTS es el modelo de generación de voz de 4B de Mistral AI con adaptación de voz basada en referencias en nueve idiomas. Convierte texto preparado en audio expresivo, admite referencias de voz reutilizables o de un solo uso y streaming, y produce salida de 24 kHz en los formatos de audio documentados.</p><dl class=\"card-io\" data-card-io><div><dt>Entradas aceptadas</dt><dd>Texto</dd></div><div><dt>Resultados</dt><dd>Audio</dd></div></dl><details class=\"card-about\"><summary>Sobre el modelo</summary><p class=\"note-s\" data-model-method-boundary>Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.</p><div class=\"mabout\" id=\"m-about\"><p>Voxtral TTS es el modelo de conversión de texto a voz de 4B de Mistral AI para generar audio hablado a partir de texto y una referencia de voz. La página del modelo del fabricante identifica la edición 2603 como voxtral-mini-tts-2603, mientras que la ficha de los pesos publicados se denomina Voxtral 4B TTS 2603. Esta entrada corresponde a esa versión de generación de voz, distinta de Voxtral Small para comprensión de audio, transcripción y modelos posteriores de entrada en tiempo real.</p><p>Voz expresiva y adaptación de voz</p><p>El modelo está diseñado para captar las pausas, el ritmo, la entonación, el acento y la expresión emocional de una voz de referencia. La voz actúa como una instrucción sobre cómo debe sonar el texto; la presentación del fabricante no exige etiquetas independientes de prosodia o emoción ni una transcripción de la grabación de referencia. El texto de origen determina lo que se dice, mientras que la referencia de audio orienta la interpretación.</p><p>La presentación describe la adaptación de una voz con tan solo dos o tres segundos de audio. La descripción de la arquitectura habla de referencias de voz de cinco a veinticinco segundos. Esas afirmaciones tienen alcances diferentes: un ejemplo de adaptación breve no obliga a utilizar la referencia más corta posible. Elija voz clara que represente el estilo y el acento deseados para el resultado final.</p><p>La ficha publicada incluye veinte voces predefinidas y adaptación a voces nuevas. El flujo de voz del fabricante puede utilizar un perfil de voz guardado o un clip de referencia de un solo uso. Guardar un perfil permite reutilizar la misma referencia de voz en solicitudes de voz independientes, mientras que un clip de un solo uso la proporciona para la tarea actual. Un perfil y una grabación generada son recursos diferentes.</p><p>Idiomas y locución entre idiomas</p><p>La versión admite inglés, francés, español, alemán, italiano, portugués, neerlandés, árabe e hindi, con variación dialectal, transferencia de voz entre idiomas y mezcla de idiomas descritas por el fabricante. Para obtener el mejor resultado, la guía de voz recomienda que el idioma de la referencia coincida con el del texto. La transferencia entre idiomas puede conservar el acento de la referencia al pronunciar el texto preparado en otro idioma compatible.</p><p>Una tarea práctica de narración puede utilizar el mismo estilo de voz para una explicación en distintos idiomas compatibles, con cada texto preparado para su oyente previsto. La respuesta de un asistente de voz puede utilizar un guion breve y conversacional, en lugar de leer en voz alta un documento sin editar. El modelo de conversión de texto a voz pronuncia las palabras preparadas; cualquier fase de traducción o redacción de respuestas que produzca esas palabras es un paso independiente.</p><p>Preparación del texto</p><p>La guía de voz del fabricante recomienda texto que pueda verbalizarse. Escriba los números y los símbolos tal como deban pronunciarse para que el modelo no tenga que elegir entre distintas lecturas. Un número puede ser una cantidad, una hora o un identificador; defina la redacción oral prevista antes de la síntesis. Desarrolle las abreviaturas cuando importe la pronunciación y utilice letras separadas cuando esa sea la lectura deseada.</p><p>Evite formato enriquecido, emojis y caracteres especiales que no vayan a reproducirse como contenido hablado. Prepare oraciones completas con la puntuación y las palabras necesarias para la interpretación. La guía recomienda entradas de menos de 300 palabras para obtener mejores resultados. Es una recomendación de calidad, no una longitud máxima de entrada declarada como límite estricto.</p><p>Para una explicación de un procedimiento, escriba la acción y la condición en una frase que el oyente pueda seguir. Para un anuncio, coloque la información importante antes de los detalles opcionales. Para una respuesta de voz, conserve la respuesta factual y elimine el formato exclusivo de pantalla o las anotaciones de fuentes que no deban pronunciarse. Estos preparativos hacen que el propio guion sea adecuado para audio antes de que la referencia determine su estilo.</p><p>Streaming, salida y duración</p><p>El fabricante documenta entrega básica y en streaming y describe la generación nativa de hasta dos minutos de audio. La ficha de los pesos publicados también incluye inferencia por lotes para preparar varias tareas de voz. Las generaciones más largas del servicio utilizan intercalado, en lugar de tratar un bloque nativo como ilimitado. Para narraciones más largas, prepare secciones coherentes y mantenga constantes la voz y la preparación del texto de acuerdo con el flujo de entrega que gestiona la continuación.</p><p>La ficha publicada especifica audio de 24 kHz y enumera los formatos de salida WAV, PCM, FLAC, MP3, AAC y Opus. La guía del servicio de voz trata MP3 para entrega comprimida, WAV para PCM sin comprimir, FLAC para compresión sin pérdida y PCM u Opus para streaming. Elija un formato admitido por el flujo conectado y adecuado para su reproductor o fase de procesamiento. La selección del formato y el comportamiento del streaming son distintos de la propia adaptación de voz.</p><p>Arquitectura del modelo y límites prácticos</p><p>El anuncio describe una arquitectura autorregresiva de flow matching con una base de decodificador Transformer de 3.4B, un Transformer acústico de 390 millones de parámetros y un códec de audio neuronal de 300 millones de parámetros. El decodificador predice el contenido semántico y el componente acústico produce la representación del habla, mientras que el códec se encarga del audio. Estos componentes explican la denominación aproximada de modelo de 4B; no son idiomas de entrada adicionales ni un modelo distinto de generación de respuestas.</p><p>Una salida práctica es la grabación sintetizada o el flujo de audio asociado a su guion preparado y a la voz elegida. Conserve esas asociaciones al generar varias secciones para que la aplicación pueda guardar, reproducir o ensamblar el material correcto. El modelo produce audio, en lugar de una transcripción, un vector de búsqueda semántica o una respuesta factual recién redactada.</p><p>Conserve la edición de voz 2603, el idioma compatible y el estilo de referencia. Las fuentes consultadas aportan la afirmación de dos minutos nativos y la recomendación de preparar menos de 300 palabras, pero no establecen un límite estricto independiente de caracteres de texto ni de duración total de una grabación ensamblada. Utilice los requisitos reales de texto, voz y entrega para definir el recurso de audio terminado.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible en Ailoot · entradas y métodos</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Síntesis de voz</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Tipos de entrada</dt><dd><code>text</code></dd></div><div><dt>Tipos de salida</dt><dd><code>audio</code></dd></div><div><dt>Formato de salida</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>Valores y límites</th><th>Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>mistralai/voxtral-mini-tts-2603</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>Longitud mínima: 1</div><div>Unidad: caracteres Unicode</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>en_paul_sad, en_paul_neutral, en_paul_happy, en_paul_frustrated, en_paul_excited, en_paul_confident, en_paul_cheerful, en_paul_angry, gb_oliver_neutral, gb_oliver_sad, gb_oliver_excited, gb_oliver_curious, gb_oliver_confident, gb_oliver_cheerful, gb_oliver_angry, gb_jane_sarcasm, gb_jane_confused, gb_jane_shameful, gb_jane_sad, gb_jane_neutral, gb_jane_jealousy, gb_jane_frustrated, gb_jane_curious, gb_jane_confident, fr_marie_sad, fr_marie_neutral, fr_marie_happy, fr_marie_excited, fr_marie_curious, fr_marie_angry</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</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>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>mp3</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaciones de materiales de entrada</summary><p class=\"note-s\"><b>text_to_speech</b> · Obligatorio: input</p></details><details class=\"note-s\" data-method-contract><summary>Parámetros del método y ciclo de vida</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parámetro</th><th>Contrato</th></tr></thead><tbody><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>content_type</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>application/json</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>required</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>model, input, voice, response_format</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>voice_ids</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>en_paul_sad, en_paul_neutral, en_paul_happy, en_paul_frustrated, en_paul_excited, en_paul_confident, en_paul_cheerful, en_paul_angry, gb_oliver_neutral, gb_oliver_sad, gb_oliver_excited, gb_oliver_curious, gb_oliver_confident, gb_oliver_cheerful, gb_oliver_angry, gb_jane_sarcasm, gb_jane_confused, gb_jane_shameful, gb_jane_sad, gb_jane_neutral, gb_jane_jealousy, gb_jane_frustrated, gb_jane_curious, gb_jane_confident, fr_marie_sad, fr_marie_neutral, fr_marie_happy, fr_marie_excited, fr_marie_curious, fr_marie_angry</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>response_format</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>mp3</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>max_input_characters</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>null</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>other_options</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>false</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>input</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>texto UTF-8 exacto; recuento de caracteres Unicode sin normalización</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>material_types</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>text</td></tr></tbody></table></div><p>Ciclo de vida: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · task_id real devuelto o registro de la biblioteca multimedia</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\">Selecciona una voz exacta de este perfil de modelo.</p><p class=\"note-s\">Los caracteres de entrada y los segundos de audio son métricas de consumo diferentes.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Planes</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.</p><dl data-price-conditions><dt>Modo rápido</dt><dd>Sin especificar <span class=\"note-s\">Cuando se selecciona el modo rápido</span></dd><dt>Modo flex</dt><dd>Sin especificar <span class=\"note-s\">Cuando se selecciona el modo flex</span></dd><dt>Esfuerzo máximo de razonamiento</dt><dd>Sin especificar <span class=\"note-s\">Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarifas de Ailoot</h4><h4>Precios por configuración</h4><p class=\"note-s\">Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuración</th><th>Tabla de tarifas</th><th>Cantidad facturable</th><th>Unidad de facturación</th><th>Cargo</th></tr></thead><tbody><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Tarifas base por token</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>Tarifa base</td><td data-cell-label=\"Cantidad facturable\"><span class=\"card-cell-label\">Cantidad facturable</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>—</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Entrada · Tokens de entrada</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Salida · Tokens de salida</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Lectura de caché</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escritura en caché</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrada · Escritura en caché, 1 hora</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Ultra</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Cantidad facturable\"><span class=\"card-cell-label\">Cantidad facturable</span>Cada punto de código Unicode cuenta como un carácter, incluidos los caracteres Han.</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por 1K caracteres de entrada</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Entrada · carácter de entrada</span> <b>$0.032</b> <span class=\"price-unit\">por 1K caracteres de entrada</span></div></td></tr></tbody></table></div></div><div data-declared-reference-pricing><h4>Detalles de la tarifa de referencia</h4><p class=\"note-s\">Las tablas de referencia del modelo no cambian la selección del método, las estimaciones de coste ni los cargos. Los cargos aplicados usan las tarifas del método Ailoot seleccionado.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Mistral: Voxtral Mini TTS</summary><h4>Precios por configuración</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuración</th><th>Condiciones de facturación</th><th>Cargo</th></tr></thead><tbody><tr><th data-cell-label=\"Configuración\" scope=\"row\"><span class=\"card-cell-label\">Configuración</span>Mistral: Voxtral Mini TTS · Configuración predeterminada</th><td data-cell-label=\"Condiciones de facturación\"><span class=\"card-cell-label\">Condiciones de facturación</span>Configuración predeterminada</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Entrada · Caracteres de entrada</span> <b>0,000032 US$</b> <span class=\"price-unit\">por carácter de entrada</span></div></td></tr></tbody></table></div></details></div><p class=\"note-s\">Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. <a href=\"/docs/es/billing/reserve/\">Cómo funcionan la reserva y la liquidación →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Solicitudes de ejemplo</h3><h4>Ailoot Ultra · Síntesis de voz</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-1943-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1943-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1943-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1943-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}&quot;\nexport AILOOT_VOICE_ID\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;mistralai/voxtral-mini-tts-2603&quot;, &quot;input&quot;: &quot;Good afternoon! This is a short voice take.&quot;}&#39;)\nvoice=os.environ[&quot;AILOOT_VOICE_ID&quot;]\nallowed=json.loads(&#39;[&quot;en_paul_sad&quot;, &quot;en_paul_neutral&quot;, &quot;en_paul_happy&quot;, &quot;en_paul_frustrated&quot;, &quot;en_paul_excited&quot;, &quot;en_paul_confident&quot;, &quot;en_paul_cheerful&quot;, &quot;en_paul_angry&quot;, &quot;gb_oliver_neutral&quot;, &quot;gb_oliver_sad&quot;, &quot;gb_oliver_excited&quot;, &quot;gb_oliver_curious&quot;, &quot;gb_oliver_confident&quot;, &quot;gb_oliver_cheerful&quot;, &quot;gb_oliver_angry&quot;, &quot;gb_jane_sarcasm&quot;, &quot;gb_jane_confused&quot;, &quot;gb_jane_shameful&quot;, &quot;gb_jane_sad&quot;, &quot;gb_jane_neutral&quot;, &quot;gb_jane_jealousy&quot;, &quot;gb_jane_frustrated&quot;, &quot;gb_jane_curious&quot;, &quot;gb_jane_confident&quot;, &quot;fr_marie_sad&quot;, &quot;fr_marie_neutral&quot;, &quot;fr_marie_happy&quot;, &quot;fr_marie_excited&quot;, &quot;fr_marie_curious&quot;, &quot;fr_marie_angry&quot;]&#39;)\nif voice not in allowed: raise SystemExit(&quot;Choose an accepted voice ID from this exact model profile&quot;)\np[&quot;voice&quot;]=voice\np[&quot;response_format&quot;]=&quot;mp3&quot;\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recibir y guardar resultados</h3><h4>Ailoot Ultra · Síntesis de voz</h4><p class=\"note-s\">mp3</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><details class=\"card-about\"><summary>Otras consultas de contenido</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-1944-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-0\" aria-selected=\"true\" tabindex=\"0\">Biblioteca multimedia</button><button class=\"cg-tab\" id=\"model-code-1944-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Estado de la tarea</button><button class=\"cg-tab\" id=\"model-code-1944-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1944-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Detalles del archivo</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1944-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-assets.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1944-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_MEDIA_TASK_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/tasks/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-task.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-task.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1944-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1944-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}&quot;\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c &#39;import os,urllib.parse;print(urllib.parse.quote(os.environ[&quot;AILOOT_ASSET_ID&quot;],safe=&quot;&quot;))&#39;)\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/media/assets/$resource_id&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o media-asset.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;media-asset.json&quot;).read_text())))\nPY_RESULT\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Conserva todos los resultados completados</h5><p class=\"note-s\">Conserva todas las respuestas, archivos y partes de contenido completos recibidos.</p><p class=\"note-s\">Conserva el resultado binario completo y las cabeceras. Si se devuelve JSON o varias salidas, conserva todos los elementos de datos y descarga el recurso de cada URL firmada real.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Si es necesario revisar la respuesta original</h5><p class=\"note-s\">Conserva el operation_id/X-Client-Request-ID original para la conciliación sin volver a enviar la solicitud; no hay una ruta dedicada para consultar periódicamente el audio.</p></div><details class=\"card-about\" data-output-fields><summary>Campos de respuesta</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>Errores y siguientes pasos</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respuesta</th><th>Condición</th><th>Siguiente paso</th></tr></thead><tbody><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>Campos obligatorios, representación del material o valor del parámetro no válidos</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Corrige los campos indicados antes de una nueva solicitud de creación.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span><code>server_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>La respuesta devuelta indica que la operación o el resultado requiere una comprobación</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva el ID original de operación o tarea devuelto, las cabeceras de la solicitud y la respuesta; continúa con las lecturas admitidas de esa operación original. No vuelvas a enviar la solicitud de creación.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias del modelo</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=mistralai%2Fvoxtral-mini-tts-2603&amp;route=Ultra&amp;caller=mistralai%2Fvoxtral-mini-tts-2603&amp;fmt=speech\"><code>mistralai/voxtral-mini-tts-2603</code></a></span></p><h4>Alias de rutas de métodos</h4><p class=\"note-s\">Usa las rutas de método indicadas arriba.</p><h4>ID de modelo relacionados</h4><p class=\"note-s\"><a href=\"#m=mistralai%2Fvoxtral-mini-tts-2603&amp;route=Ultra&amp;caller=mistralai%2Fvoxtral-mini-tts-2603&amp;fmt=speech\"><code>mistralai/voxtral-mini-tts-2603</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "mistralai/voxtral-mini-tts-2603",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|mistralai%2Fvoxtral-mini-tts-2603",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Campos obligatorios, representación del material o valor del parámetro no válidos",
                "http_status": 400,
                "recovery": "Corrige los campos indicados antes de una nueva solicitud de creación.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La respuesta devuelta indica que la operación o el resultado requiere una comprobación",
                "http_status": null,
                "recovery": "Conserva el ID original de operación o tarea devuelto, las cabeceras de la solicitud y la respuesta; continúa con las lecturas admitidas de esa operación original. No vuelvas a enviar la solicitud de creación.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conserva el operation_id/X-Client-Request-ID original para la conciliación sin volver a enviar la solicitud; no hay una ruta dedicada para consultar periódicamente el 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 el resultado binario completo y las cabeceras. Si se devuelve JSON o varias salidas, conserva todos los elementos de datos y descarga el recurso de cada URL firmada real.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mistralai/voxtral-mini-tts-2603"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caracteres Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "en_paul_sad",
                  "en_paul_neutral",
                  "en_paul_happy",
                  "en_paul_frustrated",
                  "en_paul_excited",
                  "en_paul_confident",
                  "en_paul_cheerful",
                  "en_paul_angry",
                  "gb_oliver_neutral",
                  "gb_oliver_sad",
                  "gb_oliver_excited",
                  "gb_oliver_curious",
                  "gb_oliver_confident",
                  "gb_oliver_cheerful",
                  "gb_oliver_angry",
                  "gb_jane_sarcasm",
                  "gb_jane_confused",
                  "gb_jane_shameful",
                  "gb_jane_sad",
                  "gb_jane_neutral",
                  "gb_jane_jealousy",
                  "gb_jane_frustrated",
                  "gb_jane_curious",
                  "gb_jane_confident",
                  "fr_marie_sad",
                  "fr_marie_neutral",
                  "fr_marie_happy",
                  "fr_marie_excited",
                  "fr_marie_curious",
                  "fr_marie_angry"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Selecciona una voz exacta de este perfil de modelo.",
            "Los caracteres de entrada y los segundos de audio son métricas de consumo diferentes."
          ],
          "input": {
            "content_type": "application/json",
            "input": "texto UTF-8 exacto; recuento de caracteres Unicode sin normalización",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "en_paul_sad",
              "en_paul_neutral",
              "en_paul_happy",
              "en_paul_frustrated",
              "en_paul_excited",
              "en_paul_confident",
              "en_paul_cheerful",
              "en_paul_angry",
              "gb_oliver_neutral",
              "gb_oliver_sad",
              "gb_oliver_excited",
              "gb_oliver_curious",
              "gb_oliver_confident",
              "gb_oliver_cheerful",
              "gb_oliver_angry",
              "gb_jane_sarcasm",
              "gb_jane_confused",
              "gb_jane_shameful",
              "gb_jane_sad",
              "gb_jane_neutral",
              "gb_jane_jealousy",
              "gb_jane_frustrated",
              "gb_jane_curious",
              "gb_jane_confident",
              "fr_marie_sad",
              "fr_marie_neutral",
              "fr_marie_happy",
              "fr_marie_excited",
              "fr_marie_curious",
              "fr_marie_angry"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id real devuelto o registro de la biblioteca multimedia",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "20ebfeb88167b8c33fea",
            "label": "Mistral: Voxtral Mini TTS",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Configuración predeterminada"
                },
                "label": "Mistral: Voxtral Mini TTS · Configuración predeterminada",
                "units": [
                  {
                    "amount": "0.000032",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "3ceae9e888e4cc9cd6e6009e",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"mistralai/voxtral-mini-tts-2603\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"en_paul_sad\", \"en_paul_neutral\", \"en_paul_happy\", \"en_paul_frustrated\", \"en_paul_excited\", \"en_paul_confident\", \"en_paul_cheerful\", \"en_paul_angry\", \"gb_oliver_neutral\", \"gb_oliver_sad\", \"gb_oliver_excited\", \"gb_oliver_curious\", \"gb_oliver_confident\", \"gb_oliver_cheerful\", \"gb_oliver_angry\", \"gb_jane_sarcasm\", \"gb_jane_confused\", \"gb_jane_shameful\", \"gb_jane_sad\", \"gb_jane_neutral\", \"gb_jane_jealousy\", \"gb_jane_frustrated\", \"gb_jane_curious\", \"gb_jane_confident\", \"fr_marie_sad\", \"fr_marie_neutral\", \"fr_marie_happy\", \"fr_marie_excited\", \"fr_marie_curious\", \"fr_marie_angry\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3.2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    }
  ],
  "model_id": "mistralai/voxtral-mini-tts-2603",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "fe6da608341530a1614a005f9330df38a854f9d0817e79357c7e5b903f3bc9be",
    "input_html_sha256": "6d93c2ab76dcfc508bca737b0a7e21991791fcc71135bde2b18863662bf40927",
    "private_audit_sha256": "0b92d8122cbf320e414b7d5cf7503024469cf4ec0e34f9f9b605e609d708659a",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/es/mistralai-voxtral-mini-tts-2603/",
    "description": "Voxtral TTS es el modelo de generación de voz de 4B de Mistral AI con adaptación de voz basada en referencias en nueve idiomas. Convierte texto preparado en audio expresivo, admite referencias de voz reutilizables o de un solo uso y streaming, y produce salida de 24 kHz en los formatos de audio documentados.",
    "locale": "es",
    "md_url": "https://ailoot.ai/models/es/mistralai-voxtral-mini-tts-2603/index.md",
    "title": "Mistral: Voxtral Mini TTS — Ailoot",
    "url": "https://ailoot.ai/models/es/mistralai-voxtral-mini-tts-2603/"
  },
  "rawModel": {
    "about": "Voxtral TTS es el modelo de conversión de texto a voz de 4B de Mistral AI para generar audio hablado a partir de texto y una referencia de voz. La página del modelo del fabricante identifica la edición 2603 como voxtral-mini-tts-2603, mientras que la ficha de los pesos publicados se denomina Voxtral 4B TTS 2603. Esta entrada corresponde a esa versión de generación de voz, distinta de Voxtral Small para comprensión de audio, transcripción y modelos posteriores de entrada en tiempo real.\n\nVoz expresiva y adaptación de voz\n\nEl modelo está diseñado para captar las pausas, el ritmo, la entonación, el acento y la expresión emocional de una voz de referencia. La voz actúa como una instrucción sobre cómo debe sonar el texto; la presentación del fabricante no exige etiquetas independientes de prosodia o emoción ni una transcripción de la grabación de referencia. El texto de origen determina lo que se dice, mientras que la referencia de audio orienta la interpretación.\n\nLa presentación describe la adaptación de una voz con tan solo dos o tres segundos de audio. La descripción de la arquitectura habla de referencias de voz de cinco a veinticinco segundos. Esas afirmaciones tienen alcances diferentes: un ejemplo de adaptación breve no obliga a utilizar la referencia más corta posible. Elija voz clara que represente el estilo y el acento deseados para el resultado final.\n\nLa ficha publicada incluye veinte voces predefinidas y adaptación a voces nuevas. El flujo de voz del fabricante puede utilizar un perfil de voz guardado o un clip de referencia de un solo uso. Guardar un perfil permite reutilizar la misma referencia de voz en solicitudes de voz independientes, mientras que un clip de un solo uso la proporciona para la tarea actual. Un perfil y una grabación generada son recursos diferentes.\n\nIdiomas y locución entre idiomas\n\nLa versión admite inglés, francés, español, alemán, italiano, portugués, neerlandés, árabe e hindi, con variación dialectal, transferencia de voz entre idiomas y mezcla de idiomas descritas por el fabricante. Para obtener el mejor resultado, la guía de voz recomienda que el idioma de la referencia coincida con el del texto. La transferencia entre idiomas puede conservar el acento de la referencia al pronunciar el texto preparado en otro idioma compatible.\n\nUna tarea práctica de narración puede utilizar el mismo estilo de voz para una explicación en distintos idiomas compatibles, con cada texto preparado para su oyente previsto. La respuesta de un asistente de voz puede utilizar un guion breve y conversacional, en lugar de leer en voz alta un documento sin editar. El modelo de conversión de texto a voz pronuncia las palabras preparadas; cualquier fase de traducción o redacción de respuestas que produzca esas palabras es un paso independiente.\n\nPreparación del texto\n\nLa guía de voz del fabricante recomienda texto que pueda verbalizarse. Escriba los números y los símbolos tal como deban pronunciarse para que el modelo no tenga que elegir entre distintas lecturas. Un número puede ser una cantidad, una hora o un identificador; defina la redacción oral prevista antes de la síntesis. Desarrolle las abreviaturas cuando importe la pronunciación y utilice letras separadas cuando esa sea la lectura deseada.\n\nEvite formato enriquecido, emojis y caracteres especiales que no vayan a reproducirse como contenido hablado. Prepare oraciones completas con la puntuación y las palabras necesarias para la interpretación. La guía recomienda entradas de menos de 300 palabras para obtener mejores resultados. Es una recomendación de calidad, no una longitud máxima de entrada declarada como límite estricto.\n\nPara una explicación de un procedimiento, escriba la acción y la condición en una frase que el oyente pueda seguir. Para un anuncio, coloque la información importante antes de los detalles opcionales. Para una respuesta de voz, conserve la respuesta factual y elimine el formato exclusivo de pantalla o las anotaciones de fuentes que no deban pronunciarse. Estos preparativos hacen que el propio guion sea adecuado para audio antes de que la referencia determine su estilo.\n\nStreaming, salida y duración\n\nEl fabricante documenta entrega básica y en streaming y describe la generación nativa de hasta dos minutos de audio. La ficha de los pesos publicados también incluye inferencia por lotes para preparar varias tareas de voz. Las generaciones más largas del servicio utilizan intercalado, en lugar de tratar un bloque nativo como ilimitado. Para narraciones más largas, prepare secciones coherentes y mantenga constantes la voz y la preparación del texto de acuerdo con el flujo de entrega que gestiona la continuación.\n\nLa ficha publicada especifica audio de 24 kHz y enumera los formatos de salida WAV, PCM, FLAC, MP3, AAC y Opus. La guía del servicio de voz trata MP3 para entrega comprimida, WAV para PCM sin comprimir, FLAC para compresión sin pérdida y PCM u Opus para streaming. Elija un formato admitido por el flujo conectado y adecuado para su reproductor o fase de procesamiento. La selección del formato y el comportamiento del streaming son distintos de la propia adaptación de voz.\n\nArquitectura del modelo y límites prácticos\n\nEl anuncio describe una arquitectura autorregresiva de flow matching con una base de decodificador Transformer de 3.4B, un Transformer acústico de 390 millones de parámetros y un códec de audio neuronal de 300 millones de parámetros. El decodificador predice el contenido semántico y el componente acústico produce la representación del habla, mientras que el códec se encarga del audio. Estos componentes explican la denominación aproximada de modelo de 4B; no son idiomas de entrada adicionales ni un modelo distinto de generación de respuestas.\n\nUna salida práctica es la grabación sintetizada o el flujo de audio asociado a su guion preparado y a la voz elegida. Conserve esas asociaciones al generar varias secciones para que la aplicación pueda guardar, reproducir o ensamblar el material correcto. El modelo produce audio, en lugar de una transcripción, un vector de búsqueda semántica o una respuesta factual recién redactada.\n\nConserve la edición de voz 2603, el idioma compatible y el estilo de referencia. Las fuentes consultadas aportan la afirmación de dos minutos nativos y la recomendación de preparar menos de 300 palabras, pero no establecen un límite estricto independiente de caracteres de texto ni de duración total de una grabación ensamblada. Utilice los requisitos reales de texto, voz y entrega para definir el recurso de audio terminado.",
    "alias_of": null,
    "aliases": [],
    "author": "Mistral",
    "available": null,
    "canonical_model": "mistralai/voxtral-mini-tts-2603",
    "capabilities": {
      "context_length": 4096,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ],
        "summary": "Consulta los precios completos de la configuración en los detalles."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "mistralai/voxtral-mini-tts-2603",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Campos obligatorios, representación del material o valor del parámetro no válidos",
                "http_status": 400,
                "recovery": "Corrige los campos indicados antes de una nueva solicitud de creación.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La respuesta devuelta indica que la operación o el resultado requiere una comprobación",
                "http_status": null,
                "recovery": "Conserva el ID original de operación o tarea devuelto, las cabeceras de la solicitud y la respuesta; continúa con las lecturas admitidas de esa operación original. No vuelvas a enviar la solicitud de creación.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conserva el operation_id/X-Client-Request-ID original para la conciliación sin volver a enviar la solicitud; no hay una ruta dedicada para consultar periódicamente el 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 el resultado binario completo y las cabeceras. Si se devuelve JSON o varias salidas, conserva todos los elementos de datos y descarga el recurso de cada URL firmada real.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "mp3",
              "http_success": 200
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mistralai/voxtral-mini-tts-2603"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "limit_known": false,
                "maximum_length": null,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "caracteres Unicode"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "en_paul_sad",
                  "en_paul_neutral",
                  "en_paul_happy",
                  "en_paul_frustrated",
                  "en_paul_excited",
                  "en_paul_confident",
                  "en_paul_cheerful",
                  "en_paul_angry",
                  "gb_oliver_neutral",
                  "gb_oliver_sad",
                  "gb_oliver_excited",
                  "gb_oliver_curious",
                  "gb_oliver_confident",
                  "gb_oliver_cheerful",
                  "gb_oliver_angry",
                  "gb_jane_sarcasm",
                  "gb_jane_confused",
                  "gb_jane_shameful",
                  "gb_jane_sad",
                  "gb_jane_neutral",
                  "gb_jane_jealousy",
                  "gb_jane_frustrated",
                  "gb_jane_curious",
                  "gb_jane_confident",
                  "fr_marie_sad",
                  "fr_marie_neutral",
                  "fr_marie_happy",
                  "fr_marie_excited",
                  "fr_marie_curious",
                  "fr_marie_angry"
                ],
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "mp3"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": true,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "every field outside exactmodel,input,voice,response_format",
              "stream/speed/reference speech options"
            ]
          },
          "hints": [
            "Selecciona una voz exacta de este perfil de modelo.",
            "Los caracteres de entrada y los segundos de audio son métricas de consumo diferentes."
          ],
          "input": {
            "content_type": "application/json",
            "input": "texto UTF-8 exacto; recuento de caracteres Unicode sin normalización",
            "material_types": [
              "text"
            ],
            "max_input_characters": null,
            "other_options": false,
            "required": [
              "model",
              "input",
              "voice",
              "response_format"
            ],
            "response_format": [
              "mp3"
            ],
            "voice_ids": [
              "en_paul_sad",
              "en_paul_neutral",
              "en_paul_happy",
              "en_paul_frustrated",
              "en_paul_excited",
              "en_paul_confident",
              "en_paul_cheerful",
              "en_paul_angry",
              "gb_oliver_neutral",
              "gb_oliver_sad",
              "gb_oliver_excited",
              "gb_oliver_curious",
              "gb_oliver_confident",
              "gb_oliver_cheerful",
              "gb_oliver_angry",
              "gb_jane_sarcasm",
              "gb_jane_confused",
              "gb_jane_shameful",
              "gb_jane_sad",
              "gb_jane_neutral",
              "gb_jane_jealousy",
              "gb_jane_frustrated",
              "gb_jane_curious",
              "gb_jane_confident",
              "fr_marie_sad",
              "fr_marie_neutral",
              "fr_marie_happy",
              "fr_marie_excited",
              "fr_marie_curious",
              "fr_marie_angry"
            ]
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id real devuelto o registro de la biblioteca multimedia",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "family": "audio",
            "format": "mp3",
            "http_success": 200,
            "response": "full binary MP3 plus response headers",
            "result": "complete playable owned MP3"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "declared_tariff_references": [
          {
            "client_selectable": false,
            "key": "20ebfeb88167b8c33fea",
            "label": "Mistral: Voxtral Mini TTS",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Configuración predeterminada"
                },
                "label": "Mistral: Voxtral Mini TTS · Configuración predeterminada",
                "units": [
                  {
                    "amount": "0.000032",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "3ceae9e888e4cc9cd6e6009e",
                    "label": "Input characters",
                    "public_unit_label": "per input character",
                    "quantity": "1",
                    "rate_role": "declared_tariff_rate",
                    "side": "in",
                    "unit": "input_character"
                  }
                ]
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}\"\nexport AILOOT_VOICE_ID\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"mistralai/voxtral-mini-tts-2603\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"en_paul_sad\", \"en_paul_neutral\", \"en_paul_happy\", \"en_paul_frustrated\", \"en_paul_excited\", \"en_paul_confident\", \"en_paul_cheerful\", \"en_paul_angry\", \"gb_oliver_neutral\", \"gb_oliver_sad\", \"gb_oliver_excited\", \"gb_oliver_curious\", \"gb_oliver_confident\", \"gb_oliver_cheerful\", \"gb_oliver_angry\", \"gb_jane_sarcasm\", \"gb_jane_confused\", \"gb_jane_shameful\", \"gb_jane_sad\", \"gb_jane_neutral\", \"gb_jane_jealousy\", \"gb_jane_frustrated\", \"gb_jane_curious\", \"gb_jane_confident\", \"fr_marie_sad\", \"fr_marie_neutral\", \"fr_marie_happy\", \"fr_marie_excited\", \"fr_marie_curious\", \"fr_marie_angry\"]')\nif voice not in allowed: raise SystemExit(\"Choose an accepted voice ID from this exact model profile\")\np[\"voice\"]=voice\np[\"response_format\"]=\"mp3\"\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "curl",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-assets.json\n",
            "label": "List actual media assets",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_MEDIA_TASK_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_MEDIA_TASK_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/tasks/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-task.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-task.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual media task",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}\"\nexport AILOOT_ASSET_ID\nresource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ[\"AILOOT_ASSET_ID\"],safe=\"\"))')\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/media/assets/$resource_id\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o media-asset.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"media-asset.json\").read_text())))\nPY_RESULT\n",
            "label": "Read actual asset metadata",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Select exact voice from this model profile.",
          "Input characters and audio seconds are different meters."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_character": 3.2e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.032000",
                "amount_unit": "usd_per_1000_characters",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_character",
                "label": "input character",
                "native_amount_usd_per_unit": "0.000032",
                "native_quantity": 1,
                "public_unit_label": "per 1000 input character",
                "quantity": "1000",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_character"
              }
            ]
          }
        ],
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.032000",
            "amount_unit": "usd_per_1000_characters",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_character",
            "label": "input character",
            "native_amount_usd_per_unit": "0.000032",
            "native_quantity": 1,
            "public_unit_label": "per 1000 input character",
            "quantity": "1000",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_character"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "mistralai/voxtral-mini-tts-2603",
        "request_model_id": "mistralai/voxtral-mini-tts-2603",
        "route_label": "Ultra"
      }
    ],
    "name": "Mistral: Voxtral Mini TTS",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "hosted_reference"
        },
        "dimensions": {
          "variant": null
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000032",
            "amount_unit": "usd_per_input_character",
            "conditions": {
              "variant": null
            },
            "key": "pricing.prompt",
            "label": "prompt",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_character"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_not_separately_charged_output",
            "conditions": {
              "variant": null
            },
            "key": "pricing.completion",
            "label": "completion",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "not_separately_charged_output"
          }
        ]
      }
    ],
    "public_id": "mistralai/voxtral-mini-tts-2603",
    "short": "Voxtral TTS es el modelo de generación de voz de 4B de Mistral AI con adaptación de voz basada en referencias en nueve idiomas. Convierte texto preparado en audio expresivo, admite referencias de voz reutilizables o de un solo uso y streaming, y produce salida de 24 kHz en los formatos de audio documentados."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Voxtral TTS es el modelo de generación de voz de 4B de Mistral AI con adaptación de voz basada en referencias en nueve idiomas. Convierte texto preparado en audio expresivo, admite referencias de voz reutilizables o de un solo uso y streaming, y produce salida de 24 kHz en los formatos de audio documentados.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "218dffec4b03f7ef8541da6e1c7e69e5c1335cdc0c7234ba52a928b7a48b61a6",
    "renderer_sha256": "b6d488b4bdee68568e5b17d2d4871b2ba1885e1032091b635a7a58ad2ca224e7"
  },
  "sourceRevision": "9a1d6b8bb19e5289aeedfd9233808a81f3c4f9e947e813e7b2a65877ad6adb97"
}
