POST /v1/audio/transcriptions
Распознавание речи (транскрибация аудио в текст). OpenAI-совместимый формат — работает официальный openai SDK.
Превращает аудиозапись в текст: голосовые сообщения, звонки, подкасты, интервью, субтитры. OpenAI-совместимый формат — без переписывания работают openai Python/TypeScript SDK и любые клиенты под OpenAI Audio API: достаточно поменять base_url.
Стрима нет: один POST → один JSON-ответ с готовым текстом (stream: true отклоняется с кодом 400). Полный список моделей распознавания — в каталоге (фильтр «Транскрибация»): Whisper, GPT-4o Transcribe, Voxtral, Chirp и другие.
Эндпоинт
https://api.hubris.pw/v1/audio/transcriptionsЗаголовки:
| Header | Значение |
|---|---|
Authorization | Bearer sk-gw-... (обязательно) |
Content-Type | multipart/form-data (файл) или application/json (base64) |
Тело запроса
Поддерживаются два формата — результат одинаковый.
Вариант 1: multipart/form-data (как у OpenAI)
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
file | file | — | Аудиофайл. Форматы: WAV, MP3, FLAC, M4A, OGG, WebM, AAC. До 25 МБ. |
model | string | — | ID модели распознавания, например openai/whisper-1. |
language | string | авто | Язык записи в ISO-639-1 (ru, en). Явное указание ускоряет и уточняет распознавание. |
prompt | string | — | Подсказка: имена, термины, аббревиатуры, которые встречаются в записи. |
temperature | number | 0 | 0–1. Выше — креативнее, ниже — детерминированнее. |
response_format | string | json | json или verbose_json (поддержка verbose_json зависит от модели). Форматы text/srt/vtt не поддерживаются. |
timestamp_granularities[] | string[] | — | segment и/или word — таймстемпы в verbose_json (поддерживается не всеми моделями). |
Вариант 2: application/json (аудио в base64)
| Поле | Тип | Описание |
|---|---|---|
model | string | ID модели распознавания. |
input_audio.data | string | Аудио в base64 (без data:-префикса). |
input_audio.format | string | Формат: wav, mp3, flac, m4a, ogg, webm, aac. |
Прямые URL на аудио не поддерживаются — только файл или base64. Записи длиннее ~10 минут лучше резать на части: у провайдеров есть таймаут обработки (~60 секунд на запрос).
Минимальный пример
curl -s https://api.hubris.pw/v1/audio/transcriptions \-H "Authorization: Bearer sk-gw-..." \-F file=@voice.mp3 \-F model=openai/whisper-1 \-F language=rufrom openai import OpenAIclient = OpenAI( base_url="https://api.hubris.pw/v1", api_key="sk-gw-...",)with open("voice.mp3", "rb") as f: r = client.audio.transcriptions.create( model="openai/whisper-1", file=f, language="ru", )print(r.text)import fs from "node:fs";import OpenAI from "openai";const client = new OpenAI({baseURL: "https://api.hubris.pw/v1",apiKey: "sk-gw-...",});const r = await client.audio.transcriptions.create({model: "openai/whisper-1",file: fs.createReadStream("voice.mp3"),language: "ru",});console.log(r.text);Ответ
{
"text": "Привет! Это тестовая запись для распознавания речи.",
"usage": {
"seconds": 4,
"input_tokens": 120,
"output_tokens": 18,
"total_tokens": 138,
"cost": 6
}
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
text | string | Распознанный текст. Пустая строка — валидный результат (тишина в записи). |
usage.seconds | number | Длительность обработанного аудио в секундах (если модель её сообщает). |
usage.input_tokens | integer | Токены аудио-входа. |
usage.output_tokens | integer | Токены текста на выходе. |
usage.total_tokens | integer | Сумма. |
usage.cost | integer | Стоимость в копейках. Hubris-расширение. |
При response_format: "verbose_json" модели, которые это поддерживают, дополнительно возвращают language, duration, segments[] и words[] с таймстемпами.
HTTP-коды
| Код | Когда |
|---|---|
200 | Успешное распознавание. |
400 | Нет file/model (multipart) или input_audio (JSON), невалидное тело. |
401 | Ключ отсутствует / отозван / невалиден. |
402 | Недостаточно средств на балансе. |
404 | Модели с таким model не существует или это не модель распознавания. |
413 | Тело запроса больше лимита (файл до 25 МБ). |
429 | Превышен дневной лимит на ключе. |
502 / 503 / 504 | Транзиентные сбои у провайдера или курса ЦБ. |
Формат тела ошибки и стратегия retry — Ошибки.
Биллинг
Стоимость считается по факту каждого запроса и возвращается в usage.cost в копейках — та же сумма, что списывается с баланса и видна в логах. Часть моделей тарифицируется по длительности записи, часть — по токенам; ориентиры цен — в каталоге с фильтром «Транскрибация».
Что дальше
Обновлено: