Audio API

API для работы с аудио: синтез речи (TTS), распознавание речи (STT), а также мультимодальные модели с аудио-входом и аудио-выходом.


Эндпоинты

Эндпоинт Метод Описание
/v1/audio/speechPOSTСинтез речи из текста (TTS)
/v1/audio/transcriptionsPOSTРаспознавание речи в текст (STT)
/v1/audio/translationsPOSTПеревод аудио в текст на английском
/v1/audio/modelsGETСписок мультимодальных аудио-моделей
/v1/tts/modelsGETСписок TTS-моделей
/v1/transcriptions/modelsGETСписок моделей для распознавания речи
/v1/models?filter=audioGETФильтр аудио-моделей в общем списке
/v1/models?filter=ttsGETФильтр TTS-моделей в общем списке
/v1/models?filter=transcribeGETФильтр моделей транскрипции в общем списке

Audio Input (аудио на входе)

Модели с поддержкой аудио-входа принимают аудиофайлы в составе сообщений чата через endpoint /v1/chat/completions. Аудиофайлы передаются в base64-кодировке в параметре input_audio.

Формат сообщения с аудио

{
  "model": "google/gemini-2.5-flash",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Пожалуйста, транскрибируй этот аудиофайл."
        },
        {
          "type": "input_audio",
          "input_audio": {
            "data": "",
            "format": "wav"
          }
        }
      ]
    }
  ]
}

Параметры input_audio

Поле Тип Описание
datastringАудиофайл в base64-кодировке
formatstringФормат аудио: wav, mp3, aiff, aac, ogg, flac, m4a, pcm16, pcm24

Примечание: Поддерживаемые форматы зависят от конкретной модели. Проверьте документацию модели для уточнения.

Пример

Python:

import requests
import base64

def encode_audio_to_base64(audio_path):
    with open(audio_path, "rb") as audio_file:
        return base64.b64encode(audio_file.read()).decode('utf-8')

url = "https://api.ru-openrouter.ru/v1/chat/completions"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

base64_audio = encode_audio_to_base64("path/to/audio.wav")

response = requests.post(url, headers=headers, json={
    "model": "google/gemini-2.5-flash",
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Транскрибируй это аудио."},
                {"type": "input_audio", "input_audio": {"data": base64_audio, "format": "wav"}}
            ]
        }
    ]
})
print(response.json())

JavaScript (Fetch):

const fs = require('fs');
const audioBuffer = fs.readFileSync('path/to/audio.wav');
const base64Audio = audioBuffer.toString('base64');

const response = await fetch('https://api.ru-openrouter.ru/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'google/gemini-2.5-flash',
    messages: [
      {
        role: 'user',
        content: [
          { type: 'text', text: 'Транскрибируй это аудио.' },
          { type: 'input_audio', input_audio: { data: base64Audio, format: 'wav' } }
        ]
      }
    ]
  })
});
console.log(await response.json());

Audio Output (аудио на выходе)

Некоторые модели поддерживают генерацию аудио-ответа. Для этого в запросе к /v1/chat/completions указываются параметры modalities и audio.

Запрос аудио-выхода

{
  "model": "openai/gpt-4o-audio-preview",
  "messages": [
    {
      "role": "user",
      "content": "Скажи привет дружелюбным тоном."
    }
  ],
  "modalities": ["text", "audio"],
  "audio": {
    "voice": "alloy",
    "format": "pcm16"
  },
  "stream": true
}

Параметры audio

Параметр Описание
voiceГолос для генерации: alloy, echo, fable, onyx, nova, shimmer и др. Набор голосов зависит от модели.
formatФормат аудио: pcm16, wav, mp3, flac, opus. Зависит от модели.

Streaming-формат

Аудио-выход требует streaming (stream: true). Данные передаются по SSE (Server-Sent Events):

