Audio API
API для работы с аудио: синтез речи (TTS), распознавание речи (STT), а также мультимодальные модели с аудио-входом и аудио-выходом.
Эндпоинты
| Эндпоинт | Метод | Описание |
|---|---|---|
/v1/audio/speech | POST | Синтез речи из текста (TTS) |
/v1/audio/transcriptions | POST | Распознавание речи в текст (STT) |
/v1/audio/translations | POST | Перевод аудио в текст на английском |
/v1/audio/models | GET | Список мультимодальных аудио-моделей |
/v1/tts/models | GET | Список TTS-моделей |
/v1/transcriptions/models | GET | Список моделей для распознавания речи |
/v1/models?filter=audio | GET | Фильтр аудио-моделей в общем списке |
/v1/models?filter=tts | GET | Фильтр TTS-моделей в общем списке |
/v1/models?filter=transcribe | GET | Фильтр моделей транскрипции в общем списке |
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
| Поле | Тип | Описание |
|---|---|---|
data | string | Аудиофайл в base64-кодировке |
format | string | Формат аудио: 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.data | Base64-кодированный фрагмент аудио (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"
}
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
model | string | ✅ Да | — | TTS-модель (список: /v1/tts/models) |
input | string | ✅ Да | — | Текст для синтеза (до 5000 символов) |
voice | string | ❌ Нет | alloy | Голос (зависит от модели) |
response_format | string | ❌ Нет | mp3 | mp3, opus, aac, flac, wav, pcm |
speed | number | ❌ Нет | 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 | Описание |
|---|---|---|
mp3 | audio/mpeg | Сжатый, оптимален для хранения |
opus | audio/opus | Для стриминга |
aac | audio/aac | Apple-совместимый |
flac | audio/flac | Сжатый без потерь |
wav | audio/wav | Без сжатия (PCM, 24kHz, mono, 16-bit) |
pcm | audio/L16 | Raw 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
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | ✅ Да | Модель транскрипции |
file | file | ✅ Да | Аудиофайл (mp3, wav, ogg, flac, m4a, mp4, webm) |
language | string | ❌ Нет | Язык аудио (опционально, для улучшения точности) |
response_format | string | ❌ Нет | json (по умолчанию), text, srt, verbose_json, vtt |
temperature | number | ❌ Нет | Температура (0–1) |
prompt | string | ❌ Нет | Подсказка для распознавания |
timestamp_granularities | string | ❌ Нет | 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 | Описание |
|---|---|---|
| 400 | missing_model | Не указан параметр model |
| 400 | missing_input | Не указан текст для синтеза |
| 400 | model_not_found | Модель не найдена или неактивна |
| 400 | model_not_supported | Модель не поддерживает аудио-операцию |
| 400 | invalid_response_format | Недопустимый формат ответа |
| 400 | input_too_long | Текст превышает лимит (5000 символов) |
| 400 | file_upload_error | Ошибка загрузки файла |
| 402 | insufficient_balance | Недостаточно средств на балансе |
| 500 | no_audio_data | Модель не вернула аудиоданные |
| 503 | audio_service_unavailable | Сервис временно недоступен |
Формат ошибки
{
"error": {
"message": "Missing required parameter: input",
"code": "missing_input"
}
}
Лимиты
| Параметр | Значение |
|---|---|
| Максимальная длина текста для TTS | 5000 символов |
| Максимальный размер запроса | 10 MB |
| Таймаут TTS (dedicated) | 120 секунд |
| Таймаут TTS (multimodal audio) | 300 секунд |
| Таймаут транскрипции | 300 секунд |