API

Озвучка текста

Текст в речь через POST /audio/speech. Совместимо с OpenAI SDK — подмените base_url. Ответ — сырой аудиопоток, не JSON.

POST https://api.aitunnel.ru/v1/audio/speech принимает JSON. В OpenAI SDK укажите base_url https://api.aitunnel.ru/v1/.

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

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

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

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

ПолеОписание
voicesИдентификаторы голосов для поля voice
supported_formatsЗначения response_format. Первый — если параметр не указать
symbols_costЦена за 1 млн символов в рублях
prompt_cost / completion_costЦена за 1 млн токенов, если модель тарифицируется по токенам
russian_supportedНадёжно ли озвучивает русский

Имя в запросе — без префикса провайдера: gpt-4o-mini-tts, не openai/gpt-4o-mini-tts. Префикс provider/model обходит каталог — см. OpenRouter.

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

curl https://api.aitunnel.ru/v1/audio/speech \
  -H "Authorization: Bearer sk-aitunnel-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini-tts",
    "voice": "alloy",
    "input": "Привет! Это пример озвучки текста через AITUNNEL.",
    "response_format": "mp3"
  }' \
  --output output.mp3

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

ПараметрТипОбязательныйОписание
modelstringдаИмя из каталога или provider/model
inputstringдаТекст для озвучки
voicestringдаГолос из voices модели
response_formatstringнетФормат аудио. Если не указать — первый из supported_formats (обычно mp3)
speednumberнетСкорость речи, 0.254.0. Есть у моделей OpenAI, у остальных может игнорироваться
instructionsstringнетСтиль речи. Есть у gpt-4o-mini-tts
input_referencesarrayнетСэмпл голоса для клонирования — ниже

Gemini — только pcm

mp3 и pcm — у большинства моделей. opus, aac, flac, wav — у tts-1 и tts-1-hd. У gemini-3.1-flash-tts-preview только pcm: mp3 вернёт 400.

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

Тело — бинарное аудио. Стоимость и баланс — в заголовках:

ЗаголовокОписание
Content-Typeaudio/mpeg для mp3, audio/pcm для pcm
cost-rubСтоимость запроса в рублях
balanceОстаток баланса после списания

Ошибка приходит JSON-ом, не аудио: сначала проверьте статус ответа.

Клонирование голоса

У части моделей можно передать короткий сэмпл в input_references — отдельный «загрузить голос» шаг не нужен. Нужен один input_audio (base64 или data-URI) и по желанию text с расшифровкой сэмпла:

JSON
{
  "model": "voxtral-mini-tts-2603",
  "input": "Hello from my cloned voice!",
  "response_format": "mp3",
  "input_references": [
    {
      "type": "input_audio",
      "input_audio": { "data": "data:audio/wav;base64,UklGRuQXDAB..." }
    },
    { "type": "text", "text": "This is the transcript of the reference audio." }
  ]
}

Не все модели это умеют. Слишком большой сэмпл провайдер отклонит.

Примеры

gpt-4o-mini-tts с инструкциями по стилю

Python
response = client.audio.speech.create(
    model="gpt-4o-mini-tts",
    voice="nova",
    input="Добро пожаловать! Сегодня у нас отличные скидки.",
    instructions="Говори с энтузиазмом, как диктор рекламы.",
)
response.stream_to_file("promo.mp3")

Grok Voice TTS 1.0

Python
response = client.audio.speech.create(
    model="grok-voice-tts-1.0",
    voice="eve",
    input="Hello! This is a test of Grok Voice TTS.",
    response_format="mp3",
)
response.stream_to_file("grok.mp3")

Gemini 3.1 Flash TTS с эмоциональными тегами

Только pcm:

Python
response = client.audio.speech.create(
    model="gemini-3.1-flash-tts-preview",
    voice="Kore",
    input="[excited] Невероятно! [whispers] Это работает.",
    response_format="pcm",
)
response.stream_to_file("gemini.pcm")

Voxtral Mini TTS

Python
response = client.audio.speech.create(
    model="voxtral-mini-tts-2603",
    voice="en_paul_neutral",
    input="Welcome to our service. How can I help you today?",
    response_format="mp3",
)
response.stream_to_file("voxtral.mp3")

Несколько голосов в подкасте

Python
segments = [
    ("nova", "Добрый день! Вы слушаете еженедельный подкаст о технологиях."),
    ("onyx", "Сегодня мы обсудим последние новости в мире ИИ."),
    ("nova", "Начнём с обзора новых моделей этой недели."),
]

for i, (voice, text) in enumerate(segments):
    response = client.audio.speech.create(
        model="tts-1-hd",
        voice=voice,
        input=text,
        response_format="mp3",
    )
    response.stream_to_file(f"segment_{i}.mp3")

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

  • Модель: gpt-4o-mini-tts — стиль через instructions; tts-1 — быстрее; grok-voice-tts-1.0 — много языков; gemini-3.1-flash-tts-preview — 70+ языков и теги эмоций.
  • Формат: mp3 для хранения и плеера; pcm для пайплайнов с низкой задержкой. Не сохраняйте pcm как .mp3.
  • Длинный текст режьте на фрагменты и склеивайте аудио.
  • Кэшируйте готовые файлы — повтор того же текста оплачивается снова.

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

Пустой или битый файл?

  • response_format должен совпадать с расширением. У Gemini — только pcm.
  • Не-200 ответ — JSON с ошибкой, не аудио.

400 на формат?

  • Смотрите supported_formats модели.

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

  • Имя без префикса провайдера (gpt-4o-mini-tts, не openai/gpt-4o-mini-tts).
  • Список: GET https://api.aitunnel.ru/public/aitunnel/models/speech.

Голос не принят?

  • Берите идентификатор из voices этой модели в каталоге. Наборы у моделей разные.

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