Разделы документации

Озвучка и расшифровка речи

Обновлено:

Два эндпоинта в формате OpenAI Audio API: POST /v1/audio/speech превращает текст в речь, POST /v1/audio/transcriptions — речь в текст. Ключ sk-heli-… и рублёвый кошелёк те же, что для чата. Официальные SDK OpenAI работают, если указать base URL https://getheli.ru/v1.

Коротко

Озвучить текст или расшифровать запись через API из России можно в Heli: эндпоинты /v1/audio/speech и /v1/audio/transcriptions в формате OpenAI, оплата в рублях с того же баланса, что и чат. Озвучка списывается по символам текста, секундам готового аудио или токенам, расшифровка — по длительности записи или токенам, в зависимости от модели. Файл для расшифровки — до 25 МБ.

Какие модели есть

Все модели озвучки и расшифровки — в каталоге (фильтр «Аудио») и в разделе «Модели» кабинета. Через API их отдаёт GET /v1/models: у озвучки kind: "speech", у расшифровки kind: "transcription".

Озвучка: Gemini 3.8 Flash TTS, Speech 2.8 HD, Qwen-Audio-3.0-TTS Flash, Voxtral TTS 3.

Расшифровка: Whisper Large V3 Turbo, GPT-4o Transcribe, GPT-4o Mini Transcribe, Gemini 3.5 Transcribe, Voxtral Small Transcribe 3.

curl
curl https://getheli.ru/v1/models \
  -H "Authorization: Bearer sk-heli-…"

# в ответе у каждой модели kind и цена в рублях:
# { "id": "elevenlabs/eleven-v3", "kind": "speech",
#   "pricing": { "currency": "RUB", "per_1k_chars": 12.6, ... } }

Цена в рублях — в pricing. Единица зависит от модели: per_1k_chars — за 1 тыс. символов текста, per_minute — за минуту аудио (у расшифровки входного, у озвучки готового), input_per_1m и output_per_1m — за 1 млн токенов.

Озвучка: POST /v1/audio/speech

Ответ — сам аудиофайл, не JSON. Content-Type: audio/mpeg для mp3, audio/pcm для pcm.

ПараметрЧто делает
modelСлаг модели с kind = speech из GET /v1/models или каталога. Обязательный.
inputТекст для озвучки. У некоторых моделей — список реплик для нескольких голосов.
voiceГолос. Набор голосов свой у каждой модели (см. ниже).
response_formatmp3 или pcm. По умолчанию pcm: 24 кГц, 16 бит, моно, без заголовка.
instructionsКак читать: тон, темп, эмоция. Поддерживают Gemini TTS, Fish Audio и часть других.
speedСкорость, 1.0 по умолчанию. Модели без управления скоростью вернут 400.
curl
curl https://getheli.ru/v1/audio/speech \
  -H "Authorization: Bearer sk-heli-…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3.8-flash-tts",
    "input": "Здравствуйте! Ваш заказ передан в доставку.",
    "voice": "Kore",
    "instructions": "спокойно и дружелюбно",
    "response_format": "pcm"
  }' \
  --output speech.pcm
Python
from openai import OpenAI

client = OpenAI(base_url="https://getheli.ru/v1", api_key="sk-heli-…")

with client.audio.speech.with_streaming_response.create(
    model="microsoft/mai-voice-2.1",
    voice="en-US-Harper:MAI-Voice-2.1",
    input="Welcome to the event!",
    response_format="mp3",
) as response:
    response.stream_to_file("speech.mp3")

Голоса. У Gemini TTS — имена вроде Kore и Puck. У MAI-Voice — полный id голоса с суффиксом модели, например en-US-Harper:MAI-Voice-2.1; язык речи задаёт локаль голоса. Gemini TTS и HeyGen Voice отдают только pcm, MiniMax — только mp3: другой формат вернёт 400.

Старые id tts-1 и tts-1-hd принимаются и уходят в модель озвучки по умолчанию. Голоса OpenAI вроде alloy у неё не работают, поэтому лучше сразу указать модель и её голос.

Длинный текст разбивайте на абзацы и склеивайте аудио: так быстрее первый звук и меньше риск таймаута.

Расшифровка: POST /v1/audio/transcriptions

Принимает multipart/form-data, как у OpenAI. Файл — до 25 МБ: это примерно 26 минут mp3 128 кбит/с или больше двух часов голосовых в opus. Несжатый wav заполняет лимит быстрее, около 13 минут.

ПараметрЧто делает
fileАудиофайл: mp3, wav, m4a, ogg, webm, flac, aac. До 25 МБ.
modelСлаг модели с kind = transcription. Обязательный.
languageКод языка ISO-639-1, например ru. Без него язык определяется сам.
response_formatjson (по умолчанию) или verbose_json с сегментами и длительностью.
timestamp_granularities[]segment и/или word — метки времени в verbose_json.
temperatureОт 0 до 1.
curl
curl https://getheli.ru/v1/audio/transcriptions \
  -H "Authorization: Bearer sk-heli-…" \
  -F model="openai/whisper-large-v3-turbo" \
  -F file="@meeting.mp3" \
  -F language="ru"
Python
from openai import OpenAI

client = OpenAI(base_url="https://getheli.ru/v1", api_key="sk-heli-…")

with open("meeting.mp3", "rb") as audio:
    result = client.audio.transcriptions.create(
        model="openai/whisper-large-v3-turbo",
        file=audio,
        language="ru",
    )

print(result.text)

Можно прислать и JSON с аудио в base64 в поле input_audio:

curl
curl https://getheli.ru/v1/audio/transcriptions \
  -H "Authorization: Bearer sk-heli-…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/whisper-large-v3-turbo",
    "input_audio": { "data": "<base64 без префикса data:>", "format": "mp3" },
    "response_format": "verbose_json",
    "timestamp_granularities": ["segment"]
  }'

Ответ:

JSON
{
  "text": "Коллеги, начинаем планёрку.",
  "usage": { "seconds": 9.2, "input_tokens": 83, "output_tokens": 30, "total_tokens": 113 }
}

Форматы text, srt и vtt не поддерживаются: возьмите verbose_json и соберите субтитры из segments. Записи длиннее нескольких минут надёжнее резать на части. Алиас whisper-1 ведёт на openai/whisper-1.

Цены и списание

Списываем фактическую стоимость запроса в рублях по тарифу из каталога: озвучку — по символам текста, секундам готового аудио или токенам (в зависимости от модели), расшифровку — по длительности записи или токенам. Перед запросом на балансе резервируется небольшая сумма, после ответа резерв заменяется точным списанием. Если запрос не удался, деньги не списываются. Каждый запрос виден в кабинете в разделе «Расходы».

При нулевом балансе API вернёт 402. Пополнить баланс.

Ошибки

КодЧто значит
400Неверный голос, формат или параметр, который модель не поддерживает. Текст ошибки подскажет, что поправить.
402На балансе не хватает денег. Пополните кошелёк в кабинете.
404Модели нет в каталоге Heli. Возьмите слаг из GET /v1/models.
413Файл больше 25 МБ. Сожмите его в mp3 или opus или разрежьте на части.
429Слишком много запросов. Повторите через несколько секунд.
502 / 503Временный сбой модели. Повторите запрос, деньги за него не списываются.

Ошибки приходят в формате OpenAI: { "error": { "message", "type", "code" } }. Общие коды — в справочнике API.