POST Audio Transcriptions
Транскрибация аудио в текст (Speech-to-Text)
POST Audio Transcriptions
Транскрибация аудио в текст (Speech-to-Text).
Этот эндпоинт совместим с OpenAI SDK и подходит для быстрой миграции существующего кода.
Распознавание речи обслуживается только этим эндпоинтом. Media API отвечает за генерацию изображений, видео и музыки — опрашивать через /v1/media/{id} статус транскрипции нельзя, он вернёт ошибку RESULT_EXPIRED, даже когда текст готов.
Доступные модели
| Модель | ID | Описание |
|---|---|---|
| Whisper 1 | openai/whisper-1 | Классическая модель OpenAI (по умолчанию). Поддерживает verbose_json, srt, vtt, пословные/посегментные таймстампы |
| Whisper Large V3 | openai/whisper-large-v3 | Улучшенная multilingual-модель OpenAI. Форматы: json, text, verbose_json |
| Whisper Large V3 Turbo | openai/whisper-large-v3-turbo | Ускоренная версия Large V3. Форматы: json, text, verbose_json |
| GPT-4o Transcribe | openai/gpt-4o-transcribe | Высокое качество. Форматы: json, text. Поддерживает include: ["logprobs"] |
| GPT-4o Mini Transcribe | openai/gpt-4o-mini-transcribe | Быстрая/дешёвая. Форматы: json, text. Поддерживает include: ["logprobs"] |
| Google Chirp 3 | google/chirp-3 | STT от Google. Форматы: json, text |
| Qwen3 ASR Flash | qwen/qwen3-asr-flash-2026-02-10 | Быстрая multilingual-модель от Qwen. Форматы: json, text |
| Voxtral Mini Transcribe | mistralai/voxtral-mini-transcribe | STT от Mistral AI. Форматы: json, text |
| Parakeet TDT 0.6B v3 | nvidia/parakeet-tdt-0.6b-v3 | Лёгкая и быстрая модель от NVIDIA. Форматы: json, text |
| ElevenLabs STT | elevenlabs/speech-to-text | STT от ElevenLabs. Поддерживает диаризацию через diarized_json |
Тарификация STT — посекундная (per_second), по длительности аудио.
Асинхронные модели
| Модель | ID | Описание |
|---|---|---|
| Aiesa Транскрипция | aiesa/transcribe | Диаризация по спикерам, обычная очередь |
| Aiesa Транскрипция (Молния) | aiesa/transcribe-fast | То же, ускоренная обработка |
Эти модели работают иначе: запрос возвращает не текст, а id задачи, результат забирается опросом статуса. Подробности и примеры — в руководстве Aiesa Транскрипция. Тарификация — по целым минутам, минимум одна минута.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
file | string | Да | Аудиофайл: base64 (data:audio/mp3;base64,...) или URL |
model | string | Нет | Модель транскрибации (по умолчанию openai/whisper-1) |
language | string | Нет | 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 не принимают |
temperature | number | Нет | Температура (0–1, по умолчанию 0). В основном для whisper-1 |
response_format | enum | Нет | json (по умолчанию), text, srt, verbose_json, vtt, diarized_json |
prompt | string | Нет | Контекст транскрипции, до ~2048 символов. Не поддерживается для gpt-4o-transcribe-diarize |
timestamp_granularities | string[] | Нет | word, segment (можно оба). Только whisper-1 + verbose_json |
chunking_strategy | 'auto' | object | Нет | Стратегия разбивки. Обязателен для gpt-4o-transcribe-diarize при аудио > 30 сек |
include | string[] | Нет | logprobs. Только gpt-4o-transcribe и gpt-4o-mini-transcribe |
known_speaker_names | string[] | Нет | Имена известных спикеров, до 4. Только для диаризации |
known_speaker_references | string[] | Нет | Аудио-референсы спикеров (data-URL). Только для диаризации |
stream | boolean | Нет | Стриминг ответа. Не поддерживается для whisper-1 |
user | string | Нет | Идентификатор конечного пользователя |
Допустимые response_format по моделям
openai/whisper-1→json,text,srt,verbose_json,vttopenai/gpt-4o-transcribe,openai/gpt-4o-mini-transcribe→json,textelevenlabs/speech-to-text→ стандартный набор +diarized_json
Объект chunking_strategy типа server_vad
| Поле | Тип | Диапазон | Назначение |
|---|---|---|---|
type | 'server_vad' | — | обязателен |
prefix_padding_ms | number | ≥ 0 | паддинг перед сегментом, мс |
silence_duration_ms | number | ≥ 0 | длительность тишины для разрыва, мс |
threshold | number | 0–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"
}
]
}