Для AI-агентов: markdown этой страницы — /docs-content/ai/audio.md индекс документации — /llms.txt
Распознавание речи
Преобразование аудио в текст через BitrixGPT 5.6 Transcribe на инфраструктуре Битрикс24 — без подключения BYOK. Расшифровка учитывается в AI-квоте портала по длительности аудио: в рамках квоты тарифа деньги с баланса не списываются, сверх квоты расход списывается с денежного баланса портала по базовой цене модели.
Whisper Large v3 Turbo выводится с платформы. С 16.11.2026 запросы с bitrix/deepdml/faster-whisper-large-v3-turbo-ct2 и без поля model обслуживает BitrixGPT 5.6 Transcribe. Старый ID продолжает приниматься; ID по умолчанию остаётся прежним. Для новых интеграций явно указывайте model=bitrix/bitrixgpt-5.6-transcribe.
Для двух сторон разговора используйте model=bitrix/bitrixgpt-6.0-diarization (BitrixGPT 6.0 Diarization) с response_format=verbose_json: segments[].speaker содержит номер стороны. Тарификация — как у Transcribe: по длительности аудио.
Скоуп: vibe:ai
Расшифровать аудио
POST /v1/audio/transcriptions
Преобразует аудиофайл в текст через BitrixGPT 5.6 Transcribe или BitrixGPT 6.0 Diarization (см. «Модели» ниже) — без подключения BYOK. Расшифровка учитывается в AI-квоте портала по длительности аудио: в рамках квоты тарифа деньги с баланса не списываются, сверх квоты расход списывается с денежного баланса портала по базовой цене модели. Принимает файл через multipart/form-data. Формат запроса и ответа совместим с POST /v1/audio/transcriptions из OpenAI API.
Ответ приходит в сыром OpenAI-формате.
Обёртки
{success, data}, которая используется в остальных эндпоинтах Вайбкод —/v1/deals,/v1/tasksи других, — здесь нет.Так сделано для совместимости с OpenAI SDK. Если у вас единый клиент с проверкой
if (!response.success), добавьте для AI Router исключение.
Модели
Whisper Large v3 Turbo выводится с платформы. С 16.11.2026 запросы с bitrix/deepdml/faster-whisper-large-v3-turbo-ct2 и без поля model обслуживает BitrixGPT 5.6 Transcribe. Старый ID продолжает приниматься; ID по умолчанию остаётся прежним. Для новых интеграций явно указывайте model=bitrix/bitrixgpt-5.6-transcribe.
При обслуживании запроса заменой ответ несёт X-Model-Fallback: bitrix/deepdml/faster-whisper-large-v3-turbo-ct2, X-Model-Replacement: bitrix/bitrixgpt-5.6-transcribe и X-Model-Fallback-Reason: model_disabled. Применяются языки, обработка параметров и тарификация замены. См. жизненный цикл моделей.
Заголовки X-Model-Fallback, X-Model-Replacement и X-Model-Fallback-Reason не входят в CORS-список, поэтому в браузерном fetch недоступны — читайте их на сервере или в инструментах разработчика.
bitrix/deepdml/faster-whisper-large-v3-turbo-ct2 |
bitrix/bitrixgpt-5.6-transcribe |
bitrix/bitrixgpt-6.0-diarization |
|
|---|---|---|---|
| Витрина | bitrix/deepdml/faster-whisper-large-v3-turbo-ct2Whisper Large v3 Turbo (выводится; замена с 16.11.2026) | bitrix/bitrixgpt-5.6-transcribeBitrixGPT 5.6 Transcribe | bitrix/bitrixgpt-6.0-diarizationBitrixGPT 6.0 Diarization |
| Языки | bitrix/deepdml/faster-whisper-large-v3-turbo-ct2около 99 | bitrix/bitrixgpt-5.6-transcribe25 европейских: bg, hr, cs, da, nl, en, et, fi, fr, de, el, hu, it, lv, lt, mt, pl, pt, ro, sk, sl, es, sv, ru, uk | bitrix/bitrixgpt-6.0-diarization25 европейских, как у Transcribe |
| Влияют на распознавание | bitrix/deepdml/faster-whisper-large-v3-turbo-ct2language, prompt, hotwords, temperature, vad_filter |
bitrix/bitrixgpt-5.6-transcribeни одно из этих полей — они принимаются и валидируются, но модель их не читает. Их имена возвращаются в заголовке ответа X-Ignored-Params |
bitrix/bitrixgpt-6.0-diarizationкак у Transcribe: принимаются и валидируются, но не влияют; имена в X-Ignored-Params |
timestamp_granularities[] |
bitrix/deepdml/faster-whisper-large-v3-turbo-ct2word, segment |
bitrix/bitrixgpt-5.6-transcribeword; segment отбрасывается без ошибки |
bitrix/bitrixgpt-6.0-diarizationword принимается, но пословных таймкодов пока нет: words приходит null; segment отбрасывается без ошибки |
Форматы text, srt, vtt |
bitrix/deepdml/faster-whisper-large-v3-turbo-ct2отдаёт модель; тарифицируются за вызов | bitrix/bitrixgpt-5.6-transcribeстроит платформа из verbose_json; все форматы тарифицируются по длительности аудио |
bitrix/bitrixgpt-6.0-diarizationстроит платформа из verbose_json; тарифицируются по длительности аудио |
| Разделение говорящих | bitrix/deepdml/faster-whisper-large-v3-turbo-ct2нет | bitrix/bitrixgpt-5.6-transcribeнет | bitrix/bitrixgpt-6.0-diarizationдве стороны разговора; метки в verbose_json |
Заголовок X-Ignored-Params — информационный: тело ответа и коды ошибок не меняются. Он не входит в CORS-список, поэтому в браузерном fetch недоступен — читайте его на сервере или в инструментах разработчика.
Поля запроса (form-data)
| Поле | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
Полеfile |
Типfile | Обяз.да | По умолч.— | ОписаниеАудиофайл. Часть multipart обязана называться именно file. Отсутствующий параметр filename и пустое значение filename="" принимаются и заменяются именем audio без расширения — одинаково для Content-Type: audio/mpeg и Content-Type: application/octet-stream. Расширение в имени НЕ проверяется: контейнер определяет распознавание по содержимому, поэтому имя без расширения и редкие форматы диктофонов принимаются наравне с mp3, mpeg, mpga, mp4, m4a, wav, ogg, oga, flac, webm, opus, aac, amr, 3gp, 3gpp, wma — эти перечислены потому, что для них мы отдаём распознаванию подсказку о формате, когда её нет в самом запросе. Содержимое, которое заведомо не аудио — например, текст, PDF-документ, картинка или архив, — отклоняется с 400 invalid_audio до распознавания, какими бы ни были имя файла и Content-Type. Файл с аудиоформатом, который распознавание всё же не прочитало, возвращается как 400 ai_provider_rejected, если сервис ответил статусом 400 или 422, и как 502 ai_provider_unavailable, если сервис ответил внутренней ошибкой. Максимальный размер — 25 МБ |
Полеmodel |
Типstring | Обяз.нет | По умолч.deepdml/faster-whisper-large-v3-turbo-ct2 |
ОписаниеДля новых интеграций указывайте bitrix/bitrixgpt-5.6-transcribe, а для меток говорящих в verbose_json — bitrix/bitrixgpt-6.0-diarization. Префикс bitrix/ опционален. ID по умолчанию не меняется; с 16.11.2026 его запросы, как и запросы с явным ID Whisper, обслуживает Transcribe. Неизвестный ID или модель, выключенная в каталоге, возвращает 404 ai_model_not_found. Модель в статусе DISABLED с доступной заменой обслуживается заменой, а без доступной замены возвращает 503 model_unavailable (тип service_unavailable). Обе ошибки возвращаются до распознавания, без списания |
Полеlanguage |
Типstring | Обяз.нет | По умолч.автоопределение | ОписаниеКод языка по ISO 639 (2-3 буквы): ru, en, de, fr, zh и т. п. Whisper учитывает указанный язык; Transcribe определяет язык сам. Для Transcribe: принимается и проверяется, на распознавание не влияет; имя возвращается в X-Ignored-Params. |
Полеprompt |
Типstring | Обяз.нет | По умолч.— | ОписаниеКонтекстная подсказка: тема разговора, стиль, правильное написание терминов. До 2000 символов, Whisper учитывает последние ~224 токена. Для Transcribe: принимается и проверяется, на распознавание не влияет; имя возвращается в X-Ignored-Params. |
Полеhotwords |
Типstring | Обяз.нет | По умолч.— | ОписаниеСпец-слова и термины через запятую — у Whisper повышают точность распознавания редких названий и брендов. До 500 символов. Для Transcribe: принимается и проверяется, на распознавание не влияет; имя возвращается в X-Ignored-Params. |
Полеtemperature |
Типnumber | Обяз.нет | По умолч.0 |
ОписаниеТемпература декодера Whisper от 0 до 1. 0 — детерминированный результат, выше — больше вариативности. Значения вне диапазона отклоняются. Для Transcribe: принимается и проверяется, на распознавание не влияет; имя возвращается в X-Ignored-Params. |
Полеvad_filter |
Типboolean | Обяз.нет | По умолч.— | Описаниеtrue включает VAD-фильтр: Whisper вырезает тишину перед распознаванием — меньше галлюцинаций на записях с паузами. Для Transcribe: принимается и проверяется, на распознавание не влияет; имя возвращается в X-Ignored-Params. |
Полеtimestamp_granularities[] |
Типstring | Обяз.нет | По умолч.segment |
ОписаниеДетализация меток времени: word или segment (поле можно повторять). Только с response_format=verbose_json. С word каждый сегмент дополняется массивом words с временными границами и вероятностью каждого слова. У Transcribe segment отбрасывается без ошибки; word работает. |
Полеresponse_format |
Типstring | Обяз.нет | По умолч.json |
ОписаниеФормат результата: json, text, srt, vtt, verbose_json |
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/audio/transcriptions \
-H "X-Api-Key: YOUR_API_KEY" \
-F "file=@call-recording.mp3" \
-F "model=bitrix/bitrixgpt-5.6-transcribe" \
-F "response_format=json"
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/audio/transcriptions \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-F "file=@call-recording.mp3" \
-F "model=bitrix/bitrixgpt-5.6-transcribe" \
-F "response_format=json"
JavaScript — личный ключ
const formData = new FormData()
formData.append('file', audioFile) // объект File или Blob
formData.append('model', 'bitrix/bitrixgpt-5.6-transcribe')
formData.append('response_format', 'json')
const res = await fetch('https://vibecode.bitrix24.tech/v1/audio/transcriptions', {
method: 'POST',
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
body: formData,
})
const result = await res.json()
console.log('Распознанный текст:', result.text)
JavaScript — OAuth-приложение
const formData = new FormData()
formData.append('file', audioFile)
formData.append('model', 'bitrix/bitrixgpt-5.6-transcribe')
const res = await fetch('https://vibecode.bitrix24.tech/v1/audio/transcriptions', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
body: formData,
})
const result = await res.json()
console.log('Текст:', result.text)
Поля ответа
Структура ответа зависит от response_format. Формат json (по умолчанию) — самый компактный, verbose_json — с временными границами.
`response_format: json`
| Поле | Тип | Описание |
|---|---|---|
Полеtext |
Типstring | ОписаниеРаспознанный текст целиком |
`response_format: text`
Ответ — обычная строка с распознанным текстом, без JSON-обёртки.
`response_format: verbose_json`
| Поле | Тип | Описание |
|---|---|---|
Полеtask |
Типstring | ОписаниеТип задачи: transcribe |
Полеlanguage |
Типstring | ОписаниеКод определённого или указанного языка |
Полеduration |
Типnumber | ОписаниеДлительность аудио в секундах |
Полеtext |
Типstring | ОписаниеРаспознанный текст целиком |
Полеusage |
Типobject | null | ОписаниеМетаданные использования модели. null, если модель их не возвращает |
Полеwords |
Типarray | ОписаниеПословные временные границы на уровне всего ответа. Пустой массив, если пословные границы не запрошены |
Полеsegments |
Типarray | ОписаниеСегменты с временными границами и метаданными распознавания |
Полеsegments[].id |
Типnumber | ОписаниеПорядковый номер сегмента |
Полеsegments[].seek |
Типnumber | ОписаниеВнутренний сдвиг окна распознавания Whisper |
Полеsegments[].start |
Типnumber | ОписаниеНачало сегмента в секундах |
Полеsegments[].end |
Типnumber | ОписаниеКонец сегмента в секундах |
Полеsegments[].text |
Типstring | ОписаниеТекст сегмента |
Полеsegments[].speaker |
Типstring | null | ОписаниеСторона разговора у Diarization: "1" или "2". Может отсутствовать или быть null, если не определена |
Полеsegments[].source_id |
Типstring | ОписаниеИдентификатор источника у Diarization: L/R для стерео или M:1/M:2 для моно. Может отсутствовать; для подписей используйте speaker |
Полеsegments[].tokens |
Типarray | ОписаниеТокены модели для текста сегмента (целые числа) |
Полеsegments[].temperature |
Типnumber | ОписаниеТемпература декодирования, применённая моделью |
Полеsegments[].avg_logprob |
Типnumber | ОписаниеСредняя логарифмическая вероятность токенов сегмента — метрика уверенности |
Полеsegments[].compression_ratio |
Типnumber | ОписаниеКоэффициент сжатия текста сегмента |
Полеsegments[].no_speech_prob |
Типnumber | ОписаниеВероятность того, что в сегменте нет речи |
Полеsegments[].words |
Типarray | ОписаниеПословные временные границы внутри сегмента. Пустой массив, если не запрошены |
Полеsegments[].emotion |
Типstring | null | ОписаниеОпределённая эмоция сегмента. null, если не определена |
`response_format: srt` / `vtt`
Ответ — субтитры в формате SubRip Text или WebVTT.
Пример ответа
response_format: json:
{
"text": "Здравствуйте, ООО Вектор. Хотим CRM на 50 пользователей, бюджет до 500 тысяч в месяц."
}
response_format: verbose_json:
{
"task": "transcribe",
"language": "ru",
"duration": 8.42,
"text": "Здравствуйте, ООО Вектор. Хотим CRM на 50 пользователей, бюджет до 500 тысяч в месяц.",
"usage": null,
"words": [],
"segments": [
{
"id": 0,
"seek": 0,
"start": 0.0,
"end": 3.2,
"text": "Здравствуйте, ООО Вектор.",
"tokens": [50365, 2425, 11, 341, 307],
"temperature": 0.0,
"avg_logprob": -0.38,
"compression_ratio": 1.12,
"no_speech_prob": 0.02,
"words": [],
"emotion": null
},
{
"id": 1,
"seek": 320,
"start": 3.2,
"end": 8.42,
"text": "Хотим CRM на 50 пользователей, бюджет до 500 тысяч в месяц.",
"tokens": [50414, 1003, 13767, 295, 1500],
"temperature": 0.0,
"avg_logprob": -0.41,
"compression_ratio": 1.20,
"no_speech_prob": 0.01,
"words": [],
"emotion": null
}
]
}
Пример ответа при ошибке
400 no_file — поле file не передано:
{
"error": {
"message": "Audio file is required. Send as multipart/form-data with field \"file\".",
"type": "invalid_request_error",
"code": "no_file"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | Кодno_file |
ОписаниеПоле file не передано в multipart/form-data, либо файловая часть названа иначе (например audio). Размер такой части на ответ не влияет: имя читается из заголовка части, до содержимого |
| HTTP400 | Кодempty_file |
ОписаниеПоле file передано, но файл пустой (0 байт). Частая причина: curl -F "file=path" без префикса @ — curl отправляет строку пути вместо содержимого файла |
| HTTP400 | Кодinvalid_prompt |
ОписаниеПоле prompt длиннее 2000 символов |
| HTTP400 | Кодinvalid_hotwords |
ОписаниеПоле hotwords длиннее 500 символов |
| HTTP400 | Кодinvalid_temperature |
ОписаниеПоле temperature не число или вне диапазона 0..1 |
| HTTP400 | Кодinvalid_vad_filter |
ОписаниеПоле vad_filter не true и не false |
| HTTP400 | Кодinvalid_timestamp_granularities |
ОписаниеЗначение не word/segment, либо формат ответа не verbose_json |
| HTTP400 | Кодinvalid_language |
ОписаниеКод языка не соответствует формату ISO 639 (2-3 буквы) |
| HTTP400 | Кодinvalid_idempotency_key |
ОписаниеЗаголовок Idempotency-Key не проходит проверку: длина вне 1–255 символов или символ вне набора [A-Za-z0-9_.:-]. Распознавания и списания нет. Поле param ответа — Idempotency-Key |
| HTTP400 | Кодinvalid_audio |
ОписаниеСодержимое поля file заведомо не аудио — например, текст, PDF-документ, картинка или архив. Проверка идёт по содержимому до распознавания, имя файла и Content-Type на неё не влияют, списания нет. Поле param ответа — file. Повторять запрос без замены файла бессмысленно |
| HTTP400 | Кодai_provider_rejected |
ОписаниеСервис распознавания отклонил само содержимое запроса (его ответ — 400 или 422). Поле providerStatusCode несёт исходный статус. Повторять запрос без изменений бессмысленно |
| HTTP402 | Кодai_credentials_not_configured |
ОписаниеНа платформе не настроен Bitrix-провайдер |
| HTTP402 | Кодinsufficient_balance |
ОписаниеPREPAY-счёт ушёл за овердрафт — проверяется ДО вызова распознавания (только PLATFORM/PORTAL-ключи, BYOK бесплатен и не проверяется) |
| HTTP402 | Кодaccount_frozen |
ОписаниеСчёт портала заморожен за долг, и расшифровка выходит за месячную AI-квоту тарифа — расход сверх квоты платит баланс. Расшифровка внутри квоты, ключом подписки Cowork/Code и на собственном ключе провайдера под заморозкой продолжает работать. Пока сужение отказа не дошло до портала, заморозка закрывает расшифровку целиком и отвечает конвертом V1 с кодом ACCOUNT_FROZEN в верхнем регистре — состав отказа |
| HTTP402 | Кодai_quota_exhausted |
ОписаниеМесячная AI-квота портала исчерпана — см. «Известные особенности» ниже |
| HTTP402 | Кодcompany_budget_exhausted |
ОписаниеИсчерпан месячный бюджет расхода компании, который задаёт администратор портала. Поле scope называет пробитый бюджет: USER — личный бюджет вызывающего, PORTAL — бюджет всего портала. Поле canRequest говорит, можно ли запросить увеличение: у личного бюджета true, у портального false — его поднимает только администратор. Отказ приходит только на вызовах, которые списывают средства с баланса портала. Расшифровка внутри тарифной квоты, ключом подписки Cowork/Code и на собственном ключе продолжает работать |
| HTTP403 | Кодscope_missing |
ОписаниеAPI-ключу не хватает скоупа vibe:ai |
| HTTP404 | Кодai_model_not_found |
ОписаниеНеизвестный ID или модель, выключенная в каталоге. Проверка идёт до распознавания, списания нет |
| HTTP409 | Кодidempotency_in_progress |
ОписаниеПервый запрос с этим Idempotency-Key и этим файлом ещё распознаётся. Списания нет. Повторите тем же ключом через число секунд из Retry-After — не больше 10 |
| HTTP422 | Кодidempotency_key_reused |
ОписаниеЭтот Idempotency-Key в течение последних 72 часов уже использован с другим файлом. Распознавания и списания нет — для нового аудио нужен новый ключ. Поле param ответа — Idempotency-Key |
| HTTP503 | Кодmodel_unavailable |
ОписаниеМодель в статусе DISABLED без доступной замены. Тип ошибки — service_unavailable. Проверка идёт до распознавания, списания нет. При доступной замене запрос обслуживает она |
| HTTP413 | Кодrequest_too_large |
ОписаниеПревышен один из лимитов multipart: файл больше 25 МБ, либо в запросе больше 16 текстовых полей или 24 частей, либо одно поле больше 64 КБ |
| HTTP413 | Кодai_payload_too_large |
ОписаниеСервис распознавания отклонил запрос по размеру. Поле providerStatusCode несёт исходный статус 413. Повтор того же запроса получит тот же ответ — разбейте файл на части |
| HTTP502 | Кодai_provider_unavailable |
ОписаниеСервис распознавания вернул ошибку авторизации или внутреннюю ошибку, в том числе на повреждённом аудиофайле с корректным заголовком формата. Исходный статус приходит в поле providerStatusCode, если сервис ответил HTTP-статусом. Отказ по содержимому запроса приходит отдельным кодом ai_provider_rejected |
| HTTP502 | Кодai_provider_network |
ОписаниеПлатформа не смогла соединиться с сервисом распознавания или соединение оборвалось до ответа. Поля providerStatusCode у этого ответа нет: сервис не ответил. Повторите запрос |
| HTTP503 | Кодai_provider_timeout |
ОписаниеСервис распознавания не ответил в течение 15 минут — файл слишком длинный или сервис перегружен. Для записей длиннее ~30 минут разбивайте на части |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP429 | Кодai_provider_cooldown |
ОписаниеКластер распознавания временно недоступен, и платформа держит паузу, чтобы повторы его не добивали. Запрос не выполнялся, списания нет — повторите его через число секунд из Retry-After. Заголовков X-RateLimit-Scope и X-AI-Admission у этого ответа нет |
| HTTP429 | Кодai_congested |
ОписаниеПул AI-кластера перегружен. Запрос не выполнялся, списания нет, повторите его по заголовку Retry-After. Ответ несёт заголовок X-AI-Admission: shed, а не X-RateLimit-Scope |
| HTTP429 | Кодai_pacing_limited |
ОписаниеПревышено суточное или недельное окно равномерного расходования квоты. Это не исчерпание квоты — повторите запрос по заголовку Retry-After. Подробнее — «Равномерное расходование» |
Полный список общих ошибок API — Ошибки.
Идемпотентность
Передайте необязательный заголовок Idempotency-Key, чтобы безопасно повторять расшифровку того же файла. Если ответ на первый запрос потерялся (обрыв сети, таймаут), повтор с тем же ключом и тем же файлом распознаёт аудио заново, но второй раз ничего не списывает: ни AI-квоту портала, ни деньги с баланса, ни квоту подписки Cowork/Code. Ответ такого повтора несёт заголовок Idempotent-Replayed: true.
- Ключ — строка 1–255 символов из набора
[A-Za-z0-9_.:-]. Для записи, которую вы режете на части, подходит форма<id записи>:<id дорожки>:<номер части>, напримерrec-8f2c:mic:12. - Область действия ключа — портал и пользователь, на которого ложится расход, а без пользователя — API-ключ. Новый API-ключ того же пользователя повтор не ломает.
- Повтор бесплатен в течение 72 часов после успешного вызова со списанием. Позже тот же ключ проходит как новый вызов и списывается.
- Бесплатный повтор проходит и при исчерпанной квоте: за этот файл уже заплачено.
- Бесплатных повторов одного файла — не больше трёх. Четвёртый и следующие повторы с тем же ключом обрабатываются и оплачиваются как обычный вызов, со всеми проверками квоты и баланса.
- Если первый вызов завершился ошибкой, ключ освобождается, и повтор проходит как новый вызов со списанием.
- Если первый вызов ничего не списал — например, шёл на собственном ключе провайдера, — повтор тоже проходит как обычный вызов, без заголовка
Idempotent-Replayed. - Платформа не хранит ни текст расшифровки, ни аудио — только отпечатки ключа и файла. Поэтому ответ повтора — это новая расшифровка того же файла.
- Без заголовка
Idempotency-Keyповедение не меняется.
Отказы по ключу — 400 invalid_idempotency_key, 409 idempotency_in_progress и 422 idempotency_key_reused — описаны в разделе «Ошибки».
Известные особенности
BitrixGPT 6.0 Diarization размечает две стороны разговора. Стерео разделяется по каналам, моно — на две стороны. Номера говорящих действуют в пределах одного ответа и обозначают стороны разговора, а не людей или роли. Повтор по Idempotency-Key — новая расшифровка, нумерация в ней может отличаться. Ответ 200 может прийти без меток или с частичной разметкой; успешная расшифровка всё равно тарифицируется. Верхнеуровневый text может содержать таймкоды и подписи говорящих, например [00:00] Спикер 1:; их формат и язык не фиксированы. json и text отдают его как есть, а построенные платформой srt/vtt подписей говорящих не содержат. Для разбора по репликам используйте verbose_json: segments[].speaker, segments[].start, segments[].end и segments[].text — текст реплики без подписей. Пословных таймкодов у модели пока нет: с timestamp_granularities[]=word поле words приходит null. Тарификация — как у Transcribe: по длительности аудио, с учётом AI-квоты портала.
Transcribe определяет язык автоматически. Он поддерживает 25 европейских языков из таблицы выше вместо примерно 99 у Whisper. Разделения говорящих нет. language, prompt, hotwords, temperature и vad_filter проверяются, но на распознавание не влияют; имена переданных полей возвращаются в X-Ignored-Params. Подсказки, влиявшие на Whisper, перестают влиять, когда запрос обслуживает Transcribe. Перед переходом проверьте записи и нужные языки.
В рамках квоты — без списаний, сверх квоты — по базовой цене модели. BitrixGPT 5.6 Transcribe работает на инфраструктуре Битрикс24. Все его форматы, включая построенные платформой text, srt и vtt, тарифицируются по длительности аудио и учитываются в месячной AI-квоте портала. Пока расход укладывается в квоту тарифа, деньги с баланса портала не списываются. Сверх квоты расход списывается с денежного баланса портала по базовой цене модели из каталога. На порталах с включённым контролем квоты запрос может вернуть 402 ai_quota_exhausted, когда месячный лимит исчерпан. Поле reason различает три случая: breaker — сработал часовой предохранитель расходов сверх квоты, wallet_empty — квота исчерпана и на балансе портала нет средств, wallet_off — расход сверх квоты для портала недоступен. Поле resetAt — момент, когда запросы снова начнут проходить, для wallet_off оно может отсутствовать. В ветке wallet_empty ответ может дополнительно нести строку hint с подсказкой и ссылку topupUrl на пополнение баланса — оба поля появляются, когда на платформе включены принудительный контроль квоты и подсказка о пополнении, поэтому читайте их как необязательные. Поле hint в этом ответе — строка. Когда у портала нет оплаченного доступа к AI-моделям, ответ с reason: "wallet_off" дополнительно несёт details.learnMoreUrl — страницу с описанием подписки или тарифа Битрикс24, в которые входит AI, а поле message называет нужный продукт. При других причинах wallet_off поля details.learnMoreUrl нет.
Ключ подписки Cowork/Code считается отдельно. Вызов ключом со скоупом vibe:cowork в AI-квоту аккаунта не попадает. Если подписка активна и администратор платформы назначил доступной вам модели расшифровки цену за минуту аудио или за вызов, такой вызов расходует квоту подписки: при исчерпании окна ручка отвечает 402 с кодом cowork_quota_exhausted, заголовком Retry-After и полями window (5h, week или month), resetAt и nextTier. Пока цена не назначена, расшифровка таким ключом не тарифицируется. У Whisper форматы text, srt и vtt длительность не возвращают, поэтому тарифицируются по цене за вызов. У BitrixGPT 5.6 Transcribe они строятся платформой и тарифицируются по длительности.
Отключение Cowork/Code на уровне платформы управляет продуктовыми возможностями, но не тарификацией AI-запросов уже выданного ключа. При активной подписке расшифровка продолжает расходовать её квоту, как и чат; отключение продукта не переводит этот расход в кошелёк портала. Без активной подписки расшифровка по-прежнему не расходует квоту подписки, а поведение обычного пути тарификации сохраняется.
Лимит размера — 25 МБ. Файл сверх лимита отклоняется целиком — 413 request_too_large, списания нет. Для длинных записей разбивайте файл на части до 25 МБ и склеивайте результаты на стороне клиента. Один час mp3 128 кбит/с примерно 60 МБ — придётся резать.
Тайм-аут запроса — 15 минут. Расшифровка длится примерно 5-15 % от длины аудио. Файл на 5 минут (5-7 МБ mp3) расшифровывается за 15-45 секунд. При превышении тайм-аута возвращается 503 ai_provider_timeout.