{
  "choices": [
    {
      "delta": {
        "audio": {
          "data": "",
          "transcript": "Привет"
        }
      }
    }
  ]
}
Поле Описание
audio.dataBase64-кодированный фрагмент аудио (PCM16)
audio.transcriptТранскрипт синтезированной речи

Пример получения аудио-выхода

import requests
import json
import base64

url = "https://api.ru-openrouter.ru/v1/chat/completions"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(url, headers=headers, json={
    "model": "openai/gpt-4o-audio-preview",
    "messages": [{"role": "user", "content": "Скажи привет дружелюбным тоном."}],
    "modalities": ["text", "audio"],
    "audio": {"voice": "alloy", "format": "pcm16"},
    "stream": True
}, stream=True)

audio_chunks = []
transcript_chunks = []

for line in response.iter_lines():
    if not line:
        continue
    decoded = line.decode("utf-8")
    if not decoded.startswith("data: "):
        continue
    data = decoded[len("data: "):]
    if data.strip() == "[DONE]":
        break
    chunk = json.loads(data)
    delta = chunk["choices"][0].get("delta", {})
    audio = delta.get("audio", {})
    if audio.get("data"):
        audio_chunks.append(audio["data"])
    if audio.get("transcript"):
        transcript_chunks.append(audio["transcript"])

transcript = "".join(transcript_chunks)
print(f"Transcript: {transcript}")

full_audio_b64 = "".join(audio_chunks)
with open("output.wav", "wb") as f:
    f.write(base64.b64decode(full_audio_b64))

/v1/audio/speech (TTS)

Синтез речи из текста. OpenAI-совместимый endpoint.

Запрос

POST https://api.ru-openrouter.ru/v1/audio/speech
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
  "model": "openai/gpt-4o-mini-tts",
  "input": "Текст для синтеза речи",
  "voice": "alloy",
  "response_format": "mp3"
}

Параметры

Параметр Тип Обязательный По умолчанию Описание
modelstring✅ ДаTTS-модель (список: /v1/tts/models)
inputstring✅ ДаТекст для синтеза (до 5000 символов)
voicestring❌ НетalloyГолос (зависит от модели)
response_formatstring❌ Нетmp3mp3, opus, aac, flac, wav, pcm
speednumber❌ Нет1.0Скорость (0.25–4.0, не все модели поддерживают)

Доступные голоса

OpenAI-модели: alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse, marin, cedar

Google-модели: Zephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat

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

Формат Content-Type Описание
mp3audio/mpegСжатый, оптимален для хранения
opusaudio/opusДля стриминга
aacaudio/aacApple-совместимый
flacaudio/flacСжатый без потерь
wavaudio/wavБез сжатия (PCM, 24kHz, mono, 16-bit)
pcmaudio/L16Raw PCM16, минимальная задержка

Ответ

Успешный ответ возвращает бинарные аудиоданные:

Content-Type: audio/mpeg
Content-Length: 123456
X-Generation-Id: gen-1234567890

Примеры

Bash (curl):

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

Python:

import requests

response = requests.post(
    "https://api.ru-openrouter.ru/v1/audio/speech",
    headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"},
    json={"model": "openai/gpt-4o-mini-tts", "input": "Привет!", "voice": "alloy", "response_format": "mp3"}
)
with open("speech.mp3", "wb") as f:
    f.write(response.content)

Multimodal audio (чат-модели)

Модели c output_modalities, содержащим "audio" (например, openai/gpt-audio-mini), генерируют аудио через /v1/chat/completions с параметрами modalities: ["text", "audio"] и audio: { voice, format }. Для таких моделей endpoint /v1/audio/speech автоматически выполняет запрос к chat/completions и возвращает готовый WAV-файл.

Список мультимодальных аудио-моделей: GET /v1/audio/models.


/v1/audio/transcriptions

Распознавание речи в текст. Поддерживает два формата ввода: multipart/form-data (OpenAI-стиль) и application/json.

Multipart/form-data (OpenAI-стиль)

