API

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

Аудио в текст через POST /audio/transcriptions. Multipart, совместимо с OpenAI SDK — подмените base_url.

POST https://api.aitunnel.ru/v1/audio/transcriptions принимает файл в multipart/form-data. В OpenAI SDK достаточно указать base_url https://api.aitunnel.ru/v1/.

Только multipart, не JSON

JSON с полем input_audio эндпоинт не принимает — только FormData с файлом. SDK OpenAI сам собирает multipart.

Не путать с аудио в чате

Чат (/chat/completions, тип input_audio) — когда модель с audio во входе отвечает на вопросы по записи. Подробнее: аудио. Этот эндпоинт — когда нужен просто текст транскрипции.

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

Актуальный список и цены — публичный каталог:

cURL
curl https://api.aitunnel.ru/public/aitunnel/models/transcriptions

На сайте: страница моделей.

Каждая запись содержит поля:

ПолеОписание
providerПровайдер модели
min_price_per_minute / max_price_per_minuteОриентир цены за минуту аудио в рублях
duration_costЦена за минуту, если модель тарифицируется по длительности
audio_input_cost / prompt_cost / completion_costЦена за 1 млн токенов, если модель тарифицируется по токенам
supported_formatsРасширения файлов, которые модель принимает
supports_language_hintПринимает ли language
supports_diarizationУмеет ли разделять спикеров
supports_temperatureПринимает ли temperature

Имя в запросе — без префикса провайдера: whisper-1, не openai/whisper-1. Префикс provider/model обходит каталог и уходит напрямую — см. OpenRouter.

Базовое использование

curl https://api.aitunnel.ru/v1/audio/transcriptions \
  -H "Authorization: Bearer sk-aitunnel-xxx" \
  -F file="@audio.mp3" \
  -F model="whisper-1" \
  -F language="ru"

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

Запрос — multipart/form-data.

ПараметрТипОбязательныйОписание
filebinaryдаАудиофайл. Лимит — 25 МБ
modelstringдаИмя из каталога или provider/model
languagestringнетКод ISO-639-1 (ru, en, …). Если знаете язык — укажите
temperaturenumberнетСэмплинг от 0 до 1. Меньше — стабильнее
response_formatstringнетПо умолчанию json. Также text

У whisper-1 дополнительно работают форматы OpenAI: verbose_json, srt, vtt (субтитры и таймстемпы). У gpt-4o-transcribe-diarize diarized_json и chunking_strategy. Остальные поля формы у этих двух моделей тоже уходят провайдеру (prompt и т.д.).

Формат ответа

JSON
{
  "text": "Привет, это пример распознанной речи через AITUNNEL.",
  "usage": {
    "seconds": 9.2,
    "input_tokens": 83,
    "output_tokens": 30,
    "total_tokens": 113,
    "cost_rub": 0.18,
    "balance": 1247.32
  }
}
ПолеОписание
textРаспознанный текст
usage.secondsДлительность входного аудио в секундах (если модель её отдаёт)
usage.input_tokens / usage.output_tokensТокены, если модель тарифицируется по токенам
usage.cost_rubСтоимость в рублях
usage.balanceОстаток баланса после списания

Если response_format не JSON (например text или srt у whisper-1), тело — сырой текст, а cost_rub и balance приходят в заголовках.

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

Конкретный список — supported_formats модели. Общий набор:

ФорматРасширениеКогда
WAV.wavМаксимальное качество, без сжатия
MP3.mp3, .mpgaКомпромисс качество/размер
FLAC.flacLossless-сжатие
M4A.m4a, .mp4Запись с iPhone и macOS
OGG.ogg, .ogaГолосовые сообщения
WebM.webmЗапись из браузера (MediaRecorder)
AAC.aacСтриминг и мобильные приложения

Лимит 25 МБ

Максимальный размер файла — 25 МБ. Для длинных записей режьте на сегменты по 5–10 минут — быстрее и меньше риск таймаута. Несжатый WAV заполняет лимит раньше, чем MP3 или Opus.

Примеры

Распознавание со спикер-диаризацией

Python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

with open("meeting.mp3", "rb") as f:
    result = client.audio.transcriptions.create(
        model="gpt-4o-transcribe-diarize",
        file=f,
        response_format="diarized_json",
        chunking_strategy="auto",
        language="ru",
    )

print(result.text)

Бюджетная массовая транскрипция

whisper-large-v3-turbo и qwen3-asr-flash-2026-02-10 — из самых дешёвых в каталоге:

Python
import glob
import os
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

for path in glob.glob("recordings/*.mp3"):
    with open(path, "rb") as f:
        result = client.audio.transcriptions.create(
            model="whisper-large-v3-turbo",
            file=f,
            language="ru",
        )
    out_path = os.path.splitext(path)[0] + ".txt"
    with open(out_path, "w") as out:
        out.write(result.text)

Запись из браузера

MediaRecorder обычно отдаёт webm — его можно слать как есть, без перекодирования:

JavaScript
const formData = new FormData();
formData.append(
  "file",
  new Blob([webmBuffer], { type: "audio/webm" }),
  "recording.webm",
);
formData.append("model", "gpt-4o-mini-transcribe");
formData.append("language", "ru");

const res = await fetch("https://api.aitunnel.ru/v1/audio/transcriptions", {
  method: "POST",
  headers: { Authorization: "Bearer sk-aitunnel-xxx" },
  body: formData,
});

const { text } = await res.json();

Как выбрать модель

СценарийМодельПочему
Общая транскрипция файловgpt-transcribeВысокая точность
Голосовые сообщения, диктовкаwhisper-large-v3-turboДешёвая и быстрая
Массовая обработкаqwen3-asr-flash-2026-02-10Низкая цена за секунду
Субтитры / таймстемпыwhisper-1srt, vtt, verbose_json
Премиум-точностьgpt-4o-transcribeНа базе GPT-4o
Несколько спикеровgpt-4o-transcribe-diarizeКто что сказал
Европейские языкиvoxtral-mini-transcribeEN/ES/FR/DE/IT/PT/NL/HI
Много языков и диалектовchirp-3Google Chirp 3

Цены смотрите в каталоге — они меняются.

Лучшие практики

  • Указывайте language, если язык известен — точнее на коротких записях.
  • Качество важнее размера: моно 16 кГц обычно достаточно.
  • Длинные файлы(>10 мин) лучше резать — проще повторить кусок при ошибке.
  • WebM из браузера не нужно перекодировать.
  • Черновик — whisper-large-v3-turbo или qwen3-asr-flash-2026-02-10; финал — gpt-transcribe / gpt-4o-transcribe.

Устранение неполадок

Пустая или кривая транскрипция?

  • Формат файла должен совпадать с расширением и входить в supported_formats модели.
  • Проверьте, что запись не тихая и не сильно сжатая.

400 про Content-Type?

  • Нужен multipart/form-data с полем file, не JSON. SDK OpenAI делает это сам; в cURL — флаги -F.

413 — файл слишком большой?

  • Лимит 25 МБ. Сожмите в MP3/Opus или разрежьте запись.

Модель не найдена?

  • Имя без префикса провайдера (whisper-1, не openai/whisper-1), либо осознанный прямой вызов provider/model.
  • Список: GET https://api.aitunnel.ru/public/aitunnel/models/transcriptions.

Смотрите также