POST Audio Transcriptions

Транскрибация аудио в текст (Speech-to-Text)

POST Audio Transcriptions

Транскрибация аудио в текст (Speech-to-Text).

Этот эндпоинт совместим с OpenAI SDK и подходит для быстрой миграции существующего кода.

Распознавание речи обслуживается только этим эндпоинтом. Media API отвечает за генерацию изображений, видео и музыки — опрашивать через /v1/media/{id} статус транскрипции нельзя, он вернёт ошибку RESULT_EXPIRED, даже когда текст готов.

Доступные модели

МодельIDОписание
Whisper 1openai/whisper-1Классическая модель OpenAI (по умолчанию). Поддерживает verbose_json, srt, vtt, пословные/посегментные таймстампы
Whisper Large V3openai/whisper-large-v3Улучшенная multilingual-модель OpenAI. Форматы: json, text, verbose_json
Whisper Large V3 Turboopenai/whisper-large-v3-turboУскоренная версия Large V3. Форматы: json, text, verbose_json
GPT-4o Transcribeopenai/gpt-4o-transcribeВысокое качество. Форматы: json, text. Поддерживает include: ["logprobs"]
GPT-4o Mini Transcribeopenai/gpt-4o-mini-transcribeБыстрая/дешёвая. Форматы: json, text. Поддерживает include: ["logprobs"]
Google Chirp 3google/chirp-3STT от Google. Форматы: json, text
Qwen3 ASR Flashqwen/qwen3-asr-flash-2026-02-10Быстрая multilingual-модель от Qwen. Форматы: json, text
Voxtral Mini Transcribemistralai/voxtral-mini-transcribeSTT от Mistral AI. Форматы: json, text
Parakeet TDT 0.6B v3nvidia/parakeet-tdt-0.6b-v3Лёгкая и быстрая модель от NVIDIA. Форматы: json, text
ElevenLabs STTelevenlabs/speech-to-textSTT от ElevenLabs. Поддерживает диаризацию через diarized_json

Тарификация STT — посекундная (per_second), по длительности аудио.

Асинхронные модели

МодельIDОписание
Aiesa Транскрипцияaiesa/transcribeДиаризация по спикерам, обычная очередь
Aiesa Транскрипция (Молния)aiesa/transcribe-fastТо же, ускоренная обработка

Эти модели работают иначе: запрос возвращает не текст, а id задачи, результат забирается опросом статуса. Подробности и примеры — в руководстве Aiesa Транскрипция. Тарификация — по целым минутам, минимум одна минута.

Параметры запроса

ПараметрТипОбязательныйОписание
filestringДаАудиофайл: base64 (data:audio/mp3;base64,...) или URL
modelstringНетМодель транскрибации (по умолчанию openai/whisper-1)
languagestringНетISO-639-1: auto (по умолчанию), ru, en, de, fr, es, it, pt, pl, uk, nl, sv, da, fi, cs, sk, ro, bg, hr, el, tr, ar, hi, zh, ja, ko, id. Модели aiesa/* значение auto не принимают
temperaturenumberНетТемпература (0–1, по умолчанию 0). В основном для whisper-1
response_formatenumНетjson (по умолчанию), text, srt, verbose_json, vtt, diarized_json
promptstringНетКонтекст транскрипции, до ~2048 символов. Не поддерживается для gpt-4o-transcribe-diarize
timestamp_granularitiesstring[]Нетword, segment (можно оба). Только whisper-1 + verbose_json
chunking_strategy'auto' | objectНетСтратегия разбивки. Обязателен для gpt-4o-transcribe-diarize при аудио > 30 сек
includestring[]Нетlogprobs. Только gpt-4o-transcribe и gpt-4o-mini-transcribe
known_speaker_namesstring[]НетИмена известных спикеров, до 4. Только для диаризации
known_speaker_referencesstring[]НетАудио-референсы спикеров (data-URL). Только для диаризации
streambooleanНетСтриминг ответа. Не поддерживается для whisper-1
userstringНетИдентификатор конечного пользователя

Допустимые response_format по моделям

  • openai/whisper-1 → json, text, srt, verbose_json, vtt
  • openai/gpt-4o-transcribe, openai/gpt-4o-mini-transcribe → json, text
  • elevenlabs/speech-to-text → стандартный набор + diarized_json

Объект chunking_strategy типа server_vad

ПолеТипДиапазонНазначение
type'server_vad'—обязателен
prefix_padding_msnumber≥ 0паддинг перед сегментом, мс
silence_duration_msnumber≥ 0длительность тишины для разрыва, мс
thresholdnumber0–1порог громкости (VAD)

Либо строкой: "chunking_strategy": "auto".

Диаризация (gpt-4o-transcribe-diarize)

Модель gpt-4o-transcribe-diarize возвращает разбивку по спикерам. Используйте response_format: "diarized_json".

При аудио длительностью более 30 секунд параметр chunking_strategy обязателен. Без него запрос вернёт ошибку 400.

Опционально можно заранее «обучить» диаризатор на конкретные голоса:

  • known_speaker_names — массив имён, до 4. Имена используются как метки спикеров.
  • known_speaker_references — массив data-URL с короткими аудио-примерами тех же спикеров.

Поддерживаемые форматы файлов

MP3, WAV, M4A, FLAC, OGG, WebM.

Лимит размера тела — около 15 МБ. На больших файлах возможен 502. Для больших аудио разбивайте файл на части.

Примеры

curl -X POST "https://api.usellm.ru/v1/audio/transcriptions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/whisper-1",
    "file": "BASE64_ENCODED_AUDIO",
    "language": "ru"
  }'

Пример с диаризацией

curl -X POST "https://api.usellm.ru/v1/audio/transcriptions" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "file": "BASE64_ENCODED_AUDIO",
    "response_format": "diarized_json",
    "chunking_strategy": "auto",
    "known_speaker_names": ["agent", "client"]
  }'

Ответ (200)

response_format: json (по умолчанию)

{
  "text": "Привет! Это тестовое сообщение.",
  "language": "ru",
  "duration": 10.5,
  "model": "openai/whisper-1",
  "usage": { "durationSeconds": 10.5, "cost": 0.11, "cost_rub": 0.11 }
}

response_format: verbose_json (только whisper-1)

{
  "text": "Привет, мир!",
  "language": "ru",
  "duration": 5.5,
  "model": "openai/whisper-1",
  "segments": [
    {
      "id": 0,
      "seek": 0,
      "start": 0.0,
      "end": 5.5,
      "text": "Привет, мир!",
      "tokens": [1, 2, 3],
      "temperature": 0,
      "avg_logprob": -0.5,
      "compression_ratio": 1.2,
      "no_speech_prob": 0.01
    }
  ],
  "words": [
    { "word": "Привет", "start": 0.0, "end": 0.5 }
  ],
  "usage": { "durationSeconds": 5.5, "cost": 0.06, "cost_rub": 0.06 }
}

Поле words появляется, только если указан timestamp_granularities: ["word"].

response_format: diarized_json (gpt-4o-transcribe-diarize)

{
  "task": "transcribe",
  "duration": 27.4,
  "text": "agent: Привет!\nclient: Здравствуйте!",
  "segments": [
    {
      "id": "seg_001",
      "start": 0.0,
      "end": 4.7,
      "text": "Привет, как дела?",
      "speaker": "agent",
      "type": "transcript.text.segment"
    }
  ],
  "model": "gpt-4o-transcribe-diarize",
  "usage": { "durationSeconds": 27, "cost": 0.27, "cost_rub": 0.27 }
}

response_format: text / srt / vtt

Поле text содержит результат — plain text либо готовые субтитры в формате SRT/VTT. Поля segments/words отсутствуют.

Поля ответа

ПолеОписание
textПолный транскрибированный текст (для diarized_json — со спикерами)
languageОпределённый язык (ISO-639-1)
durationДлительность аудио в секундах
segmentsСегменты с таймкодами (для verbose_json и diarized_json)
wordsСлова с таймкодами (при timestamp_granularities: ["word"])
usageИспользование: durationSeconds, cost_rub, cost

Ответ асинхронных моделей (aiesa/*)

Асинхронные модели вместо текста возвращают идентификатор задачи:

{
  "id": "gen_1234567890123456789",
  "object": "transcription",
  "status": "processing",
  "model": "aiesa/transcribe"
}

Результат забирается опросом:

curl "https://api.usellm.ru/v1/audio/transcriptions/gen_1234567890123456789" \
  -H "Authorization: Bearer <USELLM_API_KEY>"
{
  "id": "gen_1234567890123456789",
  "object": "transcription",
  "status": "completed",
  "text": "Добрый день, начнём совещание. Да, все на связи.",
  "duration": 15,
  "segments": [
    {
      "speaker": "SPEAKER_01",
      "text": "Добрый день, начнём совещание.",
      "start": 0,
      "end": 7,
      "startTime": "00:00:00",
      "endTime": "00:00:07"
    }
  ]
}