{
  "aboutHtml": "<p>Transcribe 1 — универсальная модель Fish Audio для распознавания речи в коротких записях. Она принимает аудиофайл и возвращает распознанные слова в виде текста, продолжительность записи, необязательные сегменты с временными метками и сведения о языке, когда он известен. Модель полезна для короткой голосовой заметки, устной инструкции, фрагмента записи или аудиоклипа, который нужно представить в читаемом текстовом виде.</p><p>В примере работы с голосовой заметкой запись сохраняют вместе с полной расшифровкой и идентификатором исходного клипа. На следующем шаге приложение может искать по этому тексту, упорядочить заметку или подготовить краткое изложение, сохранив речевой источник. Для команды расшифровка передаёт приложению распознанные слова; любое действие требует отдельной интерпретации и выполнения. Для отрывка интервью фиксируйте положение клипа в полной аудиозаписи, чтобы цитату можно было проверить в нужном месте.</p><p>Производитель принимает WAV, MP3, AAC, включая M4A/MP4, FLAC и Ogg с Opus или Vorbis. Записи браузера в WebM для этой модели следует преобразовать в Ogg/Opus, MP3 или WAV; у Pro документирована встроенная поддержка дополнительных контейнеров. Передавайте один аудиофайл на запрос. Документированный лимит запроса базовой модели — до 50 MiB, причём файлы MP3 и Opus должны быть меньше 25 MiB. Размер файла и длительность записи — разные характеристики: сжатый файл может укладываться в лимит загрузки, но обрабатываться слишком долго.</p><p>Transcribe 1 предназначена для коротких записей. Для аудио длиннее нескольких минут производитель рекомендует Pro; длинный запрос к базовой модели может завершиться ошибкой при превышении лимита времени обработки. Если длинный источник разбивается на короткие клипы для расшифровки, сохраняйте начальное смещение каждого клипа и перед объединением результатов проверяйте, что расшифровка покрывает его целиком. Прибавляйте исходное смещение к локальным временным меткам сегментов, чтобы навигация оставалась связана с полной записью. Рекомендации для базовой модели не следует трактовать как отдельный 60-минутный лимит Pro.</p><p>Ответ производителя включает текст, длительность и сегменты. Длительность выражается в секундах, а полный читаемый текст следует сохранять как основную словесную версию клипа. Временные метки необязательны: в API производителя ignore_timestamps по умолчанию равен true, а false запрашивает сегменты на уровне слов с текстом, временем начала и окончания в секундах. Запрос временного выравнивания увеличивает время обработки. Пустой массив segments может означать, что временная разметка пропущена, речи нет или выравнивание временно недоступно; поэтому его нельзя автоматически считать признаком пустой полной расшифровки.</p><p>Сегментами обычно служат слова, а для китайского и японского — один или несколько символов. Их текст не содержит пунктуации и может нормализовать значение иначе, чем полный текст; это не посимвольная копия читаемого ответа. Время начала и окончания сегмента может совпадать. Используйте сегменты для поиска позиции в записи или подготовки показа по времени, а полный текст — когда важны формулировки и пунктуация. Сохраняйте эти два представления раздельно в итоговом материале.</p><p>Язык определяется автоматически независимо от наличия необязательной языковой подсказки. Для подсказок производитель документирует коды ISO 639-1 в нижнем регистре; в ответе возвращается код языка для логики приложения и, когда известно, название языка для отображения. Ответ сообщает один язык, а не все языки записи с переключением между ними. Сохраняйте исходные формулировки и доступные языковые метаданные вместе с результатом, не рассматривая запрос распознавания как перевод.</p><p>Для субтитров объединяйте последовательные сегменты с временными метками в читаемые реплики, а не показывайте по одному слову. Полезный результат — файл SRT или WebVTT, связанный с исходным клипом, с границами реплик по паузам и посильным объёмом текста на экране. Проверяйте отсутствие пропусков временных меток и то, что конец каждой реплики следует за её началом. Объединение в субтитры и форматирование файла — шаги приложения на основе полученного выравнивания; оформление должно подходить проигрывателю и аудитории.</p><p>Документированные настройки Transcribe 1 — аудио, языковая подсказка и выбор временных меток. Метки говорящих, структурированные реплики говорящих, настройки эмоциональных событий и подсказки количества говорящих у Pro — отдельные возможности; они не входят в документированный контракт ответа базовой модели. До обработки определите нужный результат: обычный читаемый текст для заметки либо текст с временной разметкой для навигации при воспроизведении и субтитров. Сохранение идентификатора клипа, расшифровки и доступных временных меток делает результат полезным на следующем этапе работы приложения.</p>",
  "aboutText": "Transcribe 1 — универсальная модель Fish Audio для распознавания речи в коротких записях. Она принимает аудиофайл и возвращает распознанные слова в виде текста, продолжительность записи, необязательные сегменты с временными метками и сведения о языке, когда он известен. Модель полезна для короткой голосовой заметки, устной инструкции, фрагмента записи или аудиоклипа, который нужно представить в читаемом текстовом виде.\n\nВ примере работы с голосовой заметкой запись сохраняют вместе с полной расшифровкой и идентификатором исходного клипа. На следующем шаге приложение может искать по этому тексту, упорядочить заметку или подготовить краткое изложение, сохранив речевой источник. Для команды расшифровка передаёт приложению распознанные слова; любое действие требует отдельной интерпретации и выполнения. Для отрывка интервью фиксируйте положение клипа в полной аудиозаписи, чтобы цитату можно было проверить в нужном месте.\n\nПроизводитель принимает WAV, MP3, AAC, включая M4A/MP4, FLAC и Ogg с Opus или Vorbis. Записи браузера в WebM для этой модели следует преобразовать в Ogg/Opus, MP3 или WAV; у Pro документирована встроенная поддержка дополнительных контейнеров. Передавайте один аудиофайл на запрос. Документированный лимит запроса базовой модели — до 50 MiB, причём файлы MP3 и Opus должны быть меньше 25 MiB. Размер файла и длительность записи — разные характеристики: сжатый файл может укладываться в лимит загрузки, но обрабатываться слишком долго.\n\nTranscribe 1 предназначена для коротких записей. Для аудио длиннее нескольких минут производитель рекомендует Pro; длинный запрос к базовой модели может завершиться ошибкой при превышении лимита времени обработки. Если длинный источник разбивается на короткие клипы для расшифровки, сохраняйте начальное смещение каждого клипа и перед объединением результатов проверяйте, что расшифровка покрывает его целиком. Прибавляйте исходное смещение к локальным временным меткам сегментов, чтобы навигация оставалась связана с полной записью. Рекомендации для базовой модели не следует трактовать как отдельный 60-минутный лимит Pro.\n\nОтвет производителя включает текст, длительность и сегменты. Длительность выражается в секундах, а полный читаемый текст следует сохранять как основную словесную версию клипа. Временные метки необязательны: в API производителя ignore_timestamps по умолчанию равен true, а false запрашивает сегменты на уровне слов с текстом, временем начала и окончания в секундах. Запрос временного выравнивания увеличивает время обработки. Пустой массив segments может означать, что временная разметка пропущена, речи нет или выравнивание временно недоступно; поэтому его нельзя автоматически считать признаком пустой полной расшифровки.\n\nСегментами обычно служат слова, а для китайского и японского — один или несколько символов. Их текст не содержит пунктуации и может нормализовать значение иначе, чем полный текст; это не посимвольная копия читаемого ответа. Время начала и окончания сегмента может совпадать. Используйте сегменты для поиска позиции в записи или подготовки показа по времени, а полный текст — когда важны формулировки и пунктуация. Сохраняйте эти два представления раздельно в итоговом материале.\n\nЯзык определяется автоматически независимо от наличия необязательной языковой подсказки. Для подсказок производитель документирует коды ISO 639-1 в нижнем регистре; в ответе возвращается код языка для логики приложения и, когда известно, название языка для отображения. Ответ сообщает один язык, а не все языки записи с переключением между ними. Сохраняйте исходные формулировки и доступные языковые метаданные вместе с результатом, не рассматривая запрос распознавания как перевод.\n\nДля субтитров объединяйте последовательные сегменты с временными метками в читаемые реплики, а не показывайте по одному слову. Полезный результат — файл SRT или WebVTT, связанный с исходным клипом, с границами реплик по паузам и посильным объёмом текста на экране. Проверяйте отсутствие пропусков временных меток и то, что конец каждой реплики следует за её началом. Объединение в субтитры и форматирование файла — шаги приложения на основе полученного выравнивания; оформление должно подходить проигрывателю и аудитории.\n\nДокументированные настройки Transcribe 1 — аудио, языковая подсказка и выбор временных меток. Метки говорящих, структурированные реплики говорящих, настройки эмоциональных событий и подсказки количества говорящих у Pro — отдельные возможности; они не входят в документированный контракт ответа базовой модели. До обработки определите нужный результат: обычный читаемый текст для заметки либо текст с временной разметкой для навигации при воспроизведении и субтитров. Сохранение идентификатора клипа, расшифровки и доступных временных меток делает результат полезным на следующем этапе работы приложения.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "2a6d4696a99687c95eba9a54ede49abc0c40742f1af0c6e77355c2b2c08709a3",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ru",
  "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=\"Закрыть\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/transcribe-1</code><button type=\"button\" id=\"copy-id\">Скопировать ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Разделы карточки модели\"><button type=\"button\" data-card-jump=\"overview\">Начало</button><button type=\"button\" data-card-jump=\"methods\">Входные данные и методы</button><button type=\"button\" data-card-jump=\"pricing\">Тарифы</button><button type=\"button\" data-card-jump=\"examples\">Примеры</button><button type=\"button\" data-card-jump=\"results\">Результаты</button><button type=\"button\" data-card-jump=\"aliases\">Псевдонимы</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Методы 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\">Распознавание</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\">Начало</h3><p class=\"mdesc-full\">Transcribe 1 преобразует короткие аудиозаписи в текст с автоматическим определением языка и необязательными временными метками слов. Используйте расшифровку для голосовых заметок, поиска по клипам или подготовки субтитров, сохраняя сегменты с временными метками отдельно от полного читаемого текста.</p><dl class=\"card-io\" data-card-io><div><dt>Допустимые входные данные</dt><dd>Аудио</dd></div><div><dt>Результаты</dt><dd>Текст</dd></div></dl><details class=\"card-about\"><summary>О модели</summary><p class=\"note-s\" data-model-method-boundary>Описание раскрывает возможности модели. Доступные в Ailoot входные данные, результаты и параметры выбранного метода перечислены ниже.</p><div class=\"mabout\" id=\"m-about\"><p>Transcribe 1 — универсальная модель Fish Audio для распознавания речи в коротких записях. Она принимает аудиофайл и возвращает распознанные слова в виде текста, продолжительность записи, необязательные сегменты с временными метками и сведения о языке, когда он известен. Модель полезна для короткой голосовой заметки, устной инструкции, фрагмента записи или аудиоклипа, который нужно представить в читаемом текстовом виде.</p><p>В примере работы с голосовой заметкой запись сохраняют вместе с полной расшифровкой и идентификатором исходного клипа. На следующем шаге приложение может искать по этому тексту, упорядочить заметку или подготовить краткое изложение, сохранив речевой источник. Для команды расшифровка передаёт приложению распознанные слова; любое действие требует отдельной интерпретации и выполнения. Для отрывка интервью фиксируйте положение клипа в полной аудиозаписи, чтобы цитату можно было проверить в нужном месте.</p><p>Производитель принимает WAV, MP3, AAC, включая M4A/MP4, FLAC и Ogg с Opus или Vorbis. Записи браузера в WebM для этой модели следует преобразовать в Ogg/Opus, MP3 или WAV; у Pro документирована встроенная поддержка дополнительных контейнеров. Передавайте один аудиофайл на запрос. Документированный лимит запроса базовой модели — до 50 MiB, причём файлы MP3 и Opus должны быть меньше 25 MiB. Размер файла и длительность записи — разные характеристики: сжатый файл может укладываться в лимит загрузки, но обрабатываться слишком долго.</p><p>Transcribe 1 предназначена для коротких записей. Для аудио длиннее нескольких минут производитель рекомендует Pro; длинный запрос к базовой модели может завершиться ошибкой при превышении лимита времени обработки. Если длинный источник разбивается на короткие клипы для расшифровки, сохраняйте начальное смещение каждого клипа и перед объединением результатов проверяйте, что расшифровка покрывает его целиком. Прибавляйте исходное смещение к локальным временным меткам сегментов, чтобы навигация оставалась связана с полной записью. Рекомендации для базовой модели не следует трактовать как отдельный 60-минутный лимит Pro.</p><p>Ответ производителя включает текст, длительность и сегменты. Длительность выражается в секундах, а полный читаемый текст следует сохранять как основную словесную версию клипа. Временные метки необязательны: в API производителя ignore_timestamps по умолчанию равен true, а false запрашивает сегменты на уровне слов с текстом, временем начала и окончания в секундах. Запрос временного выравнивания увеличивает время обработки. Пустой массив segments может означать, что временная разметка пропущена, речи нет или выравнивание временно недоступно; поэтому его нельзя автоматически считать признаком пустой полной расшифровки.</p><p>Сегментами обычно служат слова, а для китайского и японского — один или несколько символов. Их текст не содержит пунктуации и может нормализовать значение иначе, чем полный текст; это не посимвольная копия читаемого ответа. Время начала и окончания сегмента может совпадать. Используйте сегменты для поиска позиции в записи или подготовки показа по времени, а полный текст — когда важны формулировки и пунктуация. Сохраняйте эти два представления раздельно в итоговом материале.</p><p>Язык определяется автоматически независимо от наличия необязательной языковой подсказки. Для подсказок производитель документирует коды ISO 639-1 в нижнем регистре; в ответе возвращается код языка для логики приложения и, когда известно, название языка для отображения. Ответ сообщает один язык, а не все языки записи с переключением между ними. Сохраняйте исходные формулировки и доступные языковые метаданные вместе с результатом, не рассматривая запрос распознавания как перевод.</p><p>Для субтитров объединяйте последовательные сегменты с временными метками в читаемые реплики, а не показывайте по одному слову. Полезный результат — файл SRT или WebVTT, связанный с исходным клипом, с границами реплик по паузам и посильным объёмом текста на экране. Проверяйте отсутствие пропусков временных меток и то, что конец каждой реплики следует за её началом. Объединение в субтитры и форматирование файла — шаги приложения на основе полученного выравнивания; оформление должно подходить проигрывателю и аудитории.</p><p>Документированные настройки Transcribe 1 — аудио, языковая подсказка и выбор временных меток. Метки говорящих, структурированные реплики говорящих, настройки эмоциональных событий и подсказки количества говорящих у Pro — отдельные возможности; они не входят в документированный контракт ответа базовой модели. До обработки определите нужный результат: обычный читаемый текст для заметки либо текст с временной разметкой для навигации при воспроизведении и субтитров. Сохранение идентификатора клипа, расшифровки и доступных временных меток делает результат полезным на следующем этапе работы приложения.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Доступно в Ailoot · входные данные и методы</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Распознавание речи</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Входные данные</dt><dd><code>audio</code></dd></div><div><dt>Результат</dt><dd><code>text</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Поле</th><th>Тип</th><th>Требование</th><th>Значения и ограничения</th><th>По умолчанию</th></tr></thead><tbody><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>string</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Обязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span><div>fish-audio/transcribe-1</div></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">input_audio</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span><code>object</code></td><td data-cell-label=\"Требование\"><span class=\"card-cell-label\">Требование</span>Обязательно</td><td data-cell-label=\"Значения и ограничения\"><span class=\"card-cell-label\">Значения и ограничения</span></td><td data-cell-label=\"По умолчанию\" data-default=\"unspecified\"><span class=\"card-cell-label\">По умолчанию</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Параметры и жизненный цикл метода</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Параметр</th><th>Контракт</th></tr></thead><tbody><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>content_type</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>application/json</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>required</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>model, input_audio</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>material_types</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>audio</td></tr><tr><th data-cell-label=\"Параметр\" scope=\"row\"><span class=\"card-cell-label\">Параметр</span><code>material_conditions</code></th><td data-cell-label=\"Контракт\"><span class=\"card-cell-label\">Контракт</span>Пример читает ваш реальный непустой файл PCM WAV, кодирует все байты файла в base64 и передаёт wav в input_audio.format.</td></tr></tbody></table></div><p>Жизненный цикл: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · точный task_id из существующей записи медиаресурса, принадлежащего Ailoot</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\">Тарифы</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Тарифная справка не добавляет режимы запроса. Поддерживаемые параметры указаны для выбранного метода.</p><dl data-price-conditions><dt>Быстрый режим</dt><dd>Не указано <span class=\"note-s\">При выборе быстрого режима</span></dd><dt>Режим flex</dt><dd>Не указано <span class=\"note-s\">При выборе режима flex</span></dd><dt>Максимальная интенсивность рассуждений</dt><dd>Не указано <span class=\"note-s\">При максимальной интенсивности рассуждений с корректировкой по умолчанию (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ставки Ailoot</h4><h4>Цены по конфигурациям</h4><p class=\"note-s\">Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Конфигурация</th><th>Шкала ставок</th><th>Расчётная единица</th><th>Плата</th></tr></thead><tbody><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>Базовые тарифы на токены</th><td data-cell-label=\"Шкала ставок\"><span class=\"card-cell-label\">Шкала ставок</span>Базовая ставка</td><td data-cell-label=\"Расчётная единица\"><span class=\"card-cell-label\">Расчётная единица</span>—</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Вход · Входные токены</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Выход · Выходные токены</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Вход · Чтение кэша</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Вход · Запись в кэш</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div><div><span>Вход · Запись в кэш, 1 час</span> <b>—</b> <span class=\"price-unit\">/ 1K токенов</span></div></td></tr><tr><th data-cell-label=\"Конфигурация\" scope=\"row\"><span class=\"card-cell-label\">Конфигурация</span>секунда входного аудио</th><td data-cell-label=\"Шкала ставок\"><span class=\"card-cell-label\">Шкала ставок</span>—</td><td data-cell-label=\"Расчётная единица\"><span class=\"card-cell-label\">Расчётная единица</span>за секунду входного аудио</td><td data-cell-label=\"Плата\"><span class=\"card-cell-label\">Плата</span><div><span>Вход · секунда входного аудио</span> <b>$0.0002</b> <span class=\"price-unit\">за секунду входного аудио</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. <a href=\"/docs/ru/billing/reserve/\">Как работают резервирование и расчёт →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Примеры запросов</h3><h4>Ailoot Ultra · Распознавание речи</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Варианты кода\"><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 · реальный файл WAV и полный исходный результат</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Скопировать код\"><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\">Получить и сохранить результаты</h3><h4>Ailoot Ultra · Распознавание речи</h4><p class=\"note-s\">Полное исходное тело ответа, статус и переданные заголовки. Этот обработчик не добавляет универсальную структуру JSON, текстовое поле или оболочку задачи.</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>Сохраняйте все готовые результаты</h5><p class=\"note-s\">Сохраняйте каждый полностью полученный ответ, файл и элемент содержимого.</p><p class=\"note-s\">Сохраняйте полный ответ и заголовки, все фактические результаты, исходные возвращённые идентификаторы и все поля использования. Восстанавливайте исходную операцию без повторной отправки запроса создания.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Если нужно проверить исходный ответ</h5><p class=\"note-s\">Сохраните фактический X-Client-Request-ID и полный ответ. Читайте исходные ресурсы, принадлежащие Ailoot, по их точным подписанным URL содержимого; никогда не повторяйте создание с неопределённым исходом.</p></div><details class=\"card-about\" data-output-fields><summary>Поля ответа</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Поле</th><th>Тип</th></tr></thead><tbody><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">text (when present)</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span></td></tr><tr><th data-cell-label=\"Поле\" scope=\"row\"><span class=\"card-cell-label\">Поле</span><code class=\"card-field-name\">usage (when present)</code></th><td data-cell-label=\"Тип\" data-field-type><span class=\"card-cell-label\">Тип</span></td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Ошибки и дальнейшие шаги</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Ответ</th><th>Условие</th><th>Следующий шаг</th></tr></thead><tbody><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Тело JSON или явно указанный канонический ID модели недопустимы.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Сохраните ответ и исправьте указанное поле запроса.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Недействительный ключ Ailoot API.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Используйте ваш авторизованный ключ Ailoot API.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>403 · <code>permission_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Группа ключа не допускает этот метод.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Сохраните возвращённые подробности ошибки.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>У выбранного метода нет допущенного маршрута.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Сохраните возвращённые подробности ошибки.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Для принятого тарифа невозможно определить требуемое количество входных данных или его границу.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Сохраните ответ; используйте представление входных данных, требуемое принятым тарифом.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>503 · <code></code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Требуемое хранилище, маршрут, цена метода или резервирование недоступны.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Сохраните полный исходный ответ. Неопределённость резервирования не разрешает повторную отправку.</td></tr><tr><th data-cell-label=\"Ответ\" scope=\"row\"><span class=\"card-cell-label\">Ответ</span>502 · <code>server_error</code></th><td data-cell-label=\"Условие\"><span class=\"card-cell-label\">Условие</span>Исходный результат, использование или окончательный расчёт требуют проверки.</td><td data-cell-label=\"Следующий шаг\"><span class=\"card-cell-label\">Следующий шаг</span>Сохраните фактический ID запроса и исходный ответ. Читайте существующую запись ресурса, принадлежащего Ailoot; не повторяйте создание.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Псевдонимы</h3><h4>Псевдонимы моделей</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>Псевдонимы путей метода</h4><p class=\"note-s\">Используйте пути методов, указанные выше.</p><h4>Связанные ID для вызова</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": "Тело JSON или явно указанный канонический ID модели недопустимы.",
                "http_status": 400,
                "recovery": "Сохраните ответ и исправьте указанное поле запроса.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Недействительный ключ Ailoot API.",
                "http_status": 401,
                "recovery": "Используйте ваш авторизованный ключ Ailoot API.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Группа ключа не допускает этот метод.",
                "http_status": 403,
                "recovery": "Сохраните возвращённые подробности ошибки.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "У выбранного метода нет допущенного маршрута.",
                "http_status": 404,
                "recovery": "Сохраните возвращённые подробности ошибки.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Для принятого тарифа невозможно определить требуемое количество входных данных или его границу.",
                "http_status": 422,
                "recovery": "Сохраните ответ; используйте представление входных данных, требуемое принятым тарифом.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Требуемое хранилище, маршрут, цена метода или резервирование недоступны.",
                "http_status": 503,
                "recovery": "Сохраните полный исходный ответ. Неопределённость резервирования не разрешает повторную отправку.",
                "type": null
              },
              {
                "code": null,
                "condition": "Исходный результат, использование или окончательный расчёт требуют проверки.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Сохраните фактический ID запроса и исходный ответ. Читайте существующую запись ресурса, принадлежащего Ailoot; не повторяйте создание.",
                "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": "Сохраните фактический X-Client-Request-ID и полный ответ. Читайте исходные ресурсы, принадлежащие Ailoot, по их точным подписанным URL содержимого; никогда не повторяйте создание с неопределённым исходом."
            },
            "outputs": {
              "all_results": "Сохраняйте полный ответ и заголовки, все фактические результаты, исходные возвращённые идентификаторы и все поля использования. Восстанавливайте исходную операцию без повторной отправки запроса создания.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Полное исходное тело ответа, статус и переданные заголовки. Этот обработчик не добавляет универсальную структуру JSON, текстовое поле или оболочку задачи."
            },
            "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": [
              "Пример читает ваш реальный непустой файл PCM WAV, кодирует все байты файла в base64 и передаёт wav в input_audio.format."
            ],
            "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 из существующей записи медиаресурса, принадлежащего Ailoot",
                "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": "Распознавание речи",
        "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": "e15ea983db06f2841f0dfbdb10c28d41ff73d46c941208e99776dcf02e20bb44",
    "input_html_sha256": "a0c07ed3580c9e2e2b404f3000b0d8a0a835a5a232d9b02762d495d8fb72783b",
    "private_audit_sha256": "9c1e0068310e85b85359db32920578d683726381d53341e489ccae4d5f0d5bbd",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ru/fish-audio-transcribe-1/",
    "description": "Transcribe 1 преобразует короткие аудиозаписи в текст с автоматическим определением языка и необязательными временными метками слов. Используйте расшифровку для голосовых заметок, поиска по клипам или подготовки субтитров, сохраняя сегменты с временными метками отдельно от полного читаемого текста.",
    "locale": "ru",
    "md_url": "https://ailoot.ai/models/ru/fish-audio-transcribe-1/index.md",
    "title": "Fish Audio: Transcribe 1 — Ailoot",
    "url": "https://ailoot.ai/models/ru/fish-audio-transcribe-1/"
  },
  "rawModel": {
    "about": "Transcribe 1 — универсальная модель Fish Audio для распознавания речи в коротких записях. Она принимает аудиофайл и возвращает распознанные слова в виде текста, продолжительность записи, необязательные сегменты с временными метками и сведения о языке, когда он известен. Модель полезна для короткой голосовой заметки, устной инструкции, фрагмента записи или аудиоклипа, который нужно представить в читаемом текстовом виде.\n\nВ примере работы с голосовой заметкой запись сохраняют вместе с полной расшифровкой и идентификатором исходного клипа. На следующем шаге приложение может искать по этому тексту, упорядочить заметку или подготовить краткое изложение, сохранив речевой источник. Для команды расшифровка передаёт приложению распознанные слова; любое действие требует отдельной интерпретации и выполнения. Для отрывка интервью фиксируйте положение клипа в полной аудиозаписи, чтобы цитату можно было проверить в нужном месте.\n\nПроизводитель принимает WAV, MP3, AAC, включая M4A/MP4, FLAC и Ogg с Opus или Vorbis. Записи браузера в WebM для этой модели следует преобразовать в Ogg/Opus, MP3 или WAV; у Pro документирована встроенная поддержка дополнительных контейнеров. Передавайте один аудиофайл на запрос. Документированный лимит запроса базовой модели — до 50 MiB, причём файлы MP3 и Opus должны быть меньше 25 MiB. Размер файла и длительность записи — разные характеристики: сжатый файл может укладываться в лимит загрузки, но обрабатываться слишком долго.\n\nTranscribe 1 предназначена для коротких записей. Для аудио длиннее нескольких минут производитель рекомендует Pro; длинный запрос к базовой модели может завершиться ошибкой при превышении лимита времени обработки. Если длинный источник разбивается на короткие клипы для расшифровки, сохраняйте начальное смещение каждого клипа и перед объединением результатов проверяйте, что расшифровка покрывает его целиком. Прибавляйте исходное смещение к локальным временным меткам сегментов, чтобы навигация оставалась связана с полной записью. Рекомендации для базовой модели не следует трактовать как отдельный 60-минутный лимит Pro.\n\nОтвет производителя включает текст, длительность и сегменты. Длительность выражается в секундах, а полный читаемый текст следует сохранять как основную словесную версию клипа. Временные метки необязательны: в API производителя ignore_timestamps по умолчанию равен true, а false запрашивает сегменты на уровне слов с текстом, временем начала и окончания в секундах. Запрос временного выравнивания увеличивает время обработки. Пустой массив segments может означать, что временная разметка пропущена, речи нет или выравнивание временно недоступно; поэтому его нельзя автоматически считать признаком пустой полной расшифровки.\n\nСегментами обычно служат слова, а для китайского и японского — один или несколько символов. Их текст не содержит пунктуации и может нормализовать значение иначе, чем полный текст; это не посимвольная копия читаемого ответа. Время начала и окончания сегмента может совпадать. Используйте сегменты для поиска позиции в записи или подготовки показа по времени, а полный текст — когда важны формулировки и пунктуация. Сохраняйте эти два представления раздельно в итоговом материале.\n\nЯзык определяется автоматически независимо от наличия необязательной языковой подсказки. Для подсказок производитель документирует коды ISO 639-1 в нижнем регистре; в ответе возвращается код языка для логики приложения и, когда известно, название языка для отображения. Ответ сообщает один язык, а не все языки записи с переключением между ними. Сохраняйте исходные формулировки и доступные языковые метаданные вместе с результатом, не рассматривая запрос распознавания как перевод.\n\nДля субтитров объединяйте последовательные сегменты с временными метками в читаемые реплики, а не показывайте по одному слову. Полезный результат — файл SRT или WebVTT, связанный с исходным клипом, с границами реплик по паузам и посильным объёмом текста на экране. Проверяйте отсутствие пропусков временных меток и то, что конец каждой реплики следует за её началом. Объединение в субтитры и форматирование файла — шаги приложения на основе полученного выравнивания; оформление должно подходить проигрывателю и аудитории.\n\nДокументированные настройки Transcribe 1 — аудио, языковая подсказка и выбор временных меток. Метки говорящих, структурированные реплики говорящих, настройки эмоциональных событий и подсказки количества говорящих у Pro — отдельные возможности; они не входят в документированный контракт ответа базовой модели. До обработки определите нужный результат: обычный читаемый текст для заметки либо текст с временной разметкой для навигации при воспроизведении и субтитров. Сохранение идентификатора клипа, расшифровки и доступных временных меток делает результат полезным на следующем этапе работы приложения.",
    "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": "Полная информация о ценах конфигурации — в подробностях."
      }
    ],
    "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": "Тело JSON или явно указанный канонический ID модели недопустимы.",
                "http_status": 400,
                "recovery": "Сохраните ответ и исправьте указанное поле запроса.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Недействительный ключ Ailoot API.",
                "http_status": 401,
                "recovery": "Используйте ваш авторизованный ключ Ailoot API.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Группа ключа не допускает этот метод.",
                "http_status": 403,
                "recovery": "Сохраните возвращённые подробности ошибки.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "У выбранного метода нет допущенного маршрута.",
                "http_status": 404,
                "recovery": "Сохраните возвращённые подробности ошибки.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Для принятого тарифа невозможно определить требуемое количество входных данных или его границу.",
                "http_status": 422,
                "recovery": "Сохраните ответ; используйте представление входных данных, требуемое принятым тарифом.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Требуемое хранилище, маршрут, цена метода или резервирование недоступны.",
                "http_status": 503,
                "recovery": "Сохраните полный исходный ответ. Неопределённость резервирования не разрешает повторную отправку.",
                "type": null
              },
              {
                "code": null,
                "condition": "Исходный результат, использование или окончательный расчёт требуют проверки.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Сохраните фактический ID запроса и исходный ответ. Читайте существующую запись ресурса, принадлежащего Ailoot; не повторяйте создание.",
                "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": "Сохраните фактический X-Client-Request-ID и полный ответ. Читайте исходные ресурсы, принадлежащие Ailoot, по их точным подписанным URL содержимого; никогда не повторяйте создание с неопределённым исходом."
            },
            "outputs": {
              "all_results": "Сохраняйте полный ответ и заголовки, все фактические результаты, исходные возвращённые идентификаторы и все поля использования. Восстанавливайте исходную операцию без повторной отправки запроса создания.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Полное исходное тело ответа, статус и переданные заголовки. Этот обработчик не добавляет универсальную структуру JSON, текстовое поле или оболочку задачи."
            },
            "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": [
              "Пример читает ваш реальный непустой файл PCM WAV, кодирует все байты файла в base64 и передаёт wav в input_audio.format."
            ],
            "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 из существующей записи медиаресурса, принадлежащего Ailoot",
                "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": "Распознавание речи",
        "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 преобразует короткие аудиозаписи в текст с автоматическим определением языка и необязательными временными метками слов. Используйте расшифровку для голосовых заметок, поиска по клипам или подготовки субтитров, сохраняя сегменты с временными метками отдельно от полного читаемого текста."
  },
  "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 преобразует короткие аудиозаписи в текст с автоматическим определением языка и необязательными временными метками слов. Используйте расшифровку для голосовых заметок, поиска по клипам или подготовки субтитров, сохраняя сегменты с временными метками отдельно от полного читаемого текста.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "1395307f5b5fa4551c7a615de703d1d1937ce66e2f9522dcabade644444a0a69",
    "renderer_sha256": "aa692ffec412026bdeaf316df24a58e6c5083045e5246f6033f898d132afa5ff"
  },
  "sourceRevision": "6a09ad1e8dad3b436795e226e115380ecca25de1521b69ca6540bd1553396705"
}
