{
  "aboutHtml": "<p>MAI-Voice-2.1 es el modelo de conversión de texto a voz mediante indicaciones de Microsoft AI para trabajos donde importan la interpretación expresiva y la fidelidad del audio. Su ficha de modelo abarca veintitrés idiomas y veintiséis variantes regionales, con entonación natural, ritmo y matices emocionales. El fabricante identifica los audiolibros, la narración de medios, la creación de contenido y las locuciones como usos principales. Esta edición se centra en contenido expresivo más largo; MAI-Voice-2.1-Flash es la opción independiente diseñada para interacciones sensibles a la latencia.</p><h4>Narración con un hablante coherente</h4><p>La ficha del modelo documenta una identidad de voz que se reproduce de forma coherente en los idiomas compatibles. La generación de contenido largo utiliza segmentación y transferencia de contexto para mejorar la continuidad entre pasajes. Esto resulta útil para una lección, un capítulo de audiolibro o una secuencia de secciones de locución relacionadas que deban conservar el carácter del narrador. Preparad pasajes coherentes con límites claros y mantened la misma elección de hablante a lo largo de la pieza.</p><p>La entrada es el texto definitivo, con una referencia opcional del hablante y controles expresivos SSML. Las instrucciones de producción de una narración deben distinguir lo que oye el público de las notas de producción. Para una explicación técnica, escribid una introducción clara, después los pasos reales y la instrucción de cierre. Mantened una forma escrita coherente para los nombres de productos y los términos repetidos. Para una narración localizada, preparad el guion en el idioma de destino; el idioma y la voz seleccionados determinan su realización oral.</p><h4>Hablantes, papeles y control expresivo</h4><p>Microsoft proporciona una biblioteca de voces seleccionadas y documenta el uso de varios hablantes para el diálogo. Harper y Grant ejemplifican identidades de hablante con entradas para varias variantes regionales. Un intercambio educativo entre dos personas puede asignar la pregunta y la explicación a voces distintas y conservar la misma asignación cuando reaparece un papel. Etiquetad claramente las intervenciones para que la conversación deseada quede representada en la entrada de síntesis.</p><p>El tono y la interpretación pueden configurarse por turno de habla o por frase mediante SSML. Los estilos son específicos de cada hablante: el catálogo gestionado enumera estilos de narración o educativos orientados a tareas para voces adecuadas y opciones emocionales, como alegría o alivio, para otras. La entrada estadounidense de Harper admite esos dos estilos emocionales. Seleccionad conjuntamente el hablante y su estilo de interpretación documentado, en lugar de trasladar un estilo de otra voz.</p><p>En una historia o presentación, la expresividad puede distinguir una explicación factual, un pasaje reflexivo y una cita animada. Una frase práctica es: «El primer intento nos dio una imagen incompleta. Al observar toda la secuencia, quedó claro el paso que faltaba». Decidid dónde cambia el significado y preparad las unidades de habla en consecuencia. Escuchad las transiciones para que la interpretación siga la narración, en vez de dar el mismo énfasis a todas las frases.</p><h4>Voz de referencia y resultado de audio</h4><p>El modo opcional de voz personalizada reproduce la voz de un hablante que ha dado su consentimiento a partir de una referencia de audio de cinco a sesenta segundos, sin ajuste fino. Microsoft recomienda una interpretación conversacional natural y una energía moderada en esa referencia, ya que la muestra afecta a la voz generada. Su flujo de voz personalizada exige la aprobación del fabricante y una declaración de consentimiento grabada. La biblioteca de voces prediseñadas es una vía independiente de selección de voz.</p><p>El fabricante permite elegir el formato de salida y su ejemplo publicado de síntesis guarda un MP3 mono a 24 kHz y 160 kbit/s. Estas opciones describen un flujo de salida. Seleccionad la representación de audio para la siguiente etapa de edición o reproducción y mantened asociados a la grabación el guion, el hablante y el orden de las secciones. Un capítulo o una lección terminados pueden contener varios pasajes generados y seguir siendo una experiencia de escucha coherente.</p><h4>Utilizar el resultado de contenido largo</h4><p>MAI-Voice-2.1 se orienta a la naturalidad y la expresión cuando el tiempo de respuesta inmediato importa menos que la interpretación oral. En una pieza extensa, revisad los nombres recurrentes, los límites entre secciones, las voces asignadas al diálogo y los cambios de registro emocional. La documentación establece la capacidad de generar contenido largo y los mecanismos de coherencia sin especificar un guion ilimitado ni una duración máxima de grabación garantizada. El resultado práctico es un audio expresivo cuyo narrador, formulación y progresión coinciden con el material preparado.</p>",
  "aboutText": "MAI-Voice-2.1 es el modelo de conversión de texto a voz mediante indicaciones de Microsoft AI para trabajos donde importan la interpretación expresiva y la fidelidad del audio. Su ficha de modelo abarca veintitrés idiomas y veintiséis variantes regionales, con entonación natural, ritmo y matices emocionales. El fabricante identifica los audiolibros, la narración de medios, la creación de contenido y las locuciones como usos principales. Esta edición se centra en contenido expresivo más largo; MAI-Voice-2.1-Flash es la opción independiente diseñada para interacciones sensibles a la latencia.\n\n### Narración con un hablante coherente\n\nLa ficha del modelo documenta una identidad de voz que se reproduce de forma coherente en los idiomas compatibles. La generación de contenido largo utiliza segmentación y transferencia de contexto para mejorar la continuidad entre pasajes. Esto resulta útil para una lección, un capítulo de audiolibro o una secuencia de secciones de locución relacionadas que deban conservar el carácter del narrador. Preparad pasajes coherentes con límites claros y mantened la misma elección de hablante a lo largo de la pieza.\n\nLa entrada es el texto definitivo, con una referencia opcional del hablante y controles expresivos SSML. Las instrucciones de producción de una narración deben distinguir lo que oye el público de las notas de producción. Para una explicación técnica, escribid una introducción clara, después los pasos reales y la instrucción de cierre. Mantened una forma escrita coherente para los nombres de productos y los términos repetidos. Para una narración localizada, preparad el guion en el idioma de destino; el idioma y la voz seleccionados determinan su realización oral.\n\n### Hablantes, papeles y control expresivo\n\nMicrosoft proporciona una biblioteca de voces seleccionadas y documenta el uso de varios hablantes para el diálogo. Harper y Grant ejemplifican identidades de hablante con entradas para varias variantes regionales. Un intercambio educativo entre dos personas puede asignar la pregunta y la explicación a voces distintas y conservar la misma asignación cuando reaparece un papel. Etiquetad claramente las intervenciones para que la conversación deseada quede representada en la entrada de síntesis.\n\nEl tono y la interpretación pueden configurarse por turno de habla o por frase mediante SSML. Los estilos son específicos de cada hablante: el catálogo gestionado enumera estilos de narración o educativos orientados a tareas para voces adecuadas y opciones emocionales, como alegría o alivio, para otras. La entrada estadounidense de Harper admite esos dos estilos emocionales. Seleccionad conjuntamente el hablante y su estilo de interpretación documentado, en lugar de trasladar un estilo de otra voz.\n\nEn una historia o presentación, la expresividad puede distinguir una explicación factual, un pasaje reflexivo y una cita animada. Una frase práctica es: «El primer intento nos dio una imagen incompleta. Al observar toda la secuencia, quedó claro el paso que faltaba». Decidid dónde cambia el significado y preparad las unidades de habla en consecuencia. Escuchad las transiciones para que la interpretación siga la narración, en vez de dar el mismo énfasis a todas las frases.\n\n### Voz de referencia y resultado de audio\n\nEl modo opcional de voz personalizada reproduce la voz de un hablante que ha dado su consentimiento a partir de una referencia de audio de cinco a sesenta segundos, sin ajuste fino. Microsoft recomienda una interpretación conversacional natural y una energía moderada en esa referencia, ya que la muestra afecta a la voz generada. Su flujo de voz personalizada exige la aprobación del fabricante y una declaración de consentimiento grabada. La biblioteca de voces prediseñadas es una vía independiente de selección de voz.\n\nEl fabricante permite elegir el formato de salida y su ejemplo publicado de síntesis guarda un MP3 mono a 24 kHz y 160 kbit/s. Estas opciones describen un flujo de salida. Seleccionad la representación de audio para la siguiente etapa de edición o reproducción y mantened asociados a la grabación el guion, el hablante y el orden de las secciones. Un capítulo o una lección terminados pueden contener varios pasajes generados y seguir siendo una experiencia de escucha coherente.\n\n### Utilizar el resultado de contenido largo\n\nMAI-Voice-2.1 se orienta a la naturalidad y la expresión cuando el tiempo de respuesta inmediato importa menos que la interpretación oral. En una pieza extensa, revisad los nombres recurrentes, los límites entre secciones, las voces asignadas al diálogo y los cambios de registro emocional. La documentación establece la capacidad de generar contenido largo y los mecanismos de coherencia sin especificar un guion ilimitado ni una duración máxima de grabación garantizada. El resultado práctico es un audio expresivo cuyo narrador, formulación y progresión coinciden con el material preparado.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "4abc9d8e1b78af3c692777341060306290a4809db52a5bedafbd7d6d478b1add",
    "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\">Microsoft AI: MAI-Voice-2.1</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Cerrar\">×</button></div><div class=\"idline\"><span>Microsoft AI /</span><code>microsoft/mai-voice-2.1</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|microsoft%2Fmai-voice-2.1\">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\">MAI-Voice-2.1 de Microsoft AI genera voz multilingüe expresiva para narraciones, audiolibros, contenido educativo y locuciones. Su perfil de 23 idiomas permite mantener una identidad de voz coherente, usar varios hablantes y controlar la interpretación.</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>MAI-Voice-2.1 es el modelo de conversión de texto a voz mediante indicaciones de Microsoft AI para trabajos donde importan la interpretación expresiva y la fidelidad del audio. Su ficha de modelo abarca veintitrés idiomas y veintiséis variantes regionales, con entonación natural, ritmo y matices emocionales. El fabricante identifica los audiolibros, la narración de medios, la creación de contenido y las locuciones como usos principales. Esta edición se centra en contenido expresivo más largo; MAI-Voice-2.1-Flash es la opción independiente diseñada para interacciones sensibles a la latencia.</p><h4>Narración con un hablante coherente</h4><p>La ficha del modelo documenta una identidad de voz que se reproduce de forma coherente en los idiomas compatibles. La generación de contenido largo utiliza segmentación y transferencia de contexto para mejorar la continuidad entre pasajes. Esto resulta útil para una lección, un capítulo de audiolibro o una secuencia de secciones de locución relacionadas que deban conservar el carácter del narrador. Preparad pasajes coherentes con límites claros y mantened la misma elección de hablante a lo largo de la pieza.</p><p>La entrada es el texto definitivo, con una referencia opcional del hablante y controles expresivos SSML. Las instrucciones de producción de una narración deben distinguir lo que oye el público de las notas de producción. Para una explicación técnica, escribid una introducción clara, después los pasos reales y la instrucción de cierre. Mantened una forma escrita coherente para los nombres de productos y los términos repetidos. Para una narración localizada, preparad el guion en el idioma de destino; el idioma y la voz seleccionados determinan su realización oral.</p><h4>Hablantes, papeles y control expresivo</h4><p>Microsoft proporciona una biblioteca de voces seleccionadas y documenta el uso de varios hablantes para el diálogo. Harper y Grant ejemplifican identidades de hablante con entradas para varias variantes regionales. Un intercambio educativo entre dos personas puede asignar la pregunta y la explicación a voces distintas y conservar la misma asignación cuando reaparece un papel. Etiquetad claramente las intervenciones para que la conversación deseada quede representada en la entrada de síntesis.</p><p>El tono y la interpretación pueden configurarse por turno de habla o por frase mediante SSML. Los estilos son específicos de cada hablante: el catálogo gestionado enumera estilos de narración o educativos orientados a tareas para voces adecuadas y opciones emocionales, como alegría o alivio, para otras. La entrada estadounidense de Harper admite esos dos estilos emocionales. Seleccionad conjuntamente el hablante y su estilo de interpretación documentado, en lugar de trasladar un estilo de otra voz.</p><p>En una historia o presentación, la expresividad puede distinguir una explicación factual, un pasaje reflexivo y una cita animada. Una frase práctica es: «El primer intento nos dio una imagen incompleta. Al observar toda la secuencia, quedó claro el paso que faltaba». Decidid dónde cambia el significado y preparad las unidades de habla en consecuencia. Escuchad las transiciones para que la interpretación siga la narración, en vez de dar el mismo énfasis a todas las frases.</p><h4>Voz de referencia y resultado de audio</h4><p>El modo opcional de voz personalizada reproduce la voz de un hablante que ha dado su consentimiento a partir de una referencia de audio de cinco a sesenta segundos, sin ajuste fino. Microsoft recomienda una interpretación conversacional natural y una energía moderada en esa referencia, ya que la muestra afecta a la voz generada. Su flujo de voz personalizada exige la aprobación del fabricante y una declaración de consentimiento grabada. La biblioteca de voces prediseñadas es una vía independiente de selección de voz.</p><p>El fabricante permite elegir el formato de salida y su ejemplo publicado de síntesis guarda un MP3 mono a 24 kHz y 160 kbit/s. Estas opciones describen un flujo de salida. Seleccionad la representación de audio para la siguiente etapa de edición o reproducción y mantened asociados a la grabación el guion, el hablante y el orden de las secciones. Un capítulo o una lección terminados pueden contener varios pasajes generados y seguir siendo una experiencia de escucha coherente.</p><h4>Utilizar el resultado de contenido largo</h4><p>MAI-Voice-2.1 se orienta a la naturalidad y la expresión cuando el tiempo de respuesta inmediato importa menos que la interpretación oral. En una pieza extensa, revisad los nombres recurrentes, los límites entre secciones, las voces asignadas al diálogo y los cambios de registro emocional. La documentación establece la capacidad de generar contenido largo y los mecanismos de coherencia sin especificar un guion ilimitado ni una duración máxima de grabación garantizada. El resultado práctico es un audio expresivo cuyo narrador, formulación y progresión coinciden con el material preparado.</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>microsoft/mai-voice-2.1</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>cs-CZ-Grant:MAI-Voice-2.1, cs-CZ-Harper:MAI-Voice-2.1, da-DK-Grant:MAI-Voice-2.1, da-DK-Harper:MAI-Voice-2.1, de-DE-Grant:MAI-Voice-2.1, de-DE-Harper:MAI-Voice-2.1, de-DE-Klaus:MAI-Voice-2.1, de-DE-Mia:MAI-Voice-2.1, en-AU-Isla:MAI-Voice-2.1, en-GB-Emily:MAI-Voice-2.1, en-GB-Harry:MAI-Voice-2.1, en-IN-Dhruv:MAI-Voice-2.1, en-IN-Priya:MAI-Voice-2.1, en-US-Ethan:MAI-Voice-2.1, en-US-Grant:MAI-Voice-2.1, en-US-Harper:MAI-Voice-2.1, en-US-Iris:MAI-Voice-2.1, en-US-Jasper:MAI-Voice-2.1, en-US-Olivia:MAI-Voice-2.1, en-US-Sage:MAI-Voice-2.1, es-ES-Marta:MAI-Voice-2.1, es-MX-Alejo:MAI-Voice-2.1, es-MX-Grant:MAI-Voice-2.1, es-MX-Harper:MAI-Voice-2.1, es-MX-Valeria:MAI-Voice-2.1, fi-FI-Grant:MAI-Voice-2.1, fi-FI-Harper:MAI-Voice-2.1, fr-FR-Grant:MAI-Voice-2.1, fr-FR-Harper:MAI-Voice-2.1, fr-FR-Marc:MAI-Voice-2.1, fr-FR-Soleil:MAI-Voice-2.1, hi-IN-Arjun:MAI-Voice-2.1, hi-IN-Dhruv:MAI-Voice-2.1, hi-IN-Grant:MAI-Voice-2.1, hi-IN-Harper:MAI-Voice-2.1, hi-IN-Kavya:MAI-Voice-2.1, hi-IN-Priya:MAI-Voice-2.1, hu-HU-Bence:MAI-Voice-2.1, hu-HU-Grant:MAI-Voice-2.1, hu-HU-Harper:MAI-Voice-2.1, hu-HU-Levente:MAI-Voice-2.1, hu-HU-Lilla:MAI-Voice-2.1, hu-HU-Reka:MAI-Voice-2.1, id-ID-Grant:MAI-Voice-2.1, id-ID-Harper:MAI-Voice-2.1, it-IT-Grant:MAI-Voice-2.1, it-IT-Harper:MAI-Voice-2.1, it-IT-Luca:MAI-Voice-2.1, it-IT-Rosa:MAI-Voice-2.1, ko-KR-Grant:MAI-Voice-2.1, ko-KR-Haena:MAI-Voice-2.1, ko-KR-Harper:MAI-Voice-2.1, ko-KR-Junho:MAI-Voice-2.1, nb-NO-Grant:MAI-Voice-2.1, nb-NO-Harper:MAI-Voice-2.1, nl-NL-Grant:MAI-Voice-2.1, nl-NL-Harper:MAI-Voice-2.1, nl-NL-Sander:MAI-Voice-2.1, pl-PL-Grant:MAI-Voice-2.1, pl-PL-Harper:MAI-Voice-2.1, pt-BR-Caio:MAI-Voice-2.1, pt-BR-Grant:MAI-Voice-2.1, pt-BR-Harper:MAI-Voice-2.1, pt-BR-Luana:MAI-Voice-2.1, pt-BR-Pedro:MAI-Voice-2.1, pt-BR-Rafael:MAI-Voice-2.1, pt-PT-Grant:MAI-Voice-2.1, pt-PT-Harper:MAI-Voice-2.1, pt-PT-Rui:MAI-Voice-2.1, ro-RO-Andrei:MAI-Voice-2.1, ro-RO-Elena:MAI-Voice-2.1, ro-RO-Grant:MAI-Voice-2.1, ro-RO-Harper:MAI-Voice-2.1, ro-RO-Ioana:MAI-Voice-2.1, ro-RO-Radu:MAI-Voice-2.1, ru-RU-Grant:MAI-Voice-2.1, ru-RU-Harper:MAI-Voice-2.1, ru-RU-Lev:MAI-Voice-2.1, ru-RU-Masha:MAI-Voice-2.1, sv-SE-Grant:MAI-Voice-2.1, sv-SE-Harper:MAI-Voice-2.1, th-TH-Grant:MAI-Voice-2.1, th-TH-Harper:MAI-Voice-2.1, th-TH-Krit:MAI-Voice-2.1, th-TH-Nattapong:MAI-Voice-2.1, tr-TR-Aydin:MAI-Voice-2.1, tr-TR-Elif:MAI-Voice-2.1, tr-TR-Grant:MAI-Voice-2.1, tr-TR-Harper:MAI-Voice-2.1, vi-VN-Grant:MAI-Voice-2.1, vi-VN-Harper:MAI-Voice-2.1, zh-CN-Bo:MAI-Voice-2.1, zh-CN-Grant:MAI-Voice-2.1, zh-CN-Harper:MAI-Voice-2.1, zh-CN-Lan:MAI-Voice-2.1, zh-CN-Mei:MAI-Voice-2.1, zh-CN-Wei:MAI-Voice-2.1</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>cs-CZ-Grant:MAI-Voice-2.1, cs-CZ-Harper:MAI-Voice-2.1, da-DK-Grant:MAI-Voice-2.1, da-DK-Harper:MAI-Voice-2.1, de-DE-Grant:MAI-Voice-2.1, de-DE-Harper:MAI-Voice-2.1, de-DE-Klaus:MAI-Voice-2.1, de-DE-Mia:MAI-Voice-2.1, en-AU-Isla:MAI-Voice-2.1, en-GB-Emily:MAI-Voice-2.1, en-GB-Harry:MAI-Voice-2.1, en-IN-Dhruv:MAI-Voice-2.1, en-IN-Priya:MAI-Voice-2.1, en-US-Ethan:MAI-Voice-2.1, en-US-Grant:MAI-Voice-2.1, en-US-Harper:MAI-Voice-2.1, en-US-Iris:MAI-Voice-2.1, en-US-Jasper:MAI-Voice-2.1, en-US-Olivia:MAI-Voice-2.1, en-US-Sage:MAI-Voice-2.1, es-ES-Marta:MAI-Voice-2.1, es-MX-Alejo:MAI-Voice-2.1, es-MX-Grant:MAI-Voice-2.1, es-MX-Harper:MAI-Voice-2.1, es-MX-Valeria:MAI-Voice-2.1, fi-FI-Grant:MAI-Voice-2.1, fi-FI-Harper:MAI-Voice-2.1, fr-FR-Grant:MAI-Voice-2.1, fr-FR-Harper:MAI-Voice-2.1, fr-FR-Marc:MAI-Voice-2.1, fr-FR-Soleil:MAI-Voice-2.1, hi-IN-Arjun:MAI-Voice-2.1, hi-IN-Dhruv:MAI-Voice-2.1, hi-IN-Grant:MAI-Voice-2.1, hi-IN-Harper:MAI-Voice-2.1, hi-IN-Kavya:MAI-Voice-2.1, hi-IN-Priya:MAI-Voice-2.1, hu-HU-Bence:MAI-Voice-2.1, hu-HU-Grant:MAI-Voice-2.1, hu-HU-Harper:MAI-Voice-2.1, hu-HU-Levente:MAI-Voice-2.1, hu-HU-Lilla:MAI-Voice-2.1, hu-HU-Reka:MAI-Voice-2.1, id-ID-Grant:MAI-Voice-2.1, id-ID-Harper:MAI-Voice-2.1, it-IT-Grant:MAI-Voice-2.1, it-IT-Harper:MAI-Voice-2.1, it-IT-Luca:MAI-Voice-2.1, it-IT-Rosa:MAI-Voice-2.1, ko-KR-Grant:MAI-Voice-2.1, ko-KR-Haena:MAI-Voice-2.1, ko-KR-Harper:MAI-Voice-2.1, ko-KR-Junho:MAI-Voice-2.1, nb-NO-Grant:MAI-Voice-2.1, nb-NO-Harper:MAI-Voice-2.1, nl-NL-Grant:MAI-Voice-2.1, nl-NL-Harper:MAI-Voice-2.1, nl-NL-Sander:MAI-Voice-2.1, pl-PL-Grant:MAI-Voice-2.1, pl-PL-Harper:MAI-Voice-2.1, pt-BR-Caio:MAI-Voice-2.1, pt-BR-Grant:MAI-Voice-2.1, pt-BR-Harper:MAI-Voice-2.1, pt-BR-Luana:MAI-Voice-2.1, pt-BR-Pedro:MAI-Voice-2.1, pt-BR-Rafael:MAI-Voice-2.1, pt-PT-Grant:MAI-Voice-2.1, pt-PT-Harper:MAI-Voice-2.1, pt-PT-Rui:MAI-Voice-2.1, ro-RO-Andrei:MAI-Voice-2.1, ro-RO-Elena:MAI-Voice-2.1, ro-RO-Grant:MAI-Voice-2.1, ro-RO-Harper:MAI-Voice-2.1, ro-RO-Ioana:MAI-Voice-2.1, ro-RO-Radu:MAI-Voice-2.1, ru-RU-Grant:MAI-Voice-2.1, ru-RU-Harper:MAI-Voice-2.1, ru-RU-Lev:MAI-Voice-2.1, ru-RU-Masha:MAI-Voice-2.1, sv-SE-Grant:MAI-Voice-2.1, sv-SE-Harper:MAI-Voice-2.1, th-TH-Grant:MAI-Voice-2.1, th-TH-Harper:MAI-Voice-2.1, th-TH-Krit:MAI-Voice-2.1, th-TH-Nattapong:MAI-Voice-2.1, tr-TR-Aydin:MAI-Voice-2.1, tr-TR-Elif:MAI-Voice-2.1, tr-TR-Grant:MAI-Voice-2.1, tr-TR-Harper:MAI-Voice-2.1, vi-VN-Grant:MAI-Voice-2.1, vi-VN-Harper:MAI-Voice-2.1, zh-CN-Bo:MAI-Voice-2.1, zh-CN-Grant:MAI-Voice-2.1, zh-CN-Harper:MAI-Voice-2.1, zh-CN-Lan:MAI-Voice-2.1, zh-CN-Mei:MAI-Voice-2.1, zh-CN-Wei:MAI-Voice-2.1</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.044</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>Microsoft AI: MAI-Voice-2.1</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>Microsoft AI: MAI-Voice-2.1 · 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,000044 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-1853-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1853-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-1853-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1853-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;microsoft/mai-voice-2.1&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;cs-CZ-Grant:MAI-Voice-2.1&quot;, &quot;cs-CZ-Harper:MAI-Voice-2.1&quot;, &quot;da-DK-Grant:MAI-Voice-2.1&quot;, &quot;da-DK-Harper:MAI-Voice-2.1&quot;, &quot;de-DE-Grant:MAI-Voice-2.1&quot;, &quot;de-DE-Harper:MAI-Voice-2.1&quot;, &quot;de-DE-Klaus:MAI-Voice-2.1&quot;, &quot;de-DE-Mia:MAI-Voice-2.1&quot;, &quot;en-AU-Isla:MAI-Voice-2.1&quot;, &quot;en-GB-Emily:MAI-Voice-2.1&quot;, &quot;en-GB-Harry:MAI-Voice-2.1&quot;, &quot;en-IN-Dhruv:MAI-Voice-2.1&quot;, &quot;en-IN-Priya:MAI-Voice-2.1&quot;, &quot;en-US-Ethan:MAI-Voice-2.1&quot;, &quot;en-US-Grant:MAI-Voice-2.1&quot;, &quot;en-US-Harper:MAI-Voice-2.1&quot;, &quot;en-US-Iris:MAI-Voice-2.1&quot;, &quot;en-US-Jasper:MAI-Voice-2.1&quot;, &quot;en-US-Olivia:MAI-Voice-2.1&quot;, &quot;en-US-Sage:MAI-Voice-2.1&quot;, &quot;es-ES-Marta:MAI-Voice-2.1&quot;, &quot;es-MX-Alejo:MAI-Voice-2.1&quot;, &quot;es-MX-Grant:MAI-Voice-2.1&quot;, &quot;es-MX-Harper:MAI-Voice-2.1&quot;, &quot;es-MX-Valeria:MAI-Voice-2.1&quot;, &quot;fi-FI-Grant:MAI-Voice-2.1&quot;, &quot;fi-FI-Harper:MAI-Voice-2.1&quot;, &quot;fr-FR-Grant:MAI-Voice-2.1&quot;, &quot;fr-FR-Harper:MAI-Voice-2.1&quot;, &quot;fr-FR-Marc:MAI-Voice-2.1&quot;, &quot;fr-FR-Soleil:MAI-Voice-2.1&quot;, &quot;hi-IN-Arjun:MAI-Voice-2.1&quot;, &quot;hi-IN-Dhruv:MAI-Voice-2.1&quot;, &quot;hi-IN-Grant:MAI-Voice-2.1&quot;, &quot;hi-IN-Harper:MAI-Voice-2.1&quot;, &quot;hi-IN-Kavya:MAI-Voice-2.1&quot;, &quot;hi-IN-Priya:MAI-Voice-2.1&quot;, &quot;hu-HU-Bence:MAI-Voice-2.1&quot;, &quot;hu-HU-Grant:MAI-Voice-2.1&quot;, &quot;hu-HU-Harper:MAI-Voice-2.1&quot;, &quot;hu-HU-Levente:MAI-Voice-2.1&quot;, &quot;hu-HU-Lilla:MAI-Voice-2.1&quot;, &quot;hu-HU-Reka:MAI-Voice-2.1&quot;, &quot;id-ID-Grant:MAI-Voice-2.1&quot;, &quot;id-ID-Harper:MAI-Voice-2.1&quot;, &quot;it-IT-Grant:MAI-Voice-2.1&quot;, &quot;it-IT-Harper:MAI-Voice-2.1&quot;, &quot;it-IT-Luca:MAI-Voice-2.1&quot;, &quot;it-IT-Rosa:MAI-Voice-2.1&quot;, &quot;ko-KR-Grant:MAI-Voice-2.1&quot;, &quot;ko-KR-Haena:MAI-Voice-2.1&quot;, &quot;ko-KR-Harper:MAI-Voice-2.1&quot;, &quot;ko-KR-Junho:MAI-Voice-2.1&quot;, &quot;nb-NO-Grant:MAI-Voice-2.1&quot;, &quot;nb-NO-Harper:MAI-Voice-2.1&quot;, &quot;nl-NL-Grant:MAI-Voice-2.1&quot;, &quot;nl-NL-Harper:MAI-Voice-2.1&quot;, &quot;nl-NL-Sander:MAI-Voice-2.1&quot;, &quot;pl-PL-Grant:MAI-Voice-2.1&quot;, &quot;pl-PL-Harper:MAI-Voice-2.1&quot;, &quot;pt-BR-Caio:MAI-Voice-2.1&quot;, &quot;pt-BR-Grant:MAI-Voice-2.1&quot;, &quot;pt-BR-Harper:MAI-Voice-2.1&quot;, &quot;pt-BR-Luana:MAI-Voice-2.1&quot;, &quot;pt-BR-Pedro:MAI-Voice-2.1&quot;, &quot;pt-BR-Rafael:MAI-Voice-2.1&quot;, &quot;pt-PT-Grant:MAI-Voice-2.1&quot;, &quot;pt-PT-Harper:MAI-Voice-2.1&quot;, &quot;pt-PT-Rui:MAI-Voice-2.1&quot;, &quot;ro-RO-Andrei:MAI-Voice-2.1&quot;, &quot;ro-RO-Elena:MAI-Voice-2.1&quot;, &quot;ro-RO-Grant:MAI-Voice-2.1&quot;, &quot;ro-RO-Harper:MAI-Voice-2.1&quot;, &quot;ro-RO-Ioana:MAI-Voice-2.1&quot;, &quot;ro-RO-Radu:MAI-Voice-2.1&quot;, &quot;ru-RU-Grant:MAI-Voice-2.1&quot;, &quot;ru-RU-Harper:MAI-Voice-2.1&quot;, &quot;ru-RU-Lev:MAI-Voice-2.1&quot;, &quot;ru-RU-Masha:MAI-Voice-2.1&quot;, &quot;sv-SE-Grant:MAI-Voice-2.1&quot;, &quot;sv-SE-Harper:MAI-Voice-2.1&quot;, &quot;th-TH-Grant:MAI-Voice-2.1&quot;, &quot;th-TH-Harper:MAI-Voice-2.1&quot;, &quot;th-TH-Krit:MAI-Voice-2.1&quot;, &quot;th-TH-Nattapong:MAI-Voice-2.1&quot;, &quot;tr-TR-Aydin:MAI-Voice-2.1&quot;, &quot;tr-TR-Elif:MAI-Voice-2.1&quot;, &quot;tr-TR-Grant:MAI-Voice-2.1&quot;, &quot;tr-TR-Harper:MAI-Voice-2.1&quot;, &quot;vi-VN-Grant:MAI-Voice-2.1&quot;, &quot;vi-VN-Harper:MAI-Voice-2.1&quot;, &quot;zh-CN-Bo:MAI-Voice-2.1&quot;, &quot;zh-CN-Grant:MAI-Voice-2.1&quot;, &quot;zh-CN-Harper:MAI-Voice-2.1&quot;, &quot;zh-CN-Lan:MAI-Voice-2.1&quot;, &quot;zh-CN-Mei:MAI-Voice-2.1&quot;, &quot;zh-CN-Wei:MAI-Voice-2.1&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-1854-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1854-panel-0\" aria-selected=\"true\" tabindex=\"0\">Biblioteca multimedia</button><button class=\"cg-tab\" id=\"model-code-1854-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1854-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Estado de la tarea</button><button class=\"cg-tab\" id=\"model-code-1854-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1854-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-1854-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1854-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-1854-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1854-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-1854-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1854-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=microsoft%2Fmai-voice-2.1&amp;route=Ultra&amp;caller=microsoft%2Fmai-voice-2.1&amp;fmt=speech\"><code>microsoft/mai-voice-2.1</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=microsoft%2Fmai-voice-2.1&amp;route=Ultra&amp;caller=microsoft%2Fmai-voice-2.1&amp;fmt=speech\"><code>microsoft/mai-voice-2.1</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "microsoft/mai-voice-2.1",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "microsoft/mai-voice-2.1",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|microsoft%2Fmai-voice-2.1",
      "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": [
                  "microsoft/mai-voice-2.1"
                ],
                "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": [
                  "cs-CZ-Grant:MAI-Voice-2.1",
                  "cs-CZ-Harper:MAI-Voice-2.1",
                  "da-DK-Grant:MAI-Voice-2.1",
                  "da-DK-Harper:MAI-Voice-2.1",
                  "de-DE-Grant:MAI-Voice-2.1",
                  "de-DE-Harper:MAI-Voice-2.1",
                  "de-DE-Klaus:MAI-Voice-2.1",
                  "de-DE-Mia:MAI-Voice-2.1",
                  "en-AU-Isla:MAI-Voice-2.1",
                  "en-GB-Emily:MAI-Voice-2.1",
                  "en-GB-Harry:MAI-Voice-2.1",
                  "en-IN-Dhruv:MAI-Voice-2.1",
                  "en-IN-Priya:MAI-Voice-2.1",
                  "en-US-Ethan:MAI-Voice-2.1",
                  "en-US-Grant:MAI-Voice-2.1",
                  "en-US-Harper:MAI-Voice-2.1",
                  "en-US-Iris:MAI-Voice-2.1",
                  "en-US-Jasper:MAI-Voice-2.1",
                  "en-US-Olivia:MAI-Voice-2.1",
                  "en-US-Sage:MAI-Voice-2.1",
                  "es-ES-Marta:MAI-Voice-2.1",
                  "es-MX-Alejo:MAI-Voice-2.1",
                  "es-MX-Grant:MAI-Voice-2.1",
                  "es-MX-Harper:MAI-Voice-2.1",
                  "es-MX-Valeria:MAI-Voice-2.1",
                  "fi-FI-Grant:MAI-Voice-2.1",
                  "fi-FI-Harper:MAI-Voice-2.1",
                  "fr-FR-Grant:MAI-Voice-2.1",
                  "fr-FR-Harper:MAI-Voice-2.1",
                  "fr-FR-Marc:MAI-Voice-2.1",
                  "fr-FR-Soleil:MAI-Voice-2.1",
                  "hi-IN-Arjun:MAI-Voice-2.1",
                  "hi-IN-Dhruv:MAI-Voice-2.1",
                  "hi-IN-Grant:MAI-Voice-2.1",
                  "hi-IN-Harper:MAI-Voice-2.1",
                  "hi-IN-Kavya:MAI-Voice-2.1",
                  "hi-IN-Priya:MAI-Voice-2.1",
                  "hu-HU-Bence:MAI-Voice-2.1",
                  "hu-HU-Grant:MAI-Voice-2.1",
                  "hu-HU-Harper:MAI-Voice-2.1",
                  "hu-HU-Levente:MAI-Voice-2.1",
                  "hu-HU-Lilla:MAI-Voice-2.1",
                  "hu-HU-Reka:MAI-Voice-2.1",
                  "id-ID-Grant:MAI-Voice-2.1",
                  "id-ID-Harper:MAI-Voice-2.1",
                  "it-IT-Grant:MAI-Voice-2.1",
                  "it-IT-Harper:MAI-Voice-2.1",
                  "it-IT-Luca:MAI-Voice-2.1",
                  "it-IT-Rosa:MAI-Voice-2.1",
                  "ko-KR-Grant:MAI-Voice-2.1",
                  "ko-KR-Haena:MAI-Voice-2.1",
                  "ko-KR-Harper:MAI-Voice-2.1",
                  "ko-KR-Junho:MAI-Voice-2.1",
                  "nb-NO-Grant:MAI-Voice-2.1",
                  "nb-NO-Harper:MAI-Voice-2.1",
                  "nl-NL-Grant:MAI-Voice-2.1",
                  "nl-NL-Harper:MAI-Voice-2.1",
                  "nl-NL-Sander:MAI-Voice-2.1",
                  "pl-PL-Grant:MAI-Voice-2.1",
                  "pl-PL-Harper:MAI-Voice-2.1",
                  "pt-BR-Caio:MAI-Voice-2.1",
                  "pt-BR-Grant:MAI-Voice-2.1",
                  "pt-BR-Harper:MAI-Voice-2.1",
                  "pt-BR-Luana:MAI-Voice-2.1",
                  "pt-BR-Pedro:MAI-Voice-2.1",
                  "pt-BR-Rafael:MAI-Voice-2.1",
                  "pt-PT-Grant:MAI-Voice-2.1",
                  "pt-PT-Harper:MAI-Voice-2.1",
                  "pt-PT-Rui:MAI-Voice-2.1",
                  "ro-RO-Andrei:MAI-Voice-2.1",
                  "ro-RO-Elena:MAI-Voice-2.1",
                  "ro-RO-Grant:MAI-Voice-2.1",
                  "ro-RO-Harper:MAI-Voice-2.1",
                  "ro-RO-Ioana:MAI-Voice-2.1",
                  "ro-RO-Radu:MAI-Voice-2.1",
                  "ru-RU-Grant:MAI-Voice-2.1",
                  "ru-RU-Harper:MAI-Voice-2.1",
                  "ru-RU-Lev:MAI-Voice-2.1",
                  "ru-RU-Masha:MAI-Voice-2.1",
                  "sv-SE-Grant:MAI-Voice-2.1",
                  "sv-SE-Harper:MAI-Voice-2.1",
                  "th-TH-Grant:MAI-Voice-2.1",
                  "th-TH-Harper:MAI-Voice-2.1",
                  "th-TH-Krit:MAI-Voice-2.1",
                  "th-TH-Nattapong:MAI-Voice-2.1",
                  "tr-TR-Aydin:MAI-Voice-2.1",
                  "tr-TR-Elif:MAI-Voice-2.1",
                  "tr-TR-Grant:MAI-Voice-2.1",
                  "tr-TR-Harper:MAI-Voice-2.1",
                  "vi-VN-Grant:MAI-Voice-2.1",
                  "vi-VN-Harper:MAI-Voice-2.1",
                  "zh-CN-Bo:MAI-Voice-2.1",
                  "zh-CN-Grant:MAI-Voice-2.1",
                  "zh-CN-Harper:MAI-Voice-2.1",
                  "zh-CN-Lan:MAI-Voice-2.1",
                  "zh-CN-Mei:MAI-Voice-2.1",
                  "zh-CN-Wei:MAI-Voice-2.1"
                ],
                "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": [
              "cs-CZ-Grant:MAI-Voice-2.1",
              "cs-CZ-Harper:MAI-Voice-2.1",
              "da-DK-Grant:MAI-Voice-2.1",
              "da-DK-Harper:MAI-Voice-2.1",
              "de-DE-Grant:MAI-Voice-2.1",
              "de-DE-Harper:MAI-Voice-2.1",
              "de-DE-Klaus:MAI-Voice-2.1",
              "de-DE-Mia:MAI-Voice-2.1",
              "en-AU-Isla:MAI-Voice-2.1",
              "en-GB-Emily:MAI-Voice-2.1",
              "en-GB-Harry:MAI-Voice-2.1",
              "en-IN-Dhruv:MAI-Voice-2.1",
              "en-IN-Priya:MAI-Voice-2.1",
              "en-US-Ethan:MAI-Voice-2.1",
              "en-US-Grant:MAI-Voice-2.1",
              "en-US-Harper:MAI-Voice-2.1",
              "en-US-Iris:MAI-Voice-2.1",
              "en-US-Jasper:MAI-Voice-2.1",
              "en-US-Olivia:MAI-Voice-2.1",
              "en-US-Sage:MAI-Voice-2.1",
              "es-ES-Marta:MAI-Voice-2.1",
              "es-MX-Alejo:MAI-Voice-2.1",
              "es-MX-Grant:MAI-Voice-2.1",
              "es-MX-Harper:MAI-Voice-2.1",
              "es-MX-Valeria:MAI-Voice-2.1",
              "fi-FI-Grant:MAI-Voice-2.1",
              "fi-FI-Harper:MAI-Voice-2.1",
              "fr-FR-Grant:MAI-Voice-2.1",
              "fr-FR-Harper:MAI-Voice-2.1",
              "fr-FR-Marc:MAI-Voice-2.1",
              "fr-FR-Soleil:MAI-Voice-2.1",
              "hi-IN-Arjun:MAI-Voice-2.1",
              "hi-IN-Dhruv:MAI-Voice-2.1",
              "hi-IN-Grant:MAI-Voice-2.1",
              "hi-IN-Harper:MAI-Voice-2.1",
              "hi-IN-Kavya:MAI-Voice-2.1",
              "hi-IN-Priya:MAI-Voice-2.1",
              "hu-HU-Bence:MAI-Voice-2.1",
              "hu-HU-Grant:MAI-Voice-2.1",
              "hu-HU-Harper:MAI-Voice-2.1",
              "hu-HU-Levente:MAI-Voice-2.1",
              "hu-HU-Lilla:MAI-Voice-2.1",
              "hu-HU-Reka:MAI-Voice-2.1",
              "id-ID-Grant:MAI-Voice-2.1",
              "id-ID-Harper:MAI-Voice-2.1",
              "it-IT-Grant:MAI-Voice-2.1",
              "it-IT-Harper:MAI-Voice-2.1",
              "it-IT-Luca:MAI-Voice-2.1",
              "it-IT-Rosa:MAI-Voice-2.1",
              "ko-KR-Grant:MAI-Voice-2.1",
              "ko-KR-Haena:MAI-Voice-2.1",
              "ko-KR-Harper:MAI-Voice-2.1",
              "ko-KR-Junho:MAI-Voice-2.1",
              "nb-NO-Grant:MAI-Voice-2.1",
              "nb-NO-Harper:MAI-Voice-2.1",
              "nl-NL-Grant:MAI-Voice-2.1",
              "nl-NL-Harper:MAI-Voice-2.1",
              "nl-NL-Sander:MAI-Voice-2.1",
              "pl-PL-Grant:MAI-Voice-2.1",
              "pl-PL-Harper:MAI-Voice-2.1",
              "pt-BR-Caio:MAI-Voice-2.1",
              "pt-BR-Grant:MAI-Voice-2.1",
              "pt-BR-Harper:MAI-Voice-2.1",
              "pt-BR-Luana:MAI-Voice-2.1",
              "pt-BR-Pedro:MAI-Voice-2.1",
              "pt-BR-Rafael:MAI-Voice-2.1",
              "pt-PT-Grant:MAI-Voice-2.1",
              "pt-PT-Harper:MAI-Voice-2.1",
              "pt-PT-Rui:MAI-Voice-2.1",
              "ro-RO-Andrei:MAI-Voice-2.1",
              "ro-RO-Elena:MAI-Voice-2.1",
              "ro-RO-Grant:MAI-Voice-2.1",
              "ro-RO-Harper:MAI-Voice-2.1",
              "ro-RO-Ioana:MAI-Voice-2.1",
              "ro-RO-Radu:MAI-Voice-2.1",
              "ru-RU-Grant:MAI-Voice-2.1",
              "ru-RU-Harper:MAI-Voice-2.1",
              "ru-RU-Lev:MAI-Voice-2.1",
              "ru-RU-Masha:MAI-Voice-2.1",
              "sv-SE-Grant:MAI-Voice-2.1",
              "sv-SE-Harper:MAI-Voice-2.1",
              "th-TH-Grant:MAI-Voice-2.1",
              "th-TH-Harper:MAI-Voice-2.1",
              "th-TH-Krit:MAI-Voice-2.1",
              "th-TH-Nattapong:MAI-Voice-2.1",
              "tr-TR-Aydin:MAI-Voice-2.1",
              "tr-TR-Elif:MAI-Voice-2.1",
              "tr-TR-Grant:MAI-Voice-2.1",
              "tr-TR-Harper:MAI-Voice-2.1",
              "vi-VN-Grant:MAI-Voice-2.1",
              "vi-VN-Harper:MAI-Voice-2.1",
              "zh-CN-Bo:MAI-Voice-2.1",
              "zh-CN-Grant:MAI-Voice-2.1",
              "zh-CN-Harper:MAI-Voice-2.1",
              "zh-CN-Lan:MAI-Voice-2.1",
              "zh-CN-Mei:MAI-Voice-2.1",
              "zh-CN-Wei:MAI-Voice-2.1"
            ]
          },
          "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.044000",
                "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.000044",
                "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": "53ceea2ccaa50cadb12f",
            "label": "Microsoft AI: MAI-Voice-2.1",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Configuración predeterminada"
                },
                "label": "Microsoft AI: MAI-Voice-2.1 · Configuración predeterminada",
                "units": [
                  {
                    "amount": "0.000044",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "8d1e4e9bf0f3647249d90a3c",
                    "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\": \"microsoft/mai-voice-2.1\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"cs-CZ-Grant:MAI-Voice-2.1\", \"cs-CZ-Harper:MAI-Voice-2.1\", \"da-DK-Grant:MAI-Voice-2.1\", \"da-DK-Harper:MAI-Voice-2.1\", \"de-DE-Grant:MAI-Voice-2.1\", \"de-DE-Harper:MAI-Voice-2.1\", \"de-DE-Klaus:MAI-Voice-2.1\", \"de-DE-Mia:MAI-Voice-2.1\", \"en-AU-Isla:MAI-Voice-2.1\", \"en-GB-Emily:MAI-Voice-2.1\", \"en-GB-Harry:MAI-Voice-2.1\", \"en-IN-Dhruv:MAI-Voice-2.1\", \"en-IN-Priya:MAI-Voice-2.1\", \"en-US-Ethan:MAI-Voice-2.1\", \"en-US-Grant:MAI-Voice-2.1\", \"en-US-Harper:MAI-Voice-2.1\", \"en-US-Iris:MAI-Voice-2.1\", \"en-US-Jasper:MAI-Voice-2.1\", \"en-US-Olivia:MAI-Voice-2.1\", \"en-US-Sage:MAI-Voice-2.1\", \"es-ES-Marta:MAI-Voice-2.1\", \"es-MX-Alejo:MAI-Voice-2.1\", \"es-MX-Grant:MAI-Voice-2.1\", \"es-MX-Harper:MAI-Voice-2.1\", \"es-MX-Valeria:MAI-Voice-2.1\", \"fi-FI-Grant:MAI-Voice-2.1\", \"fi-FI-Harper:MAI-Voice-2.1\", \"fr-FR-Grant:MAI-Voice-2.1\", \"fr-FR-Harper:MAI-Voice-2.1\", \"fr-FR-Marc:MAI-Voice-2.1\", \"fr-FR-Soleil:MAI-Voice-2.1\", \"hi-IN-Arjun:MAI-Voice-2.1\", \"hi-IN-Dhruv:MAI-Voice-2.1\", \"hi-IN-Grant:MAI-Voice-2.1\", \"hi-IN-Harper:MAI-Voice-2.1\", \"hi-IN-Kavya:MAI-Voice-2.1\", \"hi-IN-Priya:MAI-Voice-2.1\", \"hu-HU-Bence:MAI-Voice-2.1\", \"hu-HU-Grant:MAI-Voice-2.1\", \"hu-HU-Harper:MAI-Voice-2.1\", \"hu-HU-Levente:MAI-Voice-2.1\", \"hu-HU-Lilla:MAI-Voice-2.1\", \"hu-HU-Reka:MAI-Voice-2.1\", \"id-ID-Grant:MAI-Voice-2.1\", \"id-ID-Harper:MAI-Voice-2.1\", \"it-IT-Grant:MAI-Voice-2.1\", \"it-IT-Harper:MAI-Voice-2.1\", \"it-IT-Luca:MAI-Voice-2.1\", \"it-IT-Rosa:MAI-Voice-2.1\", \"ko-KR-Grant:MAI-Voice-2.1\", \"ko-KR-Haena:MAI-Voice-2.1\", \"ko-KR-Harper:MAI-Voice-2.1\", \"ko-KR-Junho:MAI-Voice-2.1\", \"nb-NO-Grant:MAI-Voice-2.1\", \"nb-NO-Harper:MAI-Voice-2.1\", \"nl-NL-Grant:MAI-Voice-2.1\", \"nl-NL-Harper:MAI-Voice-2.1\", \"nl-NL-Sander:MAI-Voice-2.1\", \"pl-PL-Grant:MAI-Voice-2.1\", \"pl-PL-Harper:MAI-Voice-2.1\", \"pt-BR-Caio:MAI-Voice-2.1\", \"pt-BR-Grant:MAI-Voice-2.1\", \"pt-BR-Harper:MAI-Voice-2.1\", \"pt-BR-Luana:MAI-Voice-2.1\", \"pt-BR-Pedro:MAI-Voice-2.1\", \"pt-BR-Rafael:MAI-Voice-2.1\", \"pt-PT-Grant:MAI-Voice-2.1\", \"pt-PT-Harper:MAI-Voice-2.1\", \"pt-PT-Rui:MAI-Voice-2.1\", \"ro-RO-Andrei:MAI-Voice-2.1\", \"ro-RO-Elena:MAI-Voice-2.1\", \"ro-RO-Grant:MAI-Voice-2.1\", \"ro-RO-Harper:MAI-Voice-2.1\", \"ro-RO-Ioana:MAI-Voice-2.1\", \"ro-RO-Radu:MAI-Voice-2.1\", \"ru-RU-Grant:MAI-Voice-2.1\", \"ru-RU-Harper:MAI-Voice-2.1\", \"ru-RU-Lev:MAI-Voice-2.1\", \"ru-RU-Masha:MAI-Voice-2.1\", \"sv-SE-Grant:MAI-Voice-2.1\", \"sv-SE-Harper:MAI-Voice-2.1\", \"th-TH-Grant:MAI-Voice-2.1\", \"th-TH-Harper:MAI-Voice-2.1\", \"th-TH-Krit:MAI-Voice-2.1\", \"th-TH-Nattapong:MAI-Voice-2.1\", \"tr-TR-Aydin:MAI-Voice-2.1\", \"tr-TR-Elif:MAI-Voice-2.1\", \"tr-TR-Grant:MAI-Voice-2.1\", \"tr-TR-Harper:MAI-Voice-2.1\", \"vi-VN-Grant:MAI-Voice-2.1\", \"vi-VN-Harper:MAI-Voice-2.1\", \"zh-CN-Bo:MAI-Voice-2.1\", \"zh-CN-Grant:MAI-Voice-2.1\", \"zh-CN-Harper:MAI-Voice-2.1\", \"zh-CN-Lan:MAI-Voice-2.1\", \"zh-CN-Mei:MAI-Voice-2.1\", \"zh-CN-Wei:MAI-Voice-2.1\"]')\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": 4.4e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.044000",
                "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.000044",
                "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": "microsoft/mai-voice-2.1",
        "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.044000",
            "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.000044",
            "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": "microsoft/mai-voice-2.1",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "21cd5d4335fa700b72b03971116ec4fa23bcc17e49d184d73778166393c05981",
    "input_html_sha256": "78017144bf5c9c0c789ef3fc6b8a6bd7b9f6289e63d44d2b091ef02ef3a0deb7",
    "private_audit_sha256": "6fa908278afef70676be9ee34ec44db752ee110c104d1d5979742e6e326b4823",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/es/microsoft-mai-voice-2-1/",
    "description": "MAI-Voice-2.1 de Microsoft AI genera voz multilingüe expresiva para narraciones, audiolibros, contenido educativo y locuciones. Su perfil de 23 idiomas permite mantener una identidad de voz coherente, usar varios hablantes y controlar la interpretación.",
    "locale": "es",
    "md_url": "https://ailoot.ai/models/es/microsoft-mai-voice-2-1/index.md",
    "title": "Microsoft AI: MAI-Voice-2.1 — Ailoot",
    "url": "https://ailoot.ai/models/es/microsoft-mai-voice-2-1/"
  },
  "rawModel": {
    "about": "MAI-Voice-2.1 es el modelo de conversión de texto a voz mediante indicaciones de Microsoft AI para trabajos donde importan la interpretación expresiva y la fidelidad del audio. Su ficha de modelo abarca veintitrés idiomas y veintiséis variantes regionales, con entonación natural, ritmo y matices emocionales. El fabricante identifica los audiolibros, la narración de medios, la creación de contenido y las locuciones como usos principales. Esta edición se centra en contenido expresivo más largo; MAI-Voice-2.1-Flash es la opción independiente diseñada para interacciones sensibles a la latencia.\n\n### Narración con un hablante coherente\n\nLa ficha del modelo documenta una identidad de voz que se reproduce de forma coherente en los idiomas compatibles. La generación de contenido largo utiliza segmentación y transferencia de contexto para mejorar la continuidad entre pasajes. Esto resulta útil para una lección, un capítulo de audiolibro o una secuencia de secciones de locución relacionadas que deban conservar el carácter del narrador. Preparad pasajes coherentes con límites claros y mantened la misma elección de hablante a lo largo de la pieza.\n\nLa entrada es el texto definitivo, con una referencia opcional del hablante y controles expresivos SSML. Las instrucciones de producción de una narración deben distinguir lo que oye el público de las notas de producción. Para una explicación técnica, escribid una introducción clara, después los pasos reales y la instrucción de cierre. Mantened una forma escrita coherente para los nombres de productos y los términos repetidos. Para una narración localizada, preparad el guion en el idioma de destino; el idioma y la voz seleccionados determinan su realización oral.\n\n### Hablantes, papeles y control expresivo\n\nMicrosoft proporciona una biblioteca de voces seleccionadas y documenta el uso de varios hablantes para el diálogo. Harper y Grant ejemplifican identidades de hablante con entradas para varias variantes regionales. Un intercambio educativo entre dos personas puede asignar la pregunta y la explicación a voces distintas y conservar la misma asignación cuando reaparece un papel. Etiquetad claramente las intervenciones para que la conversación deseada quede representada en la entrada de síntesis.\n\nEl tono y la interpretación pueden configurarse por turno de habla o por frase mediante SSML. Los estilos son específicos de cada hablante: el catálogo gestionado enumera estilos de narración o educativos orientados a tareas para voces adecuadas y opciones emocionales, como alegría o alivio, para otras. La entrada estadounidense de Harper admite esos dos estilos emocionales. Seleccionad conjuntamente el hablante y su estilo de interpretación documentado, en lugar de trasladar un estilo de otra voz.\n\nEn una historia o presentación, la expresividad puede distinguir una explicación factual, un pasaje reflexivo y una cita animada. Una frase práctica es: «El primer intento nos dio una imagen incompleta. Al observar toda la secuencia, quedó claro el paso que faltaba». Decidid dónde cambia el significado y preparad las unidades de habla en consecuencia. Escuchad las transiciones para que la interpretación siga la narración, en vez de dar el mismo énfasis a todas las frases.\n\n### Voz de referencia y resultado de audio\n\nEl modo opcional de voz personalizada reproduce la voz de un hablante que ha dado su consentimiento a partir de una referencia de audio de cinco a sesenta segundos, sin ajuste fino. Microsoft recomienda una interpretación conversacional natural y una energía moderada en esa referencia, ya que la muestra afecta a la voz generada. Su flujo de voz personalizada exige la aprobación del fabricante y una declaración de consentimiento grabada. La biblioteca de voces prediseñadas es una vía independiente de selección de voz.\n\nEl fabricante permite elegir el formato de salida y su ejemplo publicado de síntesis guarda un MP3 mono a 24 kHz y 160 kbit/s. Estas opciones describen un flujo de salida. Seleccionad la representación de audio para la siguiente etapa de edición o reproducción y mantened asociados a la grabación el guion, el hablante y el orden de las secciones. Un capítulo o una lección terminados pueden contener varios pasajes generados y seguir siendo una experiencia de escucha coherente.\n\n### Utilizar el resultado de contenido largo\n\nMAI-Voice-2.1 se orienta a la naturalidad y la expresión cuando el tiempo de respuesta inmediato importa menos que la interpretación oral. En una pieza extensa, revisad los nombres recurrentes, los límites entre secciones, las voces asignadas al diálogo y los cambios de registro emocional. La documentación establece la capacidad de generar contenido largo y los mecanismos de coherencia sin especificar un guion ilimitado ni una duración máxima de grabación garantizada. El resultado práctico es un audio expresivo cuyo narrador, formulación y progresión coinciden con el material preparado.",
    "alias_of": null,
    "aliases": [],
    "author": "Microsoft AI",
    "available": null,
    "canonical_model": "microsoft/mai-voice-2.1",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.044000",
            "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.000044",
            "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": "microsoft/mai-voice-2.1",
    "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": [
                  "microsoft/mai-voice-2.1"
                ],
                "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": [
                  "cs-CZ-Grant:MAI-Voice-2.1",
                  "cs-CZ-Harper:MAI-Voice-2.1",
                  "da-DK-Grant:MAI-Voice-2.1",
                  "da-DK-Harper:MAI-Voice-2.1",
                  "de-DE-Grant:MAI-Voice-2.1",
                  "de-DE-Harper:MAI-Voice-2.1",
                  "de-DE-Klaus:MAI-Voice-2.1",
                  "de-DE-Mia:MAI-Voice-2.1",
                  "en-AU-Isla:MAI-Voice-2.1",
                  "en-GB-Emily:MAI-Voice-2.1",
                  "en-GB-Harry:MAI-Voice-2.1",
                  "en-IN-Dhruv:MAI-Voice-2.1",
                  "en-IN-Priya:MAI-Voice-2.1",
                  "en-US-Ethan:MAI-Voice-2.1",
                  "en-US-Grant:MAI-Voice-2.1",
                  "en-US-Harper:MAI-Voice-2.1",
                  "en-US-Iris:MAI-Voice-2.1",
                  "en-US-Jasper:MAI-Voice-2.1",
                  "en-US-Olivia:MAI-Voice-2.1",
                  "en-US-Sage:MAI-Voice-2.1",
                  "es-ES-Marta:MAI-Voice-2.1",
                  "es-MX-Alejo:MAI-Voice-2.1",
                  "es-MX-Grant:MAI-Voice-2.1",
                  "es-MX-Harper:MAI-Voice-2.1",
                  "es-MX-Valeria:MAI-Voice-2.1",
                  "fi-FI-Grant:MAI-Voice-2.1",
                  "fi-FI-Harper:MAI-Voice-2.1",
                  "fr-FR-Grant:MAI-Voice-2.1",
                  "fr-FR-Harper:MAI-Voice-2.1",
                  "fr-FR-Marc:MAI-Voice-2.1",
                  "fr-FR-Soleil:MAI-Voice-2.1",
                  "hi-IN-Arjun:MAI-Voice-2.1",
                  "hi-IN-Dhruv:MAI-Voice-2.1",
                  "hi-IN-Grant:MAI-Voice-2.1",
                  "hi-IN-Harper:MAI-Voice-2.1",
                  "hi-IN-Kavya:MAI-Voice-2.1",
                  "hi-IN-Priya:MAI-Voice-2.1",
                  "hu-HU-Bence:MAI-Voice-2.1",
                  "hu-HU-Grant:MAI-Voice-2.1",
                  "hu-HU-Harper:MAI-Voice-2.1",
                  "hu-HU-Levente:MAI-Voice-2.1",
                  "hu-HU-Lilla:MAI-Voice-2.1",
                  "hu-HU-Reka:MAI-Voice-2.1",
                  "id-ID-Grant:MAI-Voice-2.1",
                  "id-ID-Harper:MAI-Voice-2.1",
                  "it-IT-Grant:MAI-Voice-2.1",
                  "it-IT-Harper:MAI-Voice-2.1",
                  "it-IT-Luca:MAI-Voice-2.1",
                  "it-IT-Rosa:MAI-Voice-2.1",
                  "ko-KR-Grant:MAI-Voice-2.1",
                  "ko-KR-Haena:MAI-Voice-2.1",
                  "ko-KR-Harper:MAI-Voice-2.1",
                  "ko-KR-Junho:MAI-Voice-2.1",
                  "nb-NO-Grant:MAI-Voice-2.1",
                  "nb-NO-Harper:MAI-Voice-2.1",
                  "nl-NL-Grant:MAI-Voice-2.1",
                  "nl-NL-Harper:MAI-Voice-2.1",
                  "nl-NL-Sander:MAI-Voice-2.1",
                  "pl-PL-Grant:MAI-Voice-2.1",
                  "pl-PL-Harper:MAI-Voice-2.1",
                  "pt-BR-Caio:MAI-Voice-2.1",
                  "pt-BR-Grant:MAI-Voice-2.1",
                  "pt-BR-Harper:MAI-Voice-2.1",
                  "pt-BR-Luana:MAI-Voice-2.1",
                  "pt-BR-Pedro:MAI-Voice-2.1",
                  "pt-BR-Rafael:MAI-Voice-2.1",
                  "pt-PT-Grant:MAI-Voice-2.1",
                  "pt-PT-Harper:MAI-Voice-2.1",
                  "pt-PT-Rui:MAI-Voice-2.1",
                  "ro-RO-Andrei:MAI-Voice-2.1",
                  "ro-RO-Elena:MAI-Voice-2.1",
                  "ro-RO-Grant:MAI-Voice-2.1",
                  "ro-RO-Harper:MAI-Voice-2.1",
                  "ro-RO-Ioana:MAI-Voice-2.1",
                  "ro-RO-Radu:MAI-Voice-2.1",
                  "ru-RU-Grant:MAI-Voice-2.1",
                  "ru-RU-Harper:MAI-Voice-2.1",
                  "ru-RU-Lev:MAI-Voice-2.1",
                  "ru-RU-Masha:MAI-Voice-2.1",
                  "sv-SE-Grant:MAI-Voice-2.1",
                  "sv-SE-Harper:MAI-Voice-2.1",
                  "th-TH-Grant:MAI-Voice-2.1",
                  "th-TH-Harper:MAI-Voice-2.1",
                  "th-TH-Krit:MAI-Voice-2.1",
                  "th-TH-Nattapong:MAI-Voice-2.1",
                  "tr-TR-Aydin:MAI-Voice-2.1",
                  "tr-TR-Elif:MAI-Voice-2.1",
                  "tr-TR-Grant:MAI-Voice-2.1",
                  "tr-TR-Harper:MAI-Voice-2.1",
                  "vi-VN-Grant:MAI-Voice-2.1",
                  "vi-VN-Harper:MAI-Voice-2.1",
                  "zh-CN-Bo:MAI-Voice-2.1",
                  "zh-CN-Grant:MAI-Voice-2.1",
                  "zh-CN-Harper:MAI-Voice-2.1",
                  "zh-CN-Lan:MAI-Voice-2.1",
                  "zh-CN-Mei:MAI-Voice-2.1",
                  "zh-CN-Wei:MAI-Voice-2.1"
                ],
                "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": [
              "cs-CZ-Grant:MAI-Voice-2.1",
              "cs-CZ-Harper:MAI-Voice-2.1",
              "da-DK-Grant:MAI-Voice-2.1",
              "da-DK-Harper:MAI-Voice-2.1",
              "de-DE-Grant:MAI-Voice-2.1",
              "de-DE-Harper:MAI-Voice-2.1",
              "de-DE-Klaus:MAI-Voice-2.1",
              "de-DE-Mia:MAI-Voice-2.1",
              "en-AU-Isla:MAI-Voice-2.1",
              "en-GB-Emily:MAI-Voice-2.1",
              "en-GB-Harry:MAI-Voice-2.1",
              "en-IN-Dhruv:MAI-Voice-2.1",
              "en-IN-Priya:MAI-Voice-2.1",
              "en-US-Ethan:MAI-Voice-2.1",
              "en-US-Grant:MAI-Voice-2.1",
              "en-US-Harper:MAI-Voice-2.1",
              "en-US-Iris:MAI-Voice-2.1",
              "en-US-Jasper:MAI-Voice-2.1",
              "en-US-Olivia:MAI-Voice-2.1",
              "en-US-Sage:MAI-Voice-2.1",
              "es-ES-Marta:MAI-Voice-2.1",
              "es-MX-Alejo:MAI-Voice-2.1",
              "es-MX-Grant:MAI-Voice-2.1",
              "es-MX-Harper:MAI-Voice-2.1",
              "es-MX-Valeria:MAI-Voice-2.1",
              "fi-FI-Grant:MAI-Voice-2.1",
              "fi-FI-Harper:MAI-Voice-2.1",
              "fr-FR-Grant:MAI-Voice-2.1",
              "fr-FR-Harper:MAI-Voice-2.1",
              "fr-FR-Marc:MAI-Voice-2.1",
              "fr-FR-Soleil:MAI-Voice-2.1",
              "hi-IN-Arjun:MAI-Voice-2.1",
              "hi-IN-Dhruv:MAI-Voice-2.1",
              "hi-IN-Grant:MAI-Voice-2.1",
              "hi-IN-Harper:MAI-Voice-2.1",
              "hi-IN-Kavya:MAI-Voice-2.1",
              "hi-IN-Priya:MAI-Voice-2.1",
              "hu-HU-Bence:MAI-Voice-2.1",
              "hu-HU-Grant:MAI-Voice-2.1",
              "hu-HU-Harper:MAI-Voice-2.1",
              "hu-HU-Levente:MAI-Voice-2.1",
              "hu-HU-Lilla:MAI-Voice-2.1",
              "hu-HU-Reka:MAI-Voice-2.1",
              "id-ID-Grant:MAI-Voice-2.1",
              "id-ID-Harper:MAI-Voice-2.1",
              "it-IT-Grant:MAI-Voice-2.1",
              "it-IT-Harper:MAI-Voice-2.1",
              "it-IT-Luca:MAI-Voice-2.1",
              "it-IT-Rosa:MAI-Voice-2.1",
              "ko-KR-Grant:MAI-Voice-2.1",
              "ko-KR-Haena:MAI-Voice-2.1",
              "ko-KR-Harper:MAI-Voice-2.1",
              "ko-KR-Junho:MAI-Voice-2.1",
              "nb-NO-Grant:MAI-Voice-2.1",
              "nb-NO-Harper:MAI-Voice-2.1",
              "nl-NL-Grant:MAI-Voice-2.1",
              "nl-NL-Harper:MAI-Voice-2.1",
              "nl-NL-Sander:MAI-Voice-2.1",
              "pl-PL-Grant:MAI-Voice-2.1",
              "pl-PL-Harper:MAI-Voice-2.1",
              "pt-BR-Caio:MAI-Voice-2.1",
              "pt-BR-Grant:MAI-Voice-2.1",
              "pt-BR-Harper:MAI-Voice-2.1",
              "pt-BR-Luana:MAI-Voice-2.1",
              "pt-BR-Pedro:MAI-Voice-2.1",
              "pt-BR-Rafael:MAI-Voice-2.1",
              "pt-PT-Grant:MAI-Voice-2.1",
              "pt-PT-Harper:MAI-Voice-2.1",
              "pt-PT-Rui:MAI-Voice-2.1",
              "ro-RO-Andrei:MAI-Voice-2.1",
              "ro-RO-Elena:MAI-Voice-2.1",
              "ro-RO-Grant:MAI-Voice-2.1",
              "ro-RO-Harper:MAI-Voice-2.1",
              "ro-RO-Ioana:MAI-Voice-2.1",
              "ro-RO-Radu:MAI-Voice-2.1",
              "ru-RU-Grant:MAI-Voice-2.1",
              "ru-RU-Harper:MAI-Voice-2.1",
              "ru-RU-Lev:MAI-Voice-2.1",
              "ru-RU-Masha:MAI-Voice-2.1",
              "sv-SE-Grant:MAI-Voice-2.1",
              "sv-SE-Harper:MAI-Voice-2.1",
              "th-TH-Grant:MAI-Voice-2.1",
              "th-TH-Harper:MAI-Voice-2.1",
              "th-TH-Krit:MAI-Voice-2.1",
              "th-TH-Nattapong:MAI-Voice-2.1",
              "tr-TR-Aydin:MAI-Voice-2.1",
              "tr-TR-Elif:MAI-Voice-2.1",
              "tr-TR-Grant:MAI-Voice-2.1",
              "tr-TR-Harper:MAI-Voice-2.1",
              "vi-VN-Grant:MAI-Voice-2.1",
              "vi-VN-Harper:MAI-Voice-2.1",
              "zh-CN-Bo:MAI-Voice-2.1",
              "zh-CN-Grant:MAI-Voice-2.1",
              "zh-CN-Harper:MAI-Voice-2.1",
              "zh-CN-Lan:MAI-Voice-2.1",
              "zh-CN-Mei:MAI-Voice-2.1",
              "zh-CN-Wei:MAI-Voice-2.1"
            ]
          },
          "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.044000",
                "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.000044",
                "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": "53ceea2ccaa50cadb12f",
            "label": "Microsoft AI: MAI-Voice-2.1",
            "profiles": [
              {
                "basis": "",
                "dimensions": {
                  "conditions": "Configuración predeterminada"
                },
                "label": "Microsoft AI: MAI-Voice-2.1 · Configuración predeterminada",
                "units": [
                  {
                    "amount": "0.000044",
                    "amount_unit": "usd_per_exact_physical_unit",
                    "billing_input": false,
                    "key": "8d1e4e9bf0f3647249d90a3c",
                    "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\": \"microsoft/mai-voice-2.1\", \"input\": \"Good afternoon! This is a short voice take.\"}')\nvoice=os.environ[\"AILOOT_VOICE_ID\"]\nallowed=json.loads('[\"cs-CZ-Grant:MAI-Voice-2.1\", \"cs-CZ-Harper:MAI-Voice-2.1\", \"da-DK-Grant:MAI-Voice-2.1\", \"da-DK-Harper:MAI-Voice-2.1\", \"de-DE-Grant:MAI-Voice-2.1\", \"de-DE-Harper:MAI-Voice-2.1\", \"de-DE-Klaus:MAI-Voice-2.1\", \"de-DE-Mia:MAI-Voice-2.1\", \"en-AU-Isla:MAI-Voice-2.1\", \"en-GB-Emily:MAI-Voice-2.1\", \"en-GB-Harry:MAI-Voice-2.1\", \"en-IN-Dhruv:MAI-Voice-2.1\", \"en-IN-Priya:MAI-Voice-2.1\", \"en-US-Ethan:MAI-Voice-2.1\", \"en-US-Grant:MAI-Voice-2.1\", \"en-US-Harper:MAI-Voice-2.1\", \"en-US-Iris:MAI-Voice-2.1\", \"en-US-Jasper:MAI-Voice-2.1\", \"en-US-Olivia:MAI-Voice-2.1\", \"en-US-Sage:MAI-Voice-2.1\", \"es-ES-Marta:MAI-Voice-2.1\", \"es-MX-Alejo:MAI-Voice-2.1\", \"es-MX-Grant:MAI-Voice-2.1\", \"es-MX-Harper:MAI-Voice-2.1\", \"es-MX-Valeria:MAI-Voice-2.1\", \"fi-FI-Grant:MAI-Voice-2.1\", \"fi-FI-Harper:MAI-Voice-2.1\", \"fr-FR-Grant:MAI-Voice-2.1\", \"fr-FR-Harper:MAI-Voice-2.1\", \"fr-FR-Marc:MAI-Voice-2.1\", \"fr-FR-Soleil:MAI-Voice-2.1\", \"hi-IN-Arjun:MAI-Voice-2.1\", \"hi-IN-Dhruv:MAI-Voice-2.1\", \"hi-IN-Grant:MAI-Voice-2.1\", \"hi-IN-Harper:MAI-Voice-2.1\", \"hi-IN-Kavya:MAI-Voice-2.1\", \"hi-IN-Priya:MAI-Voice-2.1\", \"hu-HU-Bence:MAI-Voice-2.1\", \"hu-HU-Grant:MAI-Voice-2.1\", \"hu-HU-Harper:MAI-Voice-2.1\", \"hu-HU-Levente:MAI-Voice-2.1\", \"hu-HU-Lilla:MAI-Voice-2.1\", \"hu-HU-Reka:MAI-Voice-2.1\", \"id-ID-Grant:MAI-Voice-2.1\", \"id-ID-Harper:MAI-Voice-2.1\", \"it-IT-Grant:MAI-Voice-2.1\", \"it-IT-Harper:MAI-Voice-2.1\", \"it-IT-Luca:MAI-Voice-2.1\", \"it-IT-Rosa:MAI-Voice-2.1\", \"ko-KR-Grant:MAI-Voice-2.1\", \"ko-KR-Haena:MAI-Voice-2.1\", \"ko-KR-Harper:MAI-Voice-2.1\", \"ko-KR-Junho:MAI-Voice-2.1\", \"nb-NO-Grant:MAI-Voice-2.1\", \"nb-NO-Harper:MAI-Voice-2.1\", \"nl-NL-Grant:MAI-Voice-2.1\", \"nl-NL-Harper:MAI-Voice-2.1\", \"nl-NL-Sander:MAI-Voice-2.1\", \"pl-PL-Grant:MAI-Voice-2.1\", \"pl-PL-Harper:MAI-Voice-2.1\", \"pt-BR-Caio:MAI-Voice-2.1\", \"pt-BR-Grant:MAI-Voice-2.1\", \"pt-BR-Harper:MAI-Voice-2.1\", \"pt-BR-Luana:MAI-Voice-2.1\", \"pt-BR-Pedro:MAI-Voice-2.1\", \"pt-BR-Rafael:MAI-Voice-2.1\", \"pt-PT-Grant:MAI-Voice-2.1\", \"pt-PT-Harper:MAI-Voice-2.1\", \"pt-PT-Rui:MAI-Voice-2.1\", \"ro-RO-Andrei:MAI-Voice-2.1\", \"ro-RO-Elena:MAI-Voice-2.1\", \"ro-RO-Grant:MAI-Voice-2.1\", \"ro-RO-Harper:MAI-Voice-2.1\", \"ro-RO-Ioana:MAI-Voice-2.1\", \"ro-RO-Radu:MAI-Voice-2.1\", \"ru-RU-Grant:MAI-Voice-2.1\", \"ru-RU-Harper:MAI-Voice-2.1\", \"ru-RU-Lev:MAI-Voice-2.1\", \"ru-RU-Masha:MAI-Voice-2.1\", \"sv-SE-Grant:MAI-Voice-2.1\", \"sv-SE-Harper:MAI-Voice-2.1\", \"th-TH-Grant:MAI-Voice-2.1\", \"th-TH-Harper:MAI-Voice-2.1\", \"th-TH-Krit:MAI-Voice-2.1\", \"th-TH-Nattapong:MAI-Voice-2.1\", \"tr-TR-Aydin:MAI-Voice-2.1\", \"tr-TR-Elif:MAI-Voice-2.1\", \"tr-TR-Grant:MAI-Voice-2.1\", \"tr-TR-Harper:MAI-Voice-2.1\", \"vi-VN-Grant:MAI-Voice-2.1\", \"vi-VN-Harper:MAI-Voice-2.1\", \"zh-CN-Bo:MAI-Voice-2.1\", \"zh-CN-Grant:MAI-Voice-2.1\", \"zh-CN-Harper:MAI-Voice-2.1\", \"zh-CN-Lan:MAI-Voice-2.1\", \"zh-CN-Mei:MAI-Voice-2.1\", \"zh-CN-Wei:MAI-Voice-2.1\"]')\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": 4.4e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_meter": "utf8.RuneCountInString(validUTF8): one Han codepoint=1; no Han weighting",
              "quoted_unit": "per 1000 input character"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.044000",
                "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.000044",
                "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": "microsoft/mai-voice-2.1",
        "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.044000",
            "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.000044",
            "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": "microsoft/mai-voice-2.1",
        "request_model_id": "microsoft/mai-voice-2.1",
        "route_label": "Ultra"
      }
    ],
    "name": "Microsoft AI: MAI-Voice-2.1",
    "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.000044",
            "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": "microsoft/mai-voice-2.1",
    "short": "MAI-Voice-2.1 de Microsoft AI genera voz multilingüe expresiva para narraciones, audiolibros, contenido educativo y locuciones. Su perfil de 23 idiomas permite mantener una identidad de voz coherente, usar varios hablantes y controlar la interpretación."
  },
  "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": "MAI-Voice-2.1 de Microsoft AI genera voz multilingüe expresiva para narraciones, audiolibros, contenido educativo y locuciones. Su perfil de 23 idiomas permite mantener una identidad de voz coherente, usar varios hablantes y controlar la interpretación.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "d58b2b4de95ca8a61f6c3a9ba37a5a5b4f2509751e97083c53ff879c16e7915d",
    "renderer_sha256": "b6d488b4bdee68568e5b17d2d4871b2ba1885e1032091b635a7a58ad2ca224e7"
  },
  "sourceRevision": "aee24369168d8a9074f3146fce8fda611c529968f32037444c87b4b0a10fa0d4"
}
