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 с промежуточным текстом на лету и быстрой моделью, для распознавания по ходу разговора.
Да, хранение отключается на уровне организации: в журнале не останется ни текста, ни имени файла. Загруженный файл удаляется после обработки всегда.
Да, в кабинете: тестовый стенд с рабочими вызовами каждого метода, таблицами параметров, расчётом стоимости и примерами на четырёх языках. Он требует входа — вызовы стоят процессорного времени.