POST https://api.ru-openrouter.ru/v1/audio/transcriptions
Content-Type: multipart/form-data
Authorization: Bearer YOUR_API_KEY
Поле Тип Обязательный Описание
modelstring✅ ДаМодель транскрипции
filefile✅ ДаАудиофайл (mp3, wav, ogg, flac, m4a, mp4, webm)
languagestring❌ НетЯзык аудио (опционально, для улучшения точности)
response_formatstring❌ Нетjson (по умолчанию), text, srt, verbose_json, vtt
temperaturenumber❌ НетТемпература (0–1)
promptstring❌ НетПодсказка для распознавания
timestamp_granularitiesstring❌ Нетword или segment

JSON (альтернативный стиль)

POST https://api.ru-openrouter.ru/v1/audio/transcriptions
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
  "model": "openai/whisper-1",
  "input_audio": {
    "data": "",
    "format": "wav"
  },
  "language": "ru",
  "response_format": "json"
}

Пример

curl -X POST https://api.ru-openrouter.ru/v1/audio/transcriptions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=openai/whisper-1" \
  -F "file=@audio.mp3" \
  -F "language=ru"

/v1/audio/translations

Перевод аудио в текст на английском языке. Полностью аналогичен /v1/audio/transcriptions по формату запроса, но возвращает перевод на английский.


Модели для работы с аудио

/v1/audio/models

Список мультимодальных аудио-моделей (могут принимать и генерировать аудио):

{
  "object": "list",
  "data": [
    {
      "id": "openai/gpt-4o-audio-preview",
      "object": "model",
      "capabilities": {
        "can_generate_audio": true,
        "can_understand_audio": true,
        "output_modalities": ["text", "audio"],
        "input_modalities": ["text", "audio"]
      },
      "pricing": {
        "prompt": "0.000002500",
        "completion": "0.000010000",
        "audio": "0.000100000",
        "currency": "RUB"
      }
    }
  ]
}

/v1/tts/models

Список TTS-моделей (Text-to-Speech):

{
  "object": "list",
  "data": [
    {
      "id": "openai/gpt-4o-mini-tts",
      "object": "model",
      "capabilities": {
        "can_generate_audio": true,
        "output_modalities": ["text", "speech"]
      },
      "pricing": {
        "prompt": "0.000002500",
        "completion": "0.000010000",
        "pricing_type": "per_characters",
        "audio_price": "0.000000100",
        "currency": "RUB"
      }
    }
  ]
}

/v1/transcriptions/models

Список моделей для распознавания речи.

/v1/models?filter=audio|tts|transcribe

Общий список моделей с фильтрацией по типу:

  • ?filter=audio — мультимодальные аудио-модели
  • ?filter=tts — TTS-модели
  • ?filter=transcribe — модели транскрипции
  • ?filter=text — текстовые (chat) модели
  • ?filter=image — модели генерации изображений
  • ?filter=video — модели генерации видео
  • ?filter=embedding — эмбеддинг-модели
  • ?filter=rerank — модели реранжирования

Ошибки

Коды ошибок

HTTP-код code Описание
400missing_modelНе указан параметр model
400missing_inputНе указан текст для синтеза
400model_not_foundМодель не найдена или неактивна
400model_not_supportedМодель не поддерживает аудио-операцию
400invalid_response_formatНедопустимый формат ответа
400input_too_longТекст превышает лимит (5000 символов)
400file_upload_errorОшибка загрузки файла
402insufficient_balanceНедостаточно средств на балансе
500no_audio_dataМодель не вернула аудиоданные
503audio_service_unavailableСервис временно недоступен

Формат ошибки

{
  "error": {
    "message": "Missing required parameter: input",
    "code": "missing_input"
  }
}

Лимиты

Параметр Значение
Максимальная длина текста для TTS5000 символов
Максимальный размер запроса10 MB
Таймаут TTS (dedicated)120 секунд
Таймаут TTS (multimodal audio)300 секунд
Таймаут транскрипции300 секунд