{
  "aboutHtml": "<p>Transcribe 1 es el modelo general de voz a texto de Fish Audio para grabaciones cortas. Acepta un archivo de audio y devuelve las palabras reconocidas como texto, junto con la duración de la grabación, segmentos temporizados opcionales e información del idioma cuando se conoce. Este modelo resulta útil para una nota de voz corta, una instrucción hablada, un fragmento de una grabación o un clip de audio que necesite una representación legible en texto.</p><p>Un flujo ilustrativo de notas de voz conserva la grabación junto a su transcripción completa y un identificador del clip original. Un paso posterior de la aplicación puede buscar en ese texto, organizar la nota o elaborar un resumen conservando la fuente hablada. Para una orden, la transcripción proporciona a la aplicación las palabras reconocidas; cualquier acción es un paso independiente de interpretación y ejecución. Para un fragmento de entrevista, registra la posición del clip en el audio completo para poder comprobar una cita en el lugar correcto.</p><p>El productor acepta WAV, MP3, AAC, incluidos M4A/MP4, FLAC y Ogg con Opus o Vorbis. Las grabaciones del navegador en WebM deben convertirse a Ogg/Opus, MP3 o WAV para este modelo; Pro documenta compatibilidad nativa con contenedores adicionales. Proporciona un archivo de audio por petición. El límite documentado por petición del modelo base es de hasta 50 MiB, manteniendo los archivos MP3 y Opus por debajo de 25 MiB. El tamaño del archivo y la duración de la grabación son consideraciones distintas: un archivo comprimido puede ajustarse al límite de subida y, aun así, tardar demasiado en procesarse.</p><p>Transcribe 1 está diseñado para grabaciones cortas. El productor recomienda Pro para audio de más de unos pocos minutos; una petición larga al modelo base puede fallar si supera el límite de tiempo de procesamiento. Al preparar una fuente más larga para transcribir clips cortos, conserva el desplazamiento inicial de cada clip y confirma que la transcripción devuelta cubra el clip completo antes de combinar los resultados. Suma el desplazamiento original a los tiempos locales de los segmentos para mantener la navegación vinculada a la grabación completa. Las indicaciones del modelo base no deben interpretarse como el límite independiente de 60 minutos de Pro.</p><p>La respuesta del productor incluye texto, duración y segmentos. La duración se expresa en segundos y la transcripción completa legible debe conservarse como redacción principal del clip. Las marcas de tiempo son opcionales: ignore_timestamps tiene true como valor predeterminado en la API del productor, mientras que false solicita segmentos por palabra con texto y tiempos de inicio y fin en segundos. Solicitar alineación añade tiempo de procesamiento. Un array segments vacío puede reflejar que se ha omitido la temporización, que no hay habla o que la alineación no está disponible temporalmente, por lo que no debe interpretarse automáticamente como una transcripción completa vacía.</p><p>Los segmentos suelen ser palabras, o uno o varios caracteres en chino y japonés. Su texto omite la puntuación y puede normalizar un valor de forma distinta a la transcripción completa; no es una copia carácter por carácter de la respuesta legible. Un segmento puede tener el mismo tiempo de inicio y de fin. Utiliza los segmentos para localizar una posición de la grabación o preparar una visualización temporizada, y usa el texto completo cuando importen la redacción y la puntuación. Mantén estas dos representaciones separadas en el archivo resultante.</p><p>El idioma se detecta automáticamente, se proporcione o no una indicación opcional del idioma. El productor documenta códigos ISO 639-1 en minúsculas para estas indicaciones y devuelve un código de idioma para la lógica de la aplicación, junto con un nombre de idioma para mostrar cuando se conoce. La respuesta informa de un idioma, no de todos los idiomas de una grabación que alterna entre varios. Conserva la redacción de la fuente y los metadatos de idioma disponibles junto al resultado, en vez de tratar la petición de transcripción como una operación de traducción.</p><p>Para un flujo de subtítulos, agrupa segmentos temporizados consecutivos en entradas legibles en lugar de mostrar una palabra cada vez. Un resultado útil es un archivo SRT o WebVTT vinculado al clip original, con límites de entrada ajustados a las pausas y una cantidad manejable de texto en pantalla. Comprueba si faltan tiempos y asegúrate de que el fin de cada entrada sea posterior a su inicio. La agrupación de subtítulos y el formato del archivo son pasos de la aplicación construidos a partir de la alineación devuelta, y sus opciones de visualización deben ajustarse al reproductor y al público.</p><p>Los controles documentados de Transcribe 1 son el audio, una indicación del idioma y la elección de marcas de tiempo. Los marcadores de hablante, los turnos estructurados por hablante, los controles de eventos emocionales y las indicaciones de número de hablantes de Pro son funciones independientes; no forman parte del contrato de respuesta documentado de este modelo base. Elige el resultado necesario antes de procesar: texto legible simple para una nota, o texto junto con alineación para navegación durante la reproducción y subtítulos. Conservar el identificador del clip, la transcripción y cualquier temporización disponible hace útil ese resultado para la siguiente etapa de la aplicación.</p>",
  "aboutText": "Transcribe 1 es el modelo general de voz a texto de Fish Audio para grabaciones cortas. Acepta un archivo de audio y devuelve las palabras reconocidas como texto, junto con la duración de la grabación, segmentos temporizados opcionales e información del idioma cuando se conoce. Este modelo resulta útil para una nota de voz corta, una instrucción hablada, un fragmento de una grabación o un clip de audio que necesite una representación legible en texto.\n\nUn flujo ilustrativo de notas de voz conserva la grabación junto a su transcripción completa y un identificador del clip original. Un paso posterior de la aplicación puede buscar en ese texto, organizar la nota o elaborar un resumen conservando la fuente hablada. Para una orden, la transcripción proporciona a la aplicación las palabras reconocidas; cualquier acción es un paso independiente de interpretación y ejecución. Para un fragmento de entrevista, registra la posición del clip en el audio completo para poder comprobar una cita en el lugar correcto.\n\nEl productor acepta WAV, MP3, AAC, incluidos M4A/MP4, FLAC y Ogg con Opus o Vorbis. Las grabaciones del navegador en WebM deben convertirse a Ogg/Opus, MP3 o WAV para este modelo; Pro documenta compatibilidad nativa con contenedores adicionales. Proporciona un archivo de audio por petición. El límite documentado por petición del modelo base es de hasta 50 MiB, manteniendo los archivos MP3 y Opus por debajo de 25 MiB. El tamaño del archivo y la duración de la grabación son consideraciones distintas: un archivo comprimido puede ajustarse al límite de subida y, aun así, tardar demasiado en procesarse.\n\nTranscribe 1 está diseñado para grabaciones cortas. El productor recomienda Pro para audio de más de unos pocos minutos; una petición larga al modelo base puede fallar si supera el límite de tiempo de procesamiento. Al preparar una fuente más larga para transcribir clips cortos, conserva el desplazamiento inicial de cada clip y confirma que la transcripción devuelta cubra el clip completo antes de combinar los resultados. Suma el desplazamiento original a los tiempos locales de los segmentos para mantener la navegación vinculada a la grabación completa. Las indicaciones del modelo base no deben interpretarse como el límite independiente de 60 minutos de Pro.\n\nLa respuesta del productor incluye texto, duración y segmentos. La duración se expresa en segundos y la transcripción completa legible debe conservarse como redacción principal del clip. Las marcas de tiempo son opcionales: ignore_timestamps tiene true como valor predeterminado en la API del productor, mientras que false solicita segmentos por palabra con texto y tiempos de inicio y fin en segundos. Solicitar alineación añade tiempo de procesamiento. Un array segments vacío puede reflejar que se ha omitido la temporización, que no hay habla o que la alineación no está disponible temporalmente, por lo que no debe interpretarse automáticamente como una transcripción completa vacía.\n\nLos segmentos suelen ser palabras, o uno o varios caracteres en chino y japonés. Su texto omite la puntuación y puede normalizar un valor de forma distinta a la transcripción completa; no es una copia carácter por carácter de la respuesta legible. Un segmento puede tener el mismo tiempo de inicio y de fin. Utiliza los segmentos para localizar una posición de la grabación o preparar una visualización temporizada, y usa el texto completo cuando importen la redacción y la puntuación. Mantén estas dos representaciones separadas en el archivo resultante.\n\nEl idioma se detecta automáticamente, se proporcione o no una indicación opcional del idioma. El productor documenta códigos ISO 639-1 en minúsculas para estas indicaciones y devuelve un código de idioma para la lógica de la aplicación, junto con un nombre de idioma para mostrar cuando se conoce. La respuesta informa de un idioma, no de todos los idiomas de una grabación que alterna entre varios. Conserva la redacción de la fuente y los metadatos de idioma disponibles junto al resultado, en vez de tratar la petición de transcripción como una operación de traducción.\n\nPara un flujo de subtítulos, agrupa segmentos temporizados consecutivos en entradas legibles en lugar de mostrar una palabra cada vez. Un resultado útil es un archivo SRT o WebVTT vinculado al clip original, con límites de entrada ajustados a las pausas y una cantidad manejable de texto en pantalla. Comprueba si faltan tiempos y asegúrate de que el fin de cada entrada sea posterior a su inicio. La agrupación de subtítulos y el formato del archivo son pasos de la aplicación construidos a partir de la alineación devuelta, y sus opciones de visualización deben ajustarse al reproductor y al público.\n\nLos controles documentados de Transcribe 1 son el audio, una indicación del idioma y la elección de marcas de tiempo. Los marcadores de hablante, los turnos estructurados por hablante, los controles de eventos emocionales y las indicaciones de número de hablantes de Pro son funciones independientes; no forman parte del contrato de respuesta documentado de este modelo base. Elige el resultado necesario antes de procesar: texto legible simple para una nota, o texto junto con alineación para navegación durante la reproducción y subtítulos. Conservar el identificador del clip, la transcripción y cualquier temporización disponible hace útil ese resultado para la siguiente etapa de la aplicación.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "cc35e4b56fbbe2507902dc2dc8731e75334cf4531930d63eea04f9da9d993aa6",
    "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\">Fish Audio: Transcribe 1</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Cerrar\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/transcribe-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|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1\">Transcripción</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\">Transcribe 1 convierte grabaciones de audio cortas en texto con detección automática del idioma y marcas de tiempo opcionales por palabra. Utiliza la transcripción para notas de voz, clips que puedan buscarse o preparación de subtítulos, manteniendo los segmentos temporizados separados del texto completo legible.</p><dl class=\"card-io\" data-card-io><div><dt>Entradas aceptadas</dt><dd>Audio</dd></div><div><dt>Resultados</dt><dd>Texto</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>Transcribe 1 es el modelo general de voz a texto de Fish Audio para grabaciones cortas. Acepta un archivo de audio y devuelve las palabras reconocidas como texto, junto con la duración de la grabación, segmentos temporizados opcionales e información del idioma cuando se conoce. Este modelo resulta útil para una nota de voz corta, una instrucción hablada, un fragmento de una grabación o un clip de audio que necesite una representación legible en texto.</p><p>Un flujo ilustrativo de notas de voz conserva la grabación junto a su transcripción completa y un identificador del clip original. Un paso posterior de la aplicación puede buscar en ese texto, organizar la nota o elaborar un resumen conservando la fuente hablada. Para una orden, la transcripción proporciona a la aplicación las palabras reconocidas; cualquier acción es un paso independiente de interpretación y ejecución. Para un fragmento de entrevista, registra la posición del clip en el audio completo para poder comprobar una cita en el lugar correcto.</p><p>El productor acepta WAV, MP3, AAC, incluidos M4A/MP4, FLAC y Ogg con Opus o Vorbis. Las grabaciones del navegador en WebM deben convertirse a Ogg/Opus, MP3 o WAV para este modelo; Pro documenta compatibilidad nativa con contenedores adicionales. Proporciona un archivo de audio por petición. El límite documentado por petición del modelo base es de hasta 50 MiB, manteniendo los archivos MP3 y Opus por debajo de 25 MiB. El tamaño del archivo y la duración de la grabación son consideraciones distintas: un archivo comprimido puede ajustarse al límite de subida y, aun así, tardar demasiado en procesarse.</p><p>Transcribe 1 está diseñado para grabaciones cortas. El productor recomienda Pro para audio de más de unos pocos minutos; una petición larga al modelo base puede fallar si supera el límite de tiempo de procesamiento. Al preparar una fuente más larga para transcribir clips cortos, conserva el desplazamiento inicial de cada clip y confirma que la transcripción devuelta cubra el clip completo antes de combinar los resultados. Suma el desplazamiento original a los tiempos locales de los segmentos para mantener la navegación vinculada a la grabación completa. Las indicaciones del modelo base no deben interpretarse como el límite independiente de 60 minutos de Pro.</p><p>La respuesta del productor incluye texto, duración y segmentos. La duración se expresa en segundos y la transcripción completa legible debe conservarse como redacción principal del clip. Las marcas de tiempo son opcionales: ignore_timestamps tiene true como valor predeterminado en la API del productor, mientras que false solicita segmentos por palabra con texto y tiempos de inicio y fin en segundos. Solicitar alineación añade tiempo de procesamiento. Un array segments vacío puede reflejar que se ha omitido la temporización, que no hay habla o que la alineación no está disponible temporalmente, por lo que no debe interpretarse automáticamente como una transcripción completa vacía.</p><p>Los segmentos suelen ser palabras, o uno o varios caracteres en chino y japonés. Su texto omite la puntuación y puede normalizar un valor de forma distinta a la transcripción completa; no es una copia carácter por carácter de la respuesta legible. Un segmento puede tener el mismo tiempo de inicio y de fin. Utiliza los segmentos para localizar una posición de la grabación o preparar una visualización temporizada, y usa el texto completo cuando importen la redacción y la puntuación. Mantén estas dos representaciones separadas en el archivo resultante.</p><p>El idioma se detecta automáticamente, se proporcione o no una indicación opcional del idioma. El productor documenta códigos ISO 639-1 en minúsculas para estas indicaciones y devuelve un código de idioma para la lógica de la aplicación, junto con un nombre de idioma para mostrar cuando se conoce. La respuesta informa de un idioma, no de todos los idiomas de una grabación que alterna entre varios. Conserva la redacción de la fuente y los metadatos de idioma disponibles junto al resultado, en vez de tratar la petición de transcripción como una operación de traducción.</p><p>Para un flujo de subtítulos, agrupa segmentos temporizados consecutivos en entradas legibles en lugar de mostrar una palabra cada vez. Un resultado útil es un archivo SRT o WebVTT vinculado al clip original, con límites de entrada ajustados a las pausas y una cantidad manejable de texto en pantalla. Comprueba si faltan tiempos y asegúrate de que el fin de cada entrada sea posterior a su inicio. La agrupación de subtítulos y el formato del archivo son pasos de la aplicación construidos a partir de la alineación devuelta, y sus opciones de visualización deben ajustarse al reproductor y al público.</p><p>Los controles documentados de Transcribe 1 son el audio, una indicación del idioma y la elección de marcas de tiempo. Los marcadores de hablante, los turnos estructurados por hablante, los controles de eventos emocionales y las indicaciones de número de hablantes de Pro son funciones independientes; no forman parte del contrato de respuesta documentado de este modelo base. Elige el resultado necesario antes de procesar: texto legible simple para una nota, o texto junto con alineación para navegación durante la reproducción y subtítulos. Conservar el identificador del clip, la transcripción y cualquier temporización disponible hace útil ese resultado para la siguiente etapa de la aplicación.</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 · Transcripción</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Tipos de entrada</dt><dd><code>audio</code></dd></div><div><dt>Tipos de salida</dt><dd><code>text</code></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><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>fish-audio/transcribe-1</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">input_audio</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>object</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></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr></tbody></table></div><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_audio</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>audio</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>material_conditions</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>El ejemplo lee tu archivo PCM WAV real y no vacío, codifica todos los bytes del archivo en base64 y envía input_audio.format con el valor wav.</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 exacto de un registro existente de medios bajo tu titularidad</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">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>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=\"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>segundo de audio de entrada</th><td data-cell-label=\"Tabla de tarifas\"><span class=\"card-cell-label\">Tabla de tarifas</span>—</td><td data-cell-label=\"Unidad de facturación\"><span class=\"card-cell-label\">Unidad de facturación</span>por segundo de audio de entrada</td><td data-cell-label=\"Cargo\"><span class=\"card-cell-label\">Cargo</span><div><span>Entrada · segundo de audio de entrada</span> <b>$0.0002</b> <span class=\"price-unit\">por segundo de audio de entrada</span></div></td></tr></tbody></table></div></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 · Transcripción</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-1361-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1361-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · archivo WAV real y resultado original completo</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-1361-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1361-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_AUDIO_FILE:?Set the path to your actual PCM WAV recording}&quot;\nexport AILOOT_AUDIO_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ[&#39;AILOOT_AUDIO_FILE&#39;]).read_bytes()\nif not (audio[:4] == b&#39;RIFF&#39; and audio[8:12] == b&#39;WAVE&#39;):\n    raise SystemExit(&#39;Supply your actual PCM WAV audio file&#39;)\nwith wave.open(io.BytesIO(audio), &#39;rb&#39;) as recording:\n    if recording.getcomptype() != &#39;NONE&#39; or recording.getnframes() &lt;= 0:\n        raise SystemExit(&#39;Supply a nonempty PCM WAV recording&#39;)\nrequest = {&#39;model&#39;: &#39;fish-audio/transcribe-1&#39;, &#39;input_audio&#39;: {&#39;data&#39;: base64.b64encode(audio).decode(&#39;ascii&#39;), &#39;format&#39;: &#39;wav&#39;}}\nPath(&#39;request.json&#39;).write_text(json.dumps(request, ensure_ascii=False), encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\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 · Transcripción</h4><p class=\"note-s\">Cuerpo original completo de la respuesta, estado y cabeceras reenviadas. Este manejador no añade una estructura JSON universal, un campo de texto ni un contenedor de tarea.</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Conserva 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 la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.</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 X-Client-Request-ID real y la respuesta completa. Consulta los recursos originales bajo tu titularidad y sus URL firmadas exactas de contenido; no vuelvas a enviar nunca una creación incierta.</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\">text (when present)</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span></td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">usage (when present)</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span></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>El cuerpo JSON o el ID canónico explícito del modelo no es válido.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva la respuesta y corrige el campo indicado de la solicitud.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>La clave API de Ailoot no es válida.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Usa tu clave API autorizada de Ailoot.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>403 · <code>permission_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>El grupo de la clave no tiene acceso a este método.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva los detalles del error devueltos.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>El método seleccionado no tiene ninguna ruta admitida.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva los detalles del error devueltos.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>La tarifa aceptada no puede obtener la cantidad de entrada o el límite que necesita.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva la respuesta; utiliza la representación de entrada exigida por la tarifa aceptada.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>503 · <code></code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>El almacenamiento, la ruta, el precio del método o la reserva necesarios no están disponibles.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva la respuesta original completa. Una reserva incierta no autoriza un reenvío.</td></tr><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>502 · <code>server_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>Es necesario comprobar el resultado original, el uso o la liquidación.</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Conserva el ID real de solicitud y la respuesta original. Consulta el registro existente bajo tu titularidad; 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=fish-audio%2Ftranscribe-1&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-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=fish-audio%2Ftranscribe-1&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/transcribe-1",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "El cuerpo JSON o el ID canónico explícito del modelo no es válido.",
                "http_status": 400,
                "recovery": "Conserva la respuesta y corrige el campo indicado de la solicitud.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La clave API de Ailoot no es válida.",
                "http_status": 401,
                "recovery": "Usa tu clave API autorizada de Ailoot.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "El grupo de la clave no tiene acceso a este método.",
                "http_status": 403,
                "recovery": "Conserva los detalles del error devueltos.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "El método seleccionado no tiene ninguna ruta admitida.",
                "http_status": 404,
                "recovery": "Conserva los detalles del error devueltos.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "La tarifa aceptada no puede obtener la cantidad de entrada o el límite que necesita.",
                "http_status": 422,
                "recovery": "Conserva la respuesta; utiliza la representación de entrada exigida por la tarifa aceptada.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "El almacenamiento, la ruta, el precio del método o la reserva necesarios no están disponibles.",
                "http_status": 503,
                "recovery": "Conserva la respuesta original completa. Una reserva incierta no autoriza un reenvío.",
                "type": null
              },
              {
                "code": null,
                "condition": "Es necesario comprobar el resultado original, el uso o la liquidación.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Conserva el ID real de solicitud y la respuesta original. Consulta el registro existente bajo tu titularidad; no vuelvas a enviar la solicitud de creación.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "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 content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conserva el X-Client-Request-ID real y la respuesta completa. Consulta los recursos originales bajo tu titularidad y sus URL firmadas exactas de contenido; no vuelvas a enviar nunca una creación incierta."
            },
            "outputs": {
              "all_results": "Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Cuerpo original completo de la respuesta, estado y cabeceras reenviadas. Este manejador no añade una estructura JSON universal, un campo de texto ni un contenedor de tarea."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "El ejemplo lee tu archivo PCM WAV real y no vacío, codifica todos los bytes del archivo en base64 y envía input_audio.format con el valor wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "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 content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id exacto de un registro existente de medios bajo tu titularidad",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Transcripción",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "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_second": 0.0002
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/transcribe-1",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "f08a5586007cb1857f4e146d0b161bca3904bb4cc5860bf6ba1a0a1162b02344",
    "input_html_sha256": "51df63b3cf4acacf37c8f7a8704bbcc7615060b81ddee11b9895b1989af77c15",
    "private_audit_sha256": "1af70bf5a9aefb0e220f53cd441870d0bb378b29d9e47ae83af7a320ff9f0806",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/es/fish-audio-transcribe-1/",
    "description": "Transcribe 1 convierte grabaciones de audio cortas en texto con detección automática del idioma y marcas de tiempo opcionales por palabra. Utiliza la transcripción para notas de voz, clips que puedan buscarse o preparación de subtítulos, manteniendo los segmentos temporizados separados del texto completo legible.",
    "locale": "es",
    "md_url": "https://ailoot.ai/models/es/fish-audio-transcribe-1/index.md",
    "title": "Fish Audio: Transcribe 1 — Ailoot",
    "url": "https://ailoot.ai/models/es/fish-audio-transcribe-1/"
  },
  "rawModel": {
    "about": "Transcribe 1 es el modelo general de voz a texto de Fish Audio para grabaciones cortas. Acepta un archivo de audio y devuelve las palabras reconocidas como texto, junto con la duración de la grabación, segmentos temporizados opcionales e información del idioma cuando se conoce. Este modelo resulta útil para una nota de voz corta, una instrucción hablada, un fragmento de una grabación o un clip de audio que necesite una representación legible en texto.\n\nUn flujo ilustrativo de notas de voz conserva la grabación junto a su transcripción completa y un identificador del clip original. Un paso posterior de la aplicación puede buscar en ese texto, organizar la nota o elaborar un resumen conservando la fuente hablada. Para una orden, la transcripción proporciona a la aplicación las palabras reconocidas; cualquier acción es un paso independiente de interpretación y ejecución. Para un fragmento de entrevista, registra la posición del clip en el audio completo para poder comprobar una cita en el lugar correcto.\n\nEl productor acepta WAV, MP3, AAC, incluidos M4A/MP4, FLAC y Ogg con Opus o Vorbis. Las grabaciones del navegador en WebM deben convertirse a Ogg/Opus, MP3 o WAV para este modelo; Pro documenta compatibilidad nativa con contenedores adicionales. Proporciona un archivo de audio por petición. El límite documentado por petición del modelo base es de hasta 50 MiB, manteniendo los archivos MP3 y Opus por debajo de 25 MiB. El tamaño del archivo y la duración de la grabación son consideraciones distintas: un archivo comprimido puede ajustarse al límite de subida y, aun así, tardar demasiado en procesarse.\n\nTranscribe 1 está diseñado para grabaciones cortas. El productor recomienda Pro para audio de más de unos pocos minutos; una petición larga al modelo base puede fallar si supera el límite de tiempo de procesamiento. Al preparar una fuente más larga para transcribir clips cortos, conserva el desplazamiento inicial de cada clip y confirma que la transcripción devuelta cubra el clip completo antes de combinar los resultados. Suma el desplazamiento original a los tiempos locales de los segmentos para mantener la navegación vinculada a la grabación completa. Las indicaciones del modelo base no deben interpretarse como el límite independiente de 60 minutos de Pro.\n\nLa respuesta del productor incluye texto, duración y segmentos. La duración se expresa en segundos y la transcripción completa legible debe conservarse como redacción principal del clip. Las marcas de tiempo son opcionales: ignore_timestamps tiene true como valor predeterminado en la API del productor, mientras que false solicita segmentos por palabra con texto y tiempos de inicio y fin en segundos. Solicitar alineación añade tiempo de procesamiento. Un array segments vacío puede reflejar que se ha omitido la temporización, que no hay habla o que la alineación no está disponible temporalmente, por lo que no debe interpretarse automáticamente como una transcripción completa vacía.\n\nLos segmentos suelen ser palabras, o uno o varios caracteres en chino y japonés. Su texto omite la puntuación y puede normalizar un valor de forma distinta a la transcripción completa; no es una copia carácter por carácter de la respuesta legible. Un segmento puede tener el mismo tiempo de inicio y de fin. Utiliza los segmentos para localizar una posición de la grabación o preparar una visualización temporizada, y usa el texto completo cuando importen la redacción y la puntuación. Mantén estas dos representaciones separadas en el archivo resultante.\n\nEl idioma se detecta automáticamente, se proporcione o no una indicación opcional del idioma. El productor documenta códigos ISO 639-1 en minúsculas para estas indicaciones y devuelve un código de idioma para la lógica de la aplicación, junto con un nombre de idioma para mostrar cuando se conoce. La respuesta informa de un idioma, no de todos los idiomas de una grabación que alterna entre varios. Conserva la redacción de la fuente y los metadatos de idioma disponibles junto al resultado, en vez de tratar la petición de transcripción como una operación de traducción.\n\nPara un flujo de subtítulos, agrupa segmentos temporizados consecutivos en entradas legibles en lugar de mostrar una palabra cada vez. Un resultado útil es un archivo SRT o WebVTT vinculado al clip original, con límites de entrada ajustados a las pausas y una cantidad manejable de texto en pantalla. Comprueba si faltan tiempos y asegúrate de que el fin de cada entrada sea posterior a su inicio. La agrupación de subtítulos y el formato del archivo son pasos de la aplicación construidos a partir de la alineación devuelta, y sus opciones de visualización deben ajustarse al reproductor y al público.\n\nLos controles documentados de Transcribe 1 son el audio, una indicación del idioma y la elección de marcas de tiempo. Los marcadores de hablante, los turnos estructurados por hablante, los controles de eventos emocionales y las indicaciones de número de hablantes de Pro son funciones independientes; no forman parte del contrato de respuesta documentado de este modelo base. Elige el resultado necesario antes de procesar: texto legible simple para una nota, o texto junto con alineación para navegación durante la reproducción y subtítulos. Conservar el identificador del clip, la transcripción y cualquier temporización disponible hace útil ese resultado para la siguiente etapa de la aplicación.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "audio"
      ],
      "manufacturer_output": [
        "transcription"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ],
        "summary": "Consulta los precios completos de la configuración en los detalles."
      }
    ],
    "ctx": null,
    "formats": [
      "transcriptions"
    ],
    "id": "fish-audio/transcribe-1",
    "input": [
      "audio"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "El cuerpo JSON o el ID canónico explícito del modelo no es válido.",
                "http_status": 400,
                "recovery": "Conserva la respuesta y corrige el campo indicado de la solicitud.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La clave API de Ailoot no es válida.",
                "http_status": 401,
                "recovery": "Usa tu clave API autorizada de Ailoot.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "El grupo de la clave no tiene acceso a este método.",
                "http_status": 403,
                "recovery": "Conserva los detalles del error devueltos.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "El método seleccionado no tiene ninguna ruta admitida.",
                "http_status": 404,
                "recovery": "Conserva los detalles del error devueltos.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "La tarifa aceptada no puede obtener la cantidad de entrada o el límite que necesita.",
                "http_status": 422,
                "recovery": "Conserva la respuesta; utiliza la representación de entrada exigida por la tarifa aceptada.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "El almacenamiento, la ruta, el precio del método o la reserva necesarios no están disponibles.",
                "http_status": 503,
                "recovery": "Conserva la respuesta original completa. Una reserva incierta no autoriza un reenvío.",
                "type": null
              },
              {
                "code": null,
                "condition": "Es necesario comprobar el resultado original, el uso o la liquidación.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Conserva el ID real de solicitud y la respuesta original. Consulta el registro existente bajo tu titularidad; no vuelvas a enviar la solicitud de creación.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "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 content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conserva el X-Client-Request-ID real y la respuesta completa. Consulta los recursos originales bajo tu titularidad y sus URL firmadas exactas de contenido; no vuelvas a enviar nunca una creación incierta."
            },
            "outputs": {
              "all_results": "Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Cuerpo original completo de la respuesta, estado y cabeceras reenviadas. Este manejador no añade una estructura JSON universal, un campo de texto ni un contenedor de tarea."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "El ejemplo lee tu archivo PCM WAV real y no vacío, codifica todos los bytes del archivo en base64 y envía input_audio.format con el valor wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "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 content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id exacto de un registro existente de medios bajo tu titularidad",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Transcripción",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "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_second": 0.0002
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/transcribe-1",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: Transcribe 1",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Transcribe 1 convierte grabaciones de audio cortas en texto con detección automática del idioma y marcas de tiempo opcionales por palabra. Utiliza la transcripción para notas de voz, clips que puedan buscarse o preparación de subtítulos, manteniendo los segmentos temporizados separados del texto completo legible."
  },
  "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": "Transcribe 1 convierte grabaciones de audio cortas en texto con detección automática del idioma y marcas de tiempo opcionales por palabra. Utiliza la transcripción para notas de voz, clips que puedan buscarse o preparación de subtítulos, manteniendo los segmentos temporizados separados del texto completo legible.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "0ba8330c89656488e8281688d38397ffd9d7bebb32089fdd4d21561c78ff4ab5",
    "renderer_sha256": "b6d488b4bdee68568e5b17d2d4871b2ba1885e1032091b635a7a58ad2ca224e7"
  },
  "sourceRevision": "dca2a7cc2d531562c1accd924f8969659e4bb9128186378c352696618bcf1b59"
}
