Интеграция
WebSocket, REST и SSE на одном порту
Все три интерфейса слушают 127.0.0.1:9876. Канонические спецификации — OpenAPI и AsyncAPI в репозитории движка; здесь та часть контракта, которой хватит, чтобы написать клиента.
Эндпоинты
Три способа отдать аудио
Протокол версионируется: текущая версия 1.0, поля в сообщениях только добавляются. Клиент, написанный под неё, обновление сервера не сломает.
- WS/v1/ws
Потоковый вход
Сервер присылает ready и принимает бинарные кадры PCM16; телефония идёт как mulaw или alaw (G.711) через сообщение configure. Результаты возвращаются сообщениями partial и final.
- POST/v1/transcribe
Файл → JSON
Тело запроса — сам файл, multipart-обёртка не нужна. В ответе текст, слова с таймкодами и confidence. Поддерживаются WAV, FLAC, MP3, OGG/Vorbis, Ogg-FLAC, Opus, M4A/AAC.
- POST/v1/transcribe/stream
Файл → SSE
Вход тот же, что у /v1/transcribe, но ответ приходит событиями: data: partial по мере распознавания и data: final в конце файла.
Запросы
Как выглядит запрос
curl -X POST http://127.0.0.1:9876/v1/transcribe \
-H "Content-Type: application/octet-stream" \
--data-binary @recording.wavGET /health
Liveness. Отвечает и во время загрузки модели — тогда поле model равно loading.
GET /ready
Readiness. 200, когда пул сессий готов; 503 initializing во время загрузки и pool_exhausted при насыщении.
/v1/jobs
Асинхронные задачи. Роуты существуют только с --enable-jobs, без флага отдают 404.
/metrics
Prometheus. Поднимается флагом --metrics и слушает отдельный --metrics-listen (по умолчанию 127.0.0.1:9090); API-порт метрики не отдаёт.
Доступ
Ключи опциональны
Клиент передаёт ключ в заголовке X-API-Key. Для WebSocket, где заголовок выставить не всегда возможно, есть запасной путь — query api_key. Роуты /health и /ready остаются открытыми.
Поведение запроса задаёт query: itn, punctuation, vad и diarization включают постобработку, redact=off|mask|hash маскирует персональные данные, stop=off|mask|drop применяет стоп-лист. Формат ответа выбирает format: помимо JSON есть txt, srt, vtt и md, а word_timestamps и segments добавляют таймкоды слов и сегментную разметку.
Полные OpenAPI и AsyncAPI — в репозитории движка
Этой страницы хватает, чтобы написать клиента. Спецификации идут вместе с исходниками; порт по умолчанию — 9876.