Назад к блогу
6 минНаговори

Представляем API Наговори

apiанонсразработчикам

Представляем API Наговори

Сегодня мы запускаем API Наговори — простой REST-интерфейс к нашему движку распознавания и синтеза речи. Если вы уже пользуетесь Наговори через веб-интерфейс или Telegram-бота, теперь вы можете встроить те же возможности напрямую в свои приложения.

Зачем API?

С момента запуска Наговори обработал сотни тысяч минут аудио через веб-панель и ботов в мессенджерах. Но разработчики продолжали спрашивать: «Можно ли вызвать это с моего сервера?»

Теперь ответ — да.

Мы создали API для команд, которым транскрипция нужна как строительный блок, а не отдельный инструмент. Например: CRM, которая автоматически расшифровывает звонки с клиентами. Подкаст-платформа, генерирующая поисковые транскрипты. Юридическая фирма, превращающая показания в структурированные документы. Служба поддержки, логирующая звонки текстом.

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

Что можно сделать

API покрывает всё, что есть в веб-интерфейсе, и спроектирован предсказуемо. Никаких websocket'ов, GraphQL или проприетарных SDK. Только JSON через HTTPS.

Распознавание речи:

  • Загрузка аудио в любом распространённом формате (MP3, WAV, OGG, FLAC, M4A, WEBM)
  • Автоматическое определение языка из 50+
  • Сегменты с таймкодами для генерации субтитров
  • Стриминг в реальном времени через SSE — текст появляется по мере распознавания
  • AI-постобработка: очистка от слов-паразитов, структурированные резюме

Синтез речи:

  • Преобразование текста в естественную речь с 7 голосами
  • Стриминг аудио в реальном времени для интерактивных приложений
  • Пакетный синтез для предварительного рендеринга контента
  • Поддержка ударений в русском тексте (за́мок vs замо́к)

Управление использованием:

  • Создание и управление API-ключами из профиля
  • Отслеживание баланса через /v1/profile/usage
  • Цены как в вебе — без дополнительной платы за API

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

Мы сделали аутентификацию максимально простой. Создайте API-ключ на странице профиля и используйте его как Bearer-токен:

curl https://api.nagovori.ru/v1/me \
  -H "Authorization: Bearer nag_ВАШ_КЛЮЧ"

Ключи начинаются с nag_ — их легко найти в code review и сканерах секретов. Ключи хешируются SHA-256 перед сохранением — мы никогда не храним сырой ключ. Если ключ утёк, мгновенно отзовите его в профиле и создайте новый.

Можно создать несколько ключей для разных сред (staging, production, CI) и отзывать их независимо.

Полный пример

Вот полный цикл транскрипции на Python — от загрузки файла до печати результата:

import requests
import time
import os

API_KEY = os.environ["NAGOVORI_API_KEY"]
BASE = "https://api.nagovori.ru/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}

# 1. Получаем presigned URL для загрузки
presign = requests.post(f"{BASE}/uploads/presign", headers=headers, json={
    "filename": "call.mp3",
    "content_type": "audio/mpeg",
    "size_bytes": os.path.getsize("call.mp3"),
}).json()

# 2. Загружаем файл напрямую в хранилище
with open("call.mp3", "rb") as f:
    requests.put(presign["upload_url"], data=f,
                 headers={"Content-Type": "audio/mpeg"})

# 3. Запускаем транскрипцию
job = requests.post(f"{BASE}/transcriptions", headers=headers, json={
    "object_key": presign["object_key"],
    "filename": "call.mp3",
    "content_type": "audio/mpeg",
    "size_bytes": os.path.getsize("call.mp3"),
    "language": "auto",
}).json()

# 4. Ожидаем результат
while job["status"] in ("queued", "processing"):
    time.sleep(3)
    job = requests.get(
        f"{BASE}/transcriptions/{job['id']}", headers=headers
    ).json()

if job["status"] == "completed":
    print(job["transcript_text"])
else:
    print(f"Ошибка: {job.get('error_message')}")

Тот же подход работает на любом языке. На странице Примеры — версии на TypeScript, Go и cURL.

Стриминг в реальном времени

Для приложений, которым нужно показывать текст по мере распознавания, API поддерживает Server-Sent Events:

import requests

url = f"{BASE}/transcriptions/{job_id}/stream"
response = requests.get(url, headers=headers, stream=True)

for line in response.iter_lines():
    if line.startswith(b"data: "):
        # Парсим JSON и обновляем интерфейс
        pass

Стрим отправляет события token с отдельными словами и финальное событие done с полным текстом.

Тарификация

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

Пакеты минут начинаются от 1.4 ₽/мин при больших объёмах. Каждый новый аккаунт получает бесплатные минуты без привязки карты.

Лимиты

Для стабильности сервиса:

  • 60 API-запросов в минуту на пользователя
  • 1 параллельная транскрипция (остальные встают в очередь)
  • Загрузка файлов через presigned URL

Этих лимитов достаточно для большинства случаев. Если нужен больший throughput — напишите нам.

Начало работы

  1. Войдите на nagovori.ru
  2. Перейдите в Профиль и создайте API-ключ
  3. Следуйте Быстрому старту — первая транскрипция за 5 минут
  4. Изучите полную документацию и интерактивную справку API

Нам интересно увидеть, что вы создадите. Если есть вопросы — пишите через платформу.