Перейти к основному содержанию
POST
/
v1
/
audio
/
speech
Сгенерировать речь из текста (TTS)
curl --request POST \
  --url https://polza.ai/api/v1/audio/speech \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "input": "Привет! Это тестовое сообщение.",
  "voice": "alloy",
  "model": "tts-1",
  "instructions": "Говори медленно и выразительно",
  "response_format": "mp3",
  "speed": 1,
  "user": "user-123",
  "stability": 0.5,
  "similarity_boost": 0.75,
  "style": 0,
  "timestamps": false,
  "previous_text": "<string>",
  "next_text": "<string>",
  "language_code": "ru"
}
'
import requests

url = "https://polza.ai/api/v1/audio/speech"

payload = {
"input": "Привет! Это тестовое сообщение.",
"voice": "alloy",
"model": "tts-1",
"instructions": "Говори медленно и выразительно",
"response_format": "mp3",
"speed": 1,
"user": "user-123",
"stability": 0.5,
"similarity_boost": 0.75,
"style": 0,
"timestamps": False,
"previous_text": "<string>",
"next_text": "<string>",
"language_code": "ru"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: 'Привет! Это тестовое сообщение.',
voice: 'alloy',
model: 'tts-1',
instructions: 'Говори медленно и выразительно',
response_format: 'mp3',
speed: 1,
user: 'user-123',
stability: 0.5,
similarity_boost: 0.75,
style: 0,
timestamps: false,
previous_text: '<string>',
next_text: '<string>',
language_code: 'ru'
})
};

fetch('https://polza.ai/api/v1/audio/speech', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://polza.ai/api/v1/audio/speech",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input' => 'Привет! Это тестовое сообщение.',
'voice' => 'alloy',
'model' => 'tts-1',
'instructions' => 'Говори медленно и выразительно',
'response_format' => 'mp3',
'speed' => 1,
'user' => 'user-123',
'stability' => 0.5,
'similarity_boost' => 0.75,
'style' => 0,
'timestamps' => false,
'previous_text' => '<string>',
'next_text' => '<string>',
'language_code' => 'ru'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://polza.ai/api/v1/audio/speech"

payload := strings.NewReader("{\n \"input\": \"Привет! Это тестовое сообщение.\",\n \"voice\": \"alloy\",\n \"model\": \"tts-1\",\n \"instructions\": \"Говори медленно и выразительно\",\n \"response_format\": \"mp3\",\n \"speed\": 1,\n \"user\": \"user-123\",\n \"stability\": 0.5,\n \"similarity_boost\": 0.75,\n \"style\": 0,\n \"timestamps\": false,\n \"previous_text\": \"<string>\",\n \"next_text\": \"<string>\",\n \"language_code\": \"ru\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://polza.ai/api/v1/audio/speech")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": \"Привет! Это тестовое сообщение.\",\n \"voice\": \"alloy\",\n \"model\": \"tts-1\",\n \"instructions\": \"Говори медленно и выразительно\",\n \"response_format\": \"mp3\",\n \"speed\": 1,\n \"user\": \"user-123\",\n \"stability\": 0.5,\n \"similarity_boost\": 0.75,\n \"style\": 0,\n \"timestamps\": false,\n \"previous_text\": \"<string>\",\n \"next_text\": \"<string>\",\n \"language_code\": \"ru\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://polza.ai/api/v1/audio/speech")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": \"Привет! Это тестовое сообщение.\",\n \"voice\": \"alloy\",\n \"model\": \"tts-1\",\n \"instructions\": \"Говори медленно и выразительно\",\n \"response_format\": \"mp3\",\n \"speed\": 1,\n \"user\": \"user-123\",\n \"stability\": 0.5,\n \"similarity_boost\": 0.75,\n \"style\": 0,\n \"timestamps\": false,\n \"previous_text\": \"<string>\",\n \"next_text\": \"<string>\",\n \"language_code\": \"ru\"\n}"

response = http.request(request)
puts response.read_body
{
  "audio": "SUQzBAAAAAAAI1RTU0UAAA...",
  "contentType": "audio/mpeg",
  "model": "tts-1",
  "duration": 5.2,
  "usage": {
    "characters": 100,
    "cost": 0.01,
    "cost_rub": 0.01
  },
  "alignment": {}
}
Этот эндпоинт совместим с OpenAI SDK и подходит для быстрой миграции существующего кода. Для синтеза речи рекомендуется именно dedicated-эндпоинт /v1/audio/speech: здесь доступен полный диапазон speed (0.25–4.0) и согласованный набор параметров под каждое семейство моделей. Те же возможности доступны и через общий Media API, но там часть параметров (speed, instructions, ElevenLabs-only поля) ведёт себя иначе или ограничена.

Доступные модели

МодельIDОписание
TTSopenai/tts-1OpenAI стандарт (по умолчанию)
TTS HDopenai/tts-1-hdOpenAI HD
GPT-4o Mini TTSopenai/gpt-4o-mini-ttsOpenAI, управляемый интонацией, поддерживает instructions
ElevenLabs Multilingual v2elevenlabs/text-to-speech-multilingual-v2ElevenLabs многоязычный
ElevenLabs Turbo v2.5elevenlabs/text-to-speech-turbo-2-5ElevenLabs Turbo (единственный с language_code)

Разрешение голоса по семействам

Параметр voice интерпретируется Polza в зависимости от семейства модели. Передача голоса «не из своего» семейства не приводит к ошибке тихо — голос приводится к дефолту семейства:
СемействоДефолтДопустимые значения
openai/*alloyalloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse
elevenlabs/*Rachelvoice_id из аккаунта ElevenLabs (например pNInz6obpgDQGcFmaJgB) или имя пресета (Rachel, Aria, Roger, Sarah…). Стандартный OpenAI-голос будет отклонён с ошибкой 400
В релизе 1.6.7 на каталоге доступны OpenAI и ElevenLabs. Семейства Gemini TTS / Kokoro / MAI Voice поддержаны на уровне разрешения голоса, но включаются отдельно.

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

ПараметрТипОбязательныйОписание
modelstringНетМодель TTS (по умолчанию openai/tts-1)
inputstringДаТекст для озвучки, до 5000 символов
voicestringДаИмя голоса (см. таблицу выше)
response_formatenumНетmp3 (по умолчанию), opus, aac, flac, wav, pcm
speednumberНетСкорость речи, 0.254.0 (по умолчанию 1.0). Только OpenAI-модели
instructionsstringНетГолосовые инструкции, до 4096 символов. Только openai/gpt-4o-mini-tts. Не работает у tts-1/tts-1-hd
stream_formatenumНетsse или audio. Не поддерживается для tts-1/tts-1-hd
userstringНетИдентификатор конечного пользователя

Параметры ElevenLabs

ПараметрТипОписание
stabilitynumber (0–1)Стабильность голоса (меньше = экспрессивнее)
similarity_boostnumber (0–1)Схожесть с оригинальным голосом
stylenumber (0–1)Эмоциональность
timestampsbooleanПосимвольный alignment в ответе (characters, character_start_times_seconds, character_end_times_seconds)
previous_textstringТекст перед текущим фрагментом (контекст), до 5000 символов
next_textstringТекст после текущего фрагмента (контекст), до 5000 символов
language_codestringISO-639-1 (ru, en…). Только elevenlabs/text-to-speech-turbo-2-5

Примеры

curl -X POST "https://polza.ai/api/v1/audio/speech" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/tts-1",
    "input": "Привет! Это Polza.AI!",
    "voice": "alloy"
  }'
import requests

response = requests.post(
    'https://polza.ai/api/v1/audio/speech',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'model': 'openai/tts-1',
        'input': 'Привет! Это тестовое сообщение.',
        'voice': 'alloy'
    }
)

data = response.json()
print(f"Аудио: {data['audio']}")
print(f"Длительность: {data.get('duration')} сек")
const response = await fetch('https://polza.ai/api/v1/audio/speech', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'openai/tts-1',
    input: 'Hello! This is a test message.',
    voice: 'nova'
  })
});

const data = await response.json();
console.log(data.audio);

Пример с ElevenLabs + timestamps

curl -X POST "https://polza.ai/api/v1/audio/speech" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elevenlabs/text-to-speech-multilingual-v2",
    "input": "Привет, как дела?",
    "voice": "Rachel",
    "timestamps": true
  }'

Ответ (200)

{
  "audio": "SUQzBAAAAAAAI1RTU0UAAA...",
  "contentType": "audio/mpeg",
  "model": "openai/tts-1",
  "duration": 3.5,
  "usage": {
    "characters": 25,
    "cost_rub": 0.50,
    "cost": 0.50
  }
}
ПолеТипОписание
audiostringАудио в формате base64-строки (не бинарный поток) — декодируйте и сохраняйте с расширением по contentType
contentTypestringMIME-тип (например, audio/mpeg, audio/wav, audio/ogg)
modelstringИспользованная модель
durationnumberДлительность в секундах, если известна
usageobjectИспользование: characters (для посимвольных моделей), cost_rub, cost
alignmentobjectПосимвольные тайминги (только ElevenLabs при timestamps: true)
Поле usage.characters присутствует для посимвольных моделей (tts-1/tts-1-hd); для токенных (gpt-4o-mini-tts) состав usage иной.

Пример ответа ElevenLabs с alignment

{
  "audio": "...",
  "contentType": "audio/mpeg",
  "model": "elevenlabs/text-to-speech-multilingual-v2",
  "alignment": {
    "characters": ["П", "р", "и"],
    "character_start_times_seconds": [0.0, 0.05, 0.11],
    "character_end_times_seconds": [0.05, 0.11, 0.18]
  }
}

Генерация звуковых эффектов

Также доступна генерация звуков по текстовому описанию через тот же эндпоинт.

Параметры

ПараметрТипОбязательныйОписание
modelstringДаМодель генерации звуков
inputstringДаОписание звука на английском
duration_secondsnumberНетДлительность (0.5-10 сек)
loopbooleanНетЗацикленность
output_formatstringНетФормат аудио
prompt_influencenumberНетВлияние промпта

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

  • mp3_22050_32 — MP3 22050Hz 32kbps
  • mp3_44100_32 — MP3 22050Hz 32kbps
  • mp3_44100_64 — MP3 44100Hz 64kbps
  • mp3_44100_128 — MP3 44100Hz 128kbps (рекомендуется)
  • mp3_44100_192 — MP3 44100Hz 192kbps

Пример

curl -X POST "https://polza.ai/api/v1/audio/speech" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elevenlabs/sound-effect-v2",
    "input": "sound of guitar strumming",
    "duration_seconds": 2.5,
    "loop": false,
    "output_format": "mp3_44100_128",
    "prompt_influence": 0.3
  }'
Описание звуковых эффектов должно быть на английском языке.

Авторизации

Authorization
string
header
обязательно

API ключ передаётся в заголовке: Authorization: Bearer <POLZA_AI_API_KEY>

Тело

application/json
input
string
обязательно

Текст для озвучивания (максимум 5000 символов)

Maximum string length: 5000
Пример:

"Привет! Это тестовое сообщение."

voice
string
обязательно

Голос для генерации речи. Допустимые значения зависят от модели: OpenAI (alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), ElevenLabs (Rachel, Aria, Roger, Sarah и др.)

Пример:

"alloy"

model
string
по умолчанию:tts-1

ID модели для генерации речи

Пример:

"tts-1"

instructions
string

Инструкции для управления характеристиками голоса. Поддерживается только для gpt-4o-mini-tts, не работает с tts-1 и tts-1-hd

Maximum string length: 4096
Пример:

"Говори медленно и выразительно"

response_format
enum<string>
по умолчанию:mp3

Формат выходного аудио

Доступные опции:
mp3,
opus,
aac,
flac,
wav,
pcm
speed
number
по умолчанию:1

Скорость генерации речи (0.25 - 4.0)

Требуемый диапазон: 0.25 <= x <= 4
Пример:

1

stream_format
enum<string>

Формат потоковой передачи аудио. Не поддерживается для tts-1 и tts-1-hd

Доступные опции:
sse,
audio
user
string

Уникальный идентификатор конечного пользователя для отслеживания и предотвращения злоупотреблений

Пример:

"user-123"

stability
number

Стабильность голоса (0-1). Только для ElevenLabs

Требуемый диапазон: 0 <= x <= 1
Пример:

0.5

similarity_boost
number

Усиление схожести голоса (0-1). Только для ElevenLabs

Требуемый диапазон: 0 <= x <= 1
Пример:

0.75

style
number

Экспрессия стиля (0-1). Только для ElevenLabs

Требуемый диапазон: 0 <= x <= 1
Пример:

0

timestamps
boolean

Возвращать временные метки для каждого слова. Только для ElevenLabs

Пример:

false

previous_text
string

Предшествующий текст для улучшения непрерывности речи при конкатенации. Только для ElevenLabs

Maximum string length: 5000
next_text
string

Последующий текст для улучшения непрерывности речи при конкатенации. Только для ElevenLabs

Maximum string length: 5000
language_code
string

Код языка ISO 639-1. Только для ElevenLabs Turbo v2.5

Maximum string length: 10
Пример:

"ru"

Ответ

audio
string
обязательно

Base64-encoded аудио данные

Пример:

"SUQzBAAAAAAAI1RTU0UAAA..."

contentType
string
обязательно

Content-Type аудио

Пример:

"audio/mpeg"

model
string
обязательно

ID использованной модели

Пример:

"tts-1"

duration
number

Длительность аудио в секундах (если известна)

Пример:

5.2

usage
object

Информация об использовании

Пример:
{
"characters": 100,
"cost": 0.01,
"cost_rub": 0.01
}
alignment
object

Временные метки символов (при timestamps: true, ElevenLabs)