API распознавания речи

Русская речь в текст по HTTP: файл уходит сырым потоком, прогресс приходит событиями, результат содержит реплики с границами слов и имена говорящих. Отдельный режим — потоковое распознавание по WebSocket. Авторизация ключом организации, оплата за секунды обработанного аудио.

Аутентификация

Ключ организации в заголовке. У SSE и WebSocket заголовков нет, поэтому там тот же ключ передаётся параметром token.

Authorization: Bearer asr_sk_…

В базе хранится только хеш ключа, поэтому увидеть его повторно нельзя — он показывается один раз при создании. На каждую интеграцию заводите отдельный ключ: тогда отзыв одного не ломает остальные.

Быстрый старт

curl -X POST 'https://rechetext.ru/api/jobs?filename=meeting.mp3&diarize=true&model=rnnt' \
  -H "Authorization: Bearer $ASR_API_KEY" \
  --data-binary @meeting.mp3
# { "jobId": "a1b2c3d4e5f6", "status": "queued" }

curl 'https://rechetext.ru/api/jobs/a1b2c3d4e5f6' \
  -H "Authorization: Bearer $ASR_API_KEY"

Тело запроса — сырые байты файла, не multipart. Параметры идут в query: diarize — разделение по голосам, emotions — эмоция каждой реплики, model — точнее или быстрее, hints — термины через запятую.

Методы

GET/api/healthЖиво ли ядро, какие модели загружены, доступно ли разделение по голосам.
POST/api/jobsЗапись на обработку сырым потоком (не multipart), параметры в query. Отвечает идентификатором задачи.
GET/api/jobs/:idСтатус и прогресс; при готовности — текст, реплики с границами слов, метки и имена говорящих.
GET/api/jobs/:id/eventsПрогресс событиями SSE — вместо опроса в цикле. Токен передаётся в query: заголовков SSE не умеет.
POST/api/jobs/:id/cancelПрервать обработку: в очереди снимается сразу, в работе — на ближайшей границе стадии.
DELETE/api/jobs/:idУдалить задачу вместе с расшифровкой и разметкой говорящих.
GET/api/jobs/:id/speakersКто говорил: метки, сколько каждый говорил, присвоенное имя и откуда оно взялось.
PATCH/api/jobs/:id/speakers/:labelНазвать говорящего — имя запоминается на организацию и подставляется в следующих записях.
GET/api/speakersСправочник голосов организации: кого сервис знает и в скольких записях узнан.
POST/api/speakersЗавести человека заранее, не дожидаясь записи.
WS/api/streamПотоковый режим: бинарные чанки на лету, промежуточный текст в ответ, финализация по сигналу.
DELETE/api/requests/:idУдалить запись журнала вместе с расшифровкой — сценарий «распознал и забыл».
Живая песочница — в кабинете. На тестовом стенде каждый метод вызывается по-настоящему: таблица параметров с полями для значений, расчёт стоимости до отправки, примеры на четырёх языках и пример ответа. Вход нужен потому, что вызовы расходуют процессорное время; попробовать распознавание без регистрации можно на главной.

Как устроен путь задачи

  • Приём. Запись уходит потоком, ответ приходит сразу: ждать обработки на этом запросе не нужно.
  • Прогресс. События SSE отдают стадию и процент; опрос статуса тоже работает, если события неудобны.
  • Результат. Текст, реплики с границами каждого слова, метки говорящих и подставленные имена, длительность.
  • Идемпотентность списания. Повторный опрос статуса не списывает второй раз: списание привязано к задаче.
  • Отмена и удаление. Задачу можно прервать и удалить вместе с расшифровкой — сценарий «распознал и забыл» поддержан методами API, а не письмом в поддержку.

Вопросы

Как получить ключ?

Зарегистрироваться через Яндекс ID и создать ключ на странице «Ключи» в кабинете. Ключ принадлежит организации, показывается один раз, отзывается по одному — на каждую интеграцию заводится свой.

Есть ли лимиты по частоте и длительности?

Запросы по ключу организации по частоте не ограничиваются. Ограничения по длительности записи нет, размер файла — до 2 ГБ. Приём закрывается только при нулевом балансе.

Что происходит при нулевом балансе?

Приём новых записей отвечает 402 payment_required. Чтение и выгрузка уже готовых расшифровок продолжают работать: за эту работу вы заплатили.

Как считается стоимость?

По секундам обработанного аудио и по каждому режиму отдельно: распознавание, разделение по голосам, эмоции, поток. Тишина и шум не распознаются и не тарифицируются.

Чем отличается файл от потока?

Файл — фоновая задача с прогрессом, точная модель по умолчанию, подходит для записей любой длины. Поток — WebSocket с промежуточным текстом на лету и быстрой моделью, для распознавания по ходу разговора.

Можно ли не хранить расшифровки?

Да, хранение отключается на уровне организации: в журнале не останется ни текста, ни имени файла. Загруженный файл удаляется после обработки всегда.

Есть ли живая песочница?

Да, в кабинете: тестовый стенд с рабочими вызовами каждого метода, таблицами параметров, расчётом стоимости и примерами на четырёх языках. Он требует входа — вызовы стоят процессорного времени.

Ещё:контакт-центрамдиаризацияRTF — скоростьсколько стоит