{
  "aboutHtml": "<p>Universal-3.5 Pro — модель распознавания речи AssemblyAI для преобразования записанной речи в текст. В её профиле Sync короткий аудиоклип даёт завершённую расшифровку в одном ответе. Это подходит голосовым сообщениям, вводу push-to-talk и отдельным репликам диалога, когда приложение уже знает, в какой момент должна закончиться запись.</p><p>Подготовьте аудио как ограниченный фрагмент. Требования AssemblyAI Sync принимают длительность от 80 миллисекунд до 120 секунд с максимальным размером файла 40 MB. Поддерживаемые форматы — WAV или 16-битный PCM без контейнера, со знаковыми отсчётами и порядком байтов little-endian. Аудио может быть моно или стерео; стерео внутри преобразуется в моно. Поддерживаемые частоты дискретизации — 8, 16, 22.05, 24, 32, 44.1 и 48 kHz. Заголовок WAV передаёт частоту дискретизации и число каналов; для PCM без контейнера эти значения нужно передать отдельно в конфигурации расшифровки.</p><p>Запишите полное высказывание и сохраните начало и конец речи целыми. Полезный пример задачи — короткое голосовое сообщение в поддержку продукта с названием продукта, идентификатором заказа и просьбой. Сохраните исходный клип, чтобы сверить расшифровку с этими важными деталями. Для более длинной записи подготовьте процесс, подходящий длительной расшифровке, а не считайте предел длительности короткого клипа заявлением об общей аудиоёмкости модели.</p><p>Результат содержит полную расшифровку, список слов с оценкой уверенности распознавания каждого слова и общую оценку уверенности от нуля до единицы. Он также передаёт длительность отправленного аудио и идентификатор запроса, позволяя сохранять связь текста с исходным клипом. Используйте оценки уверенности распознавания слов для поиска фрагментов, которые стоит проверить прослушиванием, особенно имён, чисел и отраслевой лексики, важных для приложения.</p><p>Временные метки слов необязательны и по умолчанию отключены. При их запросе каждое выровненное слово может содержать начало и конец в миллисекундах относительно начала клипа. Профиль производителя оставляет эти значения отсутствующими, когда слово не удаётся выровнять, вместо выдумывания приблизительного времени. Точность временных меток наилучшая для английской речи. Явно отмечайте отсутствие временных меток при подготовке подсветки слов, волновой формы с поиском или синхронизации субтитров и сравнивайте текст с записью перед использованием как готовой дорожки субтитров.</p><p>Контекстный запрос описывает, о чём запись. Он может назвать область, сценарий или конкретные детали, уже известные приложению; его максимальная длина — 6000 символов. Начните с короткого описания, соответствующего аудио, например разговора с технической поддержкой о конкретном устройстве. Запрос даёт контекст распознавания, а не просит переписать сообщение говорящего в другой документ.</p><p>Отдельный список ключевых терминов направляет распознавание к конкретной лексике. Профиль Sync принимает до 100 терминов и 8000 символов суммарно в этом списке. Используйте точное написание необычных имён, сокращений или терминов продукта и не добавляйте обычные хорошо распознаваемые слова. Большие или ненужные списки терминов могут вызывать излишние исправления, поэтому сосредоточьтесь на словах, важных для записи. Описание контекста и словарный список можно использовать вместе.</p><p>Предыдущий разговор также помогает интерпретировать короткий ответ. Передайте предыдущие высказывания в хронологическом порядке, от старых к новым, при этом расшифровывается текущая аудиореплика. Документированный лимит контекста — 500 ходов или 16 000 символов суммарно. При превышении этих пределов или доступного контекста модели сначала удаляются самые старые записи. Это полезно, когда короткий ответ содержит идентификатор или отсылку, значение которых следует из предыдущего вопроса.</p><p>Выбор языка направляет распознавание к одному или нескольким ожидаемым языкам. Текущий интерфейс Sync принимает 32 кода языка и по умолчанию использует английский, когда выбор не передан. Для аудио с переключением языков перечислите ожидаемые языки. Собственный контекстный запрос заменяет управляемый запрос по умолчанию и переопределяет отдельное управление кодами языков, поэтому назовите ожидаемые языки внутри этого запроса, когда нужны и язык, и контекст сценария. Сохраняйте расшифровку на реально произнесённых языках, не воспринимая расшифровку как инструкцию перевода.</p><p>Модель также используется в других процессах расшифровки AssemblyAI, тогда как требования коротких клипов и поля результата профиля Sync принадлежат этому конкретному интерфейсу. Процесс Dictation производителя добавляет отдельный этап очистки текста; расшифровка и переписанное сообщение — разные артефакты. Сохраняйте распознанную речь, если последующая правка или краткое изложение создаёт очищенную версию, чтобы исходная формулировка оставалась доступной для сравнения.</p><p>Полезные результаты включают расшифрованное голосовое сообщение, завершённую реплику для ассистента, короткий текст аудио с поиском или список слов с временными метками для интерфейса проверки. Сверьте ключевые слова с записью, зафиксируйте все случаи отсутствия временной привязки и связь клипа с возвращённым текстом. Результат распознавания даёт следующему шагу приложения расшифровку с опорой на источник; ответ на просьбу или редактирование сообщения относится к окружающему процессу.</p>",
  "aboutText": "Universal-3.5 Pro — модель распознавания речи AssemblyAI для преобразования записанной речи в текст. В её профиле Sync короткий аудиоклип даёт завершённую расшифровку в одном ответе. Это подходит голосовым сообщениям, вводу push-to-talk и отдельным репликам диалога, когда приложение уже знает, в какой момент должна закончиться запись.\n\nПодготовьте аудио как ограниченный фрагмент. Требования AssemblyAI Sync принимают длительность от 80 миллисекунд до 120 секунд с максимальным размером файла 40 MB. Поддерживаемые форматы — WAV или 16-битный PCM без контейнера, со знаковыми отсчётами и порядком байтов little-endian. Аудио может быть моно или стерео; стерео внутри преобразуется в моно. Поддерживаемые частоты дискретизации — 8, 16, 22.05, 24, 32, 44.1 и 48 kHz. Заголовок WAV передаёт частоту дискретизации и число каналов; для PCM без контейнера эти значения нужно передать отдельно в конфигурации расшифровки.\n\nЗапишите полное высказывание и сохраните начало и конец речи целыми. Полезный пример задачи — короткое голосовое сообщение в поддержку продукта с названием продукта, идентификатором заказа и просьбой. Сохраните исходный клип, чтобы сверить расшифровку с этими важными деталями. Для более длинной записи подготовьте процесс, подходящий длительной расшифровке, а не считайте предел длительности короткого клипа заявлением об общей аудиоёмкости модели.\n\nРезультат содержит полную расшифровку, список слов с оценкой уверенности распознавания каждого слова и общую оценку уверенности от нуля до единицы. Он также передаёт длительность отправленного аудио и идентификатор запроса, позволяя сохранять связь текста с исходным клипом. Используйте оценки уверенности распознавания слов для поиска фрагментов, которые стоит проверить прослушиванием, особенно имён, чисел и отраслевой лексики, важных для приложения.\n\nВременные метки слов необязательны и по умолчанию отключены. При их запросе каждое выровненное слово может содержать начало и конец в миллисекундах относительно начала клипа. Профиль производителя оставляет эти значения отсутствующими, когда слово не удаётся выровнять, вместо выдумывания приблизительного времени. Точность временных меток наилучшая для английской речи. Явно отмечайте отсутствие временных меток при подготовке подсветки слов, волновой формы с поиском или синхронизации субтитров и сравнивайте текст с записью перед использованием как готовой дорожки субтитров.\n\nКонтекстный запрос описывает, о чём запись. Он может назвать область, сценарий или конкретные детали, уже известные приложению; его максимальная длина — 6000 символов. Начните с короткого описания, соответствующего аудио, например разговора с технической поддержкой о конкретном устройстве. Запрос даёт контекст распознавания, а не просит переписать сообщение говорящего в другой документ.\n\nОтдельный список ключевых терминов направляет распознавание к конкретной лексике. Профиль Sync принимает до 100 терминов и 8000 символов суммарно в этом списке. Используйте точное написание необычных имён, сокращений или терминов продукта и не добавляйте обычные хорошо распознаваемые слова. Большие или ненужные списки терминов могут вызывать излишние исправления, поэтому сосредоточьтесь на словах, важных для записи. Описание контекста и словарный список можно использовать вместе.\n\nПредыдущий разговор также помогает интерпретировать короткий ответ. Передайте предыдущие высказывания в хронологическом порядке, от старых к новым, при этом расшифровывается текущая аудиореплика. Документированный лимит контекста — 500 ходов или 16 000 символов суммарно. При превышении этих пределов или доступного контекста модели сначала удаляются самые старые записи. Это полезно, когда короткий ответ содержит идентификатор или отсылку, значение которых следует из предыдущего вопроса.\n\nВыбор языка направляет распознавание к одному или нескольким ожидаемым языкам. Текущий интерфейс Sync принимает 32 кода языка и по умолчанию использует английский, когда выбор не передан. Для аудио с переключением языков перечислите ожидаемые языки. Собственный контекстный запрос заменяет управляемый запрос по умолчанию и переопределяет отдельное управление кодами языков, поэтому назовите ожидаемые языки внутри этого запроса, когда нужны и язык, и контекст сценария. Сохраняйте расшифровку на реально произнесённых языках, не воспринимая расшифровку как инструкцию перевода.\n\nМодель также используется в других процессах расшифровки AssemblyAI, тогда как требования коротких клипов и поля результата профиля Sync принадлежат этому конкретному интерфейсу. Процесс Dictation производителя добавляет отдельный этап очистки текста; расшифровка и переписанное сообщение — разные артефакты. Сохраняйте распознанную речь, если последующая правка или краткое изложение создаёт очищенную версию, чтобы исходная формулировка оставалась доступной для сравнения.\n\nПолезные результаты включают расшифрованное голосовое сообщение, завершённую реплику для ассистента, короткий текст аудио с поиском или список слов с временными метками для интерфейса проверки. Сверьте ключевые слова с записью, зафиксируйте все случаи отсутствия временной привязки и связь клипа с возвращённым текстом. Результат распознавания даёт следующему шагу приложения расшифровку с опорой на источник; ответ на просьбу или редактирование сообщения относится к окружающему процессу.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "785978afaabb321f19b9344e77d8bf00ca85b2d1dd46204e126809d969b45867",
    "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\">AssemblyAI: Universal-3.5 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Закрыть\">×</button></div><div class=\"idline\"><span>AssemblyAI /</span><code>assemblyai/universal-3-5-pro</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|assemblyai%2Funiversal-3-5-pro\">Распознавание</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\">Universal-3.5 Pro — модель AssemblyAI для преобразования речи в текст, которая превращает короткий аудиоклип в готовую расшифровку одним ответом. Профиль Sync предоставляет оценки уверенности распознавания слов, необязательные временные метки слов, словарные подсказки и контекст предыдущего разговора для голосового ввода и процессов push-to-talk.</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>Universal-3.5 Pro — модель распознавания речи AssemblyAI для преобразования записанной речи в текст. В её профиле Sync короткий аудиоклип даёт завершённую расшифровку в одном ответе. Это подходит голосовым сообщениям, вводу push-to-talk и отдельным репликам диалога, когда приложение уже знает, в какой момент должна закончиться запись.</p><p>Подготовьте аудио как ограниченный фрагмент. Требования AssemblyAI Sync принимают длительность от 80 миллисекунд до 120 секунд с максимальным размером файла 40 MB. Поддерживаемые форматы — WAV или 16-битный PCM без контейнера, со знаковыми отсчётами и порядком байтов little-endian. Аудио может быть моно или стерео; стерео внутри преобразуется в моно. Поддерживаемые частоты дискретизации — 8, 16, 22.05, 24, 32, 44.1 и 48 kHz. Заголовок WAV передаёт частоту дискретизации и число каналов; для PCM без контейнера эти значения нужно передать отдельно в конфигурации расшифровки.</p><p>Запишите полное высказывание и сохраните начало и конец речи целыми. Полезный пример задачи — короткое голосовое сообщение в поддержку продукта с названием продукта, идентификатором заказа и просьбой. Сохраните исходный клип, чтобы сверить расшифровку с этими важными деталями. Для более длинной записи подготовьте процесс, подходящий длительной расшифровке, а не считайте предел длительности короткого клипа заявлением об общей аудиоёмкости модели.</p><p>Результат содержит полную расшифровку, список слов с оценкой уверенности распознавания каждого слова и общую оценку уверенности от нуля до единицы. Он также передаёт длительность отправленного аудио и идентификатор запроса, позволяя сохранять связь текста с исходным клипом. Используйте оценки уверенности распознавания слов для поиска фрагментов, которые стоит проверить прослушиванием, особенно имён, чисел и отраслевой лексики, важных для приложения.</p><p>Временные метки слов необязательны и по умолчанию отключены. При их запросе каждое выровненное слово может содержать начало и конец в миллисекундах относительно начала клипа. Профиль производителя оставляет эти значения отсутствующими, когда слово не удаётся выровнять, вместо выдумывания приблизительного времени. Точность временных меток наилучшая для английской речи. Явно отмечайте отсутствие временных меток при подготовке подсветки слов, волновой формы с поиском или синхронизации субтитров и сравнивайте текст с записью перед использованием как готовой дорожки субтитров.</p><p>Контекстный запрос описывает, о чём запись. Он может назвать область, сценарий или конкретные детали, уже известные приложению; его максимальная длина — 6000 символов. Начните с короткого описания, соответствующего аудио, например разговора с технической поддержкой о конкретном устройстве. Запрос даёт контекст распознавания, а не просит переписать сообщение говорящего в другой документ.</p><p>Отдельный список ключевых терминов направляет распознавание к конкретной лексике. Профиль Sync принимает до 100 терминов и 8000 символов суммарно в этом списке. Используйте точное написание необычных имён, сокращений или терминов продукта и не добавляйте обычные хорошо распознаваемые слова. Большие или ненужные списки терминов могут вызывать излишние исправления, поэтому сосредоточьтесь на словах, важных для записи. Описание контекста и словарный список можно использовать вместе.</p><p>Предыдущий разговор также помогает интерпретировать короткий ответ. Передайте предыдущие высказывания в хронологическом порядке, от старых к новым, при этом расшифровывается текущая аудиореплика. Документированный лимит контекста — 500 ходов или 16 000 символов суммарно. При превышении этих пределов или доступного контекста модели сначала удаляются самые старые записи. Это полезно, когда короткий ответ содержит идентификатор или отсылку, значение которых следует из предыдущего вопроса.</p><p>Выбор языка направляет распознавание к одному или нескольким ожидаемым языкам. Текущий интерфейс Sync принимает 32 кода языка и по умолчанию использует английский, когда выбор не передан. Для аудио с переключением языков перечислите ожидаемые языки. Собственный контекстный запрос заменяет управляемый запрос по умолчанию и переопределяет отдельное управление кодами языков, поэтому назовите ожидаемые языки внутри этого запроса, когда нужны и язык, и контекст сценария. Сохраняйте расшифровку на реально произнесённых языках, не воспринимая расшифровку как инструкцию перевода.</p><p>Модель также используется в других процессах расшифровки AssemblyAI, тогда как требования коротких клипов и поля результата профиля Sync принадлежат этому конкретному интерфейсу. Процесс Dictation производителя добавляет отдельный этап очистки текста; расшифровка и переписанное сообщение — разные артефакты. Сохраняйте распознанную речь, если последующая правка или краткое изложение создаёт очищенную версию, чтобы исходная формулировка оставалась доступной для сравнения.</p><p>Полезные результаты включают расшифрованное голосовое сообщение, завершённую реплику для ассистента, короткий текст аудио с поиском или список слов с временными метками для интерфейса проверки. Сверьте ключевые слова с записью, зафиксируйте все случаи отсутствия временной привязки и связь клипа с возвращённым текстом. Результат распознавания даёт следующему шагу приложения расшифровку с опорой на источник; ответ на просьбу или редактирование сообщения относится к окружающему процессу.</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>assemblyai/universal-3-5-pro</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.00025</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-1073-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1073-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-1073-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1073-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;assemblyai/universal-3-5-pro&#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=assemblyai%2Funiversal-3-5-pro&amp;route=Ultra&amp;caller=assemblyai%2Funiversal-3-5-pro&amp;fmt=transcriptions\"><code>assemblyai/universal-3-5-pro</code></a></span></p><h4>Псевдонимы путей метода</h4><p class=\"note-s\">Используйте пути методов, указанные выше.</p><h4>Связанные ID для вызова</h4><p class=\"note-s\"><a href=\"#m=assemblyai%2Funiversal-3-5-pro&amp;route=Ultra&amp;caller=assemblyai%2Funiversal-3-5-pro&amp;fmt=transcriptions\"><code>assemblyai/universal-3-5-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "assemblyai/universal-3-5-pro",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "assemblyai/universal-3-5-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|assemblyai%2Funiversal-3-5-pro",
      "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": [
                  "assemblyai/universal-3-5-pro"
                ],
                "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": [
                    "assemblyai/universal-3-5-pro"
                  ],
                  "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": "assemblyai/universal-3-5-pro"
              },
              "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.00025",
                "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.00025",
                "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': 'assemblyai/universal-3-5-pro', '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.00025
          }
        },
        "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.00025",
                "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.00025",
                "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": "assemblyai/universal-3-5-pro",
        "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.00025",
            "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.00025",
            "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": "assemblyai/universal-3-5-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "77e10a02f6e4c788adb474d5b0ba7c21f8b937dbea6ffb5586af041edbc1eba9",
    "input_html_sha256": "ef6ee17f2e4a3b6968f3953fce44e01d62c4643b83a9b566dbc44444ea458769",
    "private_audit_sha256": "bdf24975c62bf1ed2c9335a7e9e3a61ea127b13e1a9c46b7f36fcc3d2685ecc3",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ru/assemblyai-universal-3-5-pro/",
    "description": "Universal-3.5 Pro — модель AssemblyAI для преобразования речи в текст, которая превращает короткий аудиоклип в готовую расшифровку одним ответом. Профиль Sync предоставляет оценки уверенности распознавания слов, необязательные временные метки слов, словарные подсказки и контекст предыдущего разговора для голосового ввода и процессов push-to-talk.",
    "locale": "ru",
    "md_url": "https://ailoot.ai/models/ru/assemblyai-universal-3-5-pro/index.md",
    "title": "AssemblyAI: Universal-3.5 Pro — Ailoot",
    "url": "https://ailoot.ai/models/ru/assemblyai-universal-3-5-pro/"
  },
  "rawModel": {
    "about": "Universal-3.5 Pro — модель распознавания речи AssemblyAI для преобразования записанной речи в текст. В её профиле Sync короткий аудиоклип даёт завершённую расшифровку в одном ответе. Это подходит голосовым сообщениям, вводу push-to-talk и отдельным репликам диалога, когда приложение уже знает, в какой момент должна закончиться запись.\n\nПодготовьте аудио как ограниченный фрагмент. Требования AssemblyAI Sync принимают длительность от 80 миллисекунд до 120 секунд с максимальным размером файла 40 MB. Поддерживаемые форматы — WAV или 16-битный PCM без контейнера, со знаковыми отсчётами и порядком байтов little-endian. Аудио может быть моно или стерео; стерео внутри преобразуется в моно. Поддерживаемые частоты дискретизации — 8, 16, 22.05, 24, 32, 44.1 и 48 kHz. Заголовок WAV передаёт частоту дискретизации и число каналов; для PCM без контейнера эти значения нужно передать отдельно в конфигурации расшифровки.\n\nЗапишите полное высказывание и сохраните начало и конец речи целыми. Полезный пример задачи — короткое голосовое сообщение в поддержку продукта с названием продукта, идентификатором заказа и просьбой. Сохраните исходный клип, чтобы сверить расшифровку с этими важными деталями. Для более длинной записи подготовьте процесс, подходящий длительной расшифровке, а не считайте предел длительности короткого клипа заявлением об общей аудиоёмкости модели.\n\nРезультат содержит полную расшифровку, список слов с оценкой уверенности распознавания каждого слова и общую оценку уверенности от нуля до единицы. Он также передаёт длительность отправленного аудио и идентификатор запроса, позволяя сохранять связь текста с исходным клипом. Используйте оценки уверенности распознавания слов для поиска фрагментов, которые стоит проверить прослушиванием, особенно имён, чисел и отраслевой лексики, важных для приложения.\n\nВременные метки слов необязательны и по умолчанию отключены. При их запросе каждое выровненное слово может содержать начало и конец в миллисекундах относительно начала клипа. Профиль производителя оставляет эти значения отсутствующими, когда слово не удаётся выровнять, вместо выдумывания приблизительного времени. Точность временных меток наилучшая для английской речи. Явно отмечайте отсутствие временных меток при подготовке подсветки слов, волновой формы с поиском или синхронизации субтитров и сравнивайте текст с записью перед использованием как готовой дорожки субтитров.\n\nКонтекстный запрос описывает, о чём запись. Он может назвать область, сценарий или конкретные детали, уже известные приложению; его максимальная длина — 6000 символов. Начните с короткого описания, соответствующего аудио, например разговора с технической поддержкой о конкретном устройстве. Запрос даёт контекст распознавания, а не просит переписать сообщение говорящего в другой документ.\n\nОтдельный список ключевых терминов направляет распознавание к конкретной лексике. Профиль Sync принимает до 100 терминов и 8000 символов суммарно в этом списке. Используйте точное написание необычных имён, сокращений или терминов продукта и не добавляйте обычные хорошо распознаваемые слова. Большие или ненужные списки терминов могут вызывать излишние исправления, поэтому сосредоточьтесь на словах, важных для записи. Описание контекста и словарный список можно использовать вместе.\n\nПредыдущий разговор также помогает интерпретировать короткий ответ. Передайте предыдущие высказывания в хронологическом порядке, от старых к новым, при этом расшифровывается текущая аудиореплика. Документированный лимит контекста — 500 ходов или 16 000 символов суммарно. При превышении этих пределов или доступного контекста модели сначала удаляются самые старые записи. Это полезно, когда короткий ответ содержит идентификатор или отсылку, значение которых следует из предыдущего вопроса.\n\nВыбор языка направляет распознавание к одному или нескольким ожидаемым языкам. Текущий интерфейс Sync принимает 32 кода языка и по умолчанию использует английский, когда выбор не передан. Для аудио с переключением языков перечислите ожидаемые языки. Собственный контекстный запрос заменяет управляемый запрос по умолчанию и переопределяет отдельное управление кодами языков, поэтому назовите ожидаемые языки внутри этого запроса, когда нужны и язык, и контекст сценария. Сохраняйте расшифровку на реально произнесённых языках, не воспринимая расшифровку как инструкцию перевода.\n\nМодель также используется в других процессах расшифровки AssemblyAI, тогда как требования коротких клипов и поля результата профиля Sync принадлежат этому конкретному интерфейсу. Процесс Dictation производителя добавляет отдельный этап очистки текста; расшифровка и переписанное сообщение — разные артефакты. Сохраняйте распознанную речь, если последующая правка или краткое изложение создаёт очищенную версию, чтобы исходная формулировка оставалась доступной для сравнения.\n\nПолезные результаты включают расшифрованное голосовое сообщение, завершённую реплику для ассистента, короткий текст аудио с поиском или список слов с временными метками для интерфейса проверки. Сверьте ключевые слова с записью, зафиксируйте все случаи отсутствия временной привязки и связь клипа с возвращённым текстом. Результат распознавания даёт следующему шагу приложения расшифровку с опорой на источник; ответ на просьбу или редактирование сообщения относится к окружающему процессу.",
    "alias_of": null,
    "aliases": [],
    "author": "AssemblyAI",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "audio"
      ],
      "manufacturer_output": [
        "transcription"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00025",
            "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.00025",
            "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": "assemblyai/universal-3-5-pro",
    "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": [
                  "assemblyai/universal-3-5-pro"
                ],
                "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": [
                    "assemblyai/universal-3-5-pro"
                  ],
                  "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": "assemblyai/universal-3-5-pro"
              },
              "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.00025",
                "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.00025",
                "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': 'assemblyai/universal-3-5-pro', '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.00025
          }
        },
        "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.00025",
                "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.00025",
                "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": "assemblyai/universal-3-5-pro",
        "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.00025",
            "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.00025",
            "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": "assemblyai/universal-3-5-pro",
        "request_model_id": "assemblyai/universal-3-5-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "AssemblyAI: Universal-3.5 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Universal-3.5 Pro — модель AssemblyAI для преобразования речи в текст, которая превращает короткий аудиоклип в готовую расшифровку одним ответом. Профиль Sync предоставляет оценки уверенности распознавания слов, необязательные временные метки слов, словарные подсказки и контекст предыдущего разговора для голосового ввода и процессов push-to-talk."
  },
  "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": "Universal-3.5 Pro — модель AssemblyAI для преобразования речи в текст, которая превращает короткий аудиоклип в готовую расшифровку одним ответом. Профиль Sync предоставляет оценки уверенности распознавания слов, необязательные временные метки слов, словарные подсказки и контекст предыдущего разговора для голосового ввода и процессов push-to-talk.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "e0a27b3f90e2708c416b9b08619f27de8233afaf82995fde09d7404bd046909d",
    "renderer_sha256": "aa692ffec412026bdeaf316df24a58e6c5083045e5246f6033f898d132afa5ff"
  },
  "sourceRevision": "b8c8ccafee8ed60223e9eeda3c576d717fb133102651d9ab6310fae3e8e1b470"
}
