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",
"emotion": "happy",
"provider": {
"require_parameters": true,
"allow_fallbacks": true,
"order": [
"OpenAI",
"Anthropic"
],
"only": [
"OpenAI",
"Google"
],
"ignore": [
"DeepInfra"
],
"sort": "price",
"data_residency": "ru",
"max_price": {
"prompt": 10,
"completion": 20,
"image": 5,
"audio": 15,
"request": 1,
"video_per_second": 50,
"stt_per_minute": 5,
"tts_per_million_characters": 1500
}
}
}
'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",
"emotion": "happy",
"provider": {
"require_parameters": True,
"allow_fallbacks": True,
"order": ["OpenAI", "Anthropic"],
"only": ["OpenAI", "Google"],
"ignore": ["DeepInfra"],
"sort": "price",
"data_residency": "ru",
"max_price": {
"prompt": 10,
"completion": 20,
"image": 5,
"audio": 15,
"request": 1,
"video_per_second": 50,
"stt_per_minute": 5,
"tts_per_million_characters": 1500
}
}
}
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',
emotion: 'happy',
provider: {
require_parameters: true,
allow_fallbacks: true,
order: ['OpenAI', 'Anthropic'],
only: ['OpenAI', 'Google'],
ignore: ['DeepInfra'],
sort: 'price',
data_residency: 'ru',
max_price: {
prompt: 10,
completion: 20,
image: 5,
audio: 15,
request: 1,
video_per_second: 50,
stt_per_minute: 5,
tts_per_million_characters: 1500
}
}
})
};
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',
'emotion' => 'happy',
'provider' => [
'require_parameters' => true,
'allow_fallbacks' => true,
'order' => [
'OpenAI',
'Anthropic'
],
'only' => [
'OpenAI',
'Google'
],
'ignore' => [
'DeepInfra'
],
'sort' => 'price',
'data_residency' => 'ru',
'max_price' => [
'prompt' => 10,
'completion' => 20,
'image' => 5,
'audio' => 15,
'request' => 1,
'video_per_second' => 50,
'stt_per_minute' => 5,
'tts_per_million_characters' => 1500
]
]
]),
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 \"emotion\": \"happy\",\n \"provider\": {\n \"require_parameters\": true,\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"data_residency\": \"ru\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1,\n \"video_per_second\": 50,\n \"stt_per_minute\": 5,\n \"tts_per_million_characters\": 1500\n }\n }\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 \"emotion\": \"happy\",\n \"provider\": {\n \"require_parameters\": true,\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"data_residency\": \"ru\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1,\n \"video_per_second\": 50,\n \"stt_per_minute\": 5,\n \"tts_per_million_characters\": 1500\n }\n }\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 \"emotion\": \"happy\",\n \"provider\": {\n \"require_parameters\": true,\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"data_residency\": \"ru\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1,\n \"video_per_second\": 50,\n \"stt_per_minute\": 5,\n \"tts_per_million_characters\": 1500\n }\n }\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": {}
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}POST Audio Speech
Синтез речи из текста (Text-to-Speech)
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",
"emotion": "happy",
"provider": {
"require_parameters": true,
"allow_fallbacks": true,
"order": [
"OpenAI",
"Anthropic"
],
"only": [
"OpenAI",
"Google"
],
"ignore": [
"DeepInfra"
],
"sort": "price",
"data_residency": "ru",
"max_price": {
"prompt": 10,
"completion": 20,
"image": 5,
"audio": 15,
"request": 1,
"video_per_second": 50,
"stt_per_minute": 5,
"tts_per_million_characters": 1500
}
}
}
'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",
"emotion": "happy",
"provider": {
"require_parameters": True,
"allow_fallbacks": True,
"order": ["OpenAI", "Anthropic"],
"only": ["OpenAI", "Google"],
"ignore": ["DeepInfra"],
"sort": "price",
"data_residency": "ru",
"max_price": {
"prompt": 10,
"completion": 20,
"image": 5,
"audio": 15,
"request": 1,
"video_per_second": 50,
"stt_per_minute": 5,
"tts_per_million_characters": 1500
}
}
}
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',
emotion: 'happy',
provider: {
require_parameters: true,
allow_fallbacks: true,
order: ['OpenAI', 'Anthropic'],
only: ['OpenAI', 'Google'],
ignore: ['DeepInfra'],
sort: 'price',
data_residency: 'ru',
max_price: {
prompt: 10,
completion: 20,
image: 5,
audio: 15,
request: 1,
video_per_second: 50,
stt_per_minute: 5,
tts_per_million_characters: 1500
}
}
})
};
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',
'emotion' => 'happy',
'provider' => [
'require_parameters' => true,
'allow_fallbacks' => true,
'order' => [
'OpenAI',
'Anthropic'
],
'only' => [
'OpenAI',
'Google'
],
'ignore' => [
'DeepInfra'
],
'sort' => 'price',
'data_residency' => 'ru',
'max_price' => [
'prompt' => 10,
'completion' => 20,
'image' => 5,
'audio' => 15,
'request' => 1,
'video_per_second' => 50,
'stt_per_minute' => 5,
'tts_per_million_characters' => 1500
]
]
]),
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 \"emotion\": \"happy\",\n \"provider\": {\n \"require_parameters\": true,\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"data_residency\": \"ru\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1,\n \"video_per_second\": 50,\n \"stt_per_minute\": 5,\n \"tts_per_million_characters\": 1500\n }\n }\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 \"emotion\": \"happy\",\n \"provider\": {\n \"require_parameters\": true,\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"data_residency\": \"ru\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1,\n \"video_per_second\": 50,\n \"stt_per_minute\": 5,\n \"tts_per_million_characters\": 1500\n }\n }\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 \"emotion\": \"happy\",\n \"provider\": {\n \"require_parameters\": true,\n \"allow_fallbacks\": true,\n \"order\": [\n \"OpenAI\",\n \"Anthropic\"\n ],\n \"only\": [\n \"OpenAI\",\n \"Google\"\n ],\n \"ignore\": [\n \"DeepInfra\"\n ],\n \"sort\": \"price\",\n \"data_residency\": \"ru\",\n \"max_price\": {\n \"prompt\": 10,\n \"completion\": 20,\n \"image\": 5,\n \"audio\": 15,\n \"request\": 1,\n \"video_per_second\": 50,\n \"stt_per_minute\": 5,\n \"tts_per_million_characters\": 1500\n }\n }\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": {}
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Недопустимое значение параметра",
"trace_id": "550e8400-e29b-41d4-a716-446655440000",
"details": {},
"metadata": {
"reason": "noProvidersForModel",
"raw": "The parameter `duration` specified in the request is not valid",
"provider_name": "alibaba"
}
},
"trace_id": "550e8400-e29b-41d4-a716-446655440000"
}/v1/audio/speech: здесь доступен полный диапазон speed (0.25–4.0) и согласованный набор параметров под каждое семейство моделей.
Те же возможности доступны и через общий Media API, но там часть параметров (speed, instructions, ElevenLabs-only поля) ведёт себя иначе или ограничена.Доступные модели
| Модель | ID | Описание |
|---|---|---|
| TTS | openai/tts-1 | OpenAI стандарт (по умолчанию) |
| TTS HD | openai/tts-1-hd | OpenAI HD |
| GPT-4o Mini TTS | openai/gpt-4o-mini-tts | OpenAI, управляемый интонацией, поддерживает instructions |
| ElevenLabs Multilingual v2 | elevenlabs/text-to-speech-multilingual-v2 | ElevenLabs многоязычный |
| ElevenLabs Turbo v2.5 | elevenlabs/text-to-speech-turbo-2-5 | ElevenLabs Turbo (единственный с language_code) |
Разрешение голоса по семействам
Параметрvoice интерпретируется Polza в зависимости от семейства модели. Передача голоса «не из своего» семейства не приводит к ошибке тихо — голос приводится к дефолту семейства:
| Семейство | Дефолт | Допустимые значения |
|---|---|---|
openai/* | alloy | alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse |
elevenlabs/* | Rachel | voice_id из аккаунта ElevenLabs (например pNInz6obpgDQGcFmaJgB) или имя пресета (Rachel, Aria, Roger, Sarah…). Стандартный OpenAI-голос будет отклонён с ошибкой 400 |
В релизе 1.6.7 на каталоге доступны OpenAI и ElevenLabs. Семейства Gemini TTS / Kokoro / MAI Voice поддержаны на уровне разрешения голоса, но включаются отдельно.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | Нет | Модель TTS (по умолчанию openai/tts-1) |
input | string | Да | Текст для озвучки, до 5000 символов |
voice | string | Да | Имя голоса (см. таблицу выше) |
response_format | enum | Нет | mp3 (по умолчанию), opus, aac, flac, wav, pcm |
speed | number | Нет | Скорость речи, 0.25–4.0 (по умолчанию 1.0). Только OpenAI-модели |
instructions | string | Нет | Голосовые инструкции, до 4096 символов. Только openai/gpt-4o-mini-tts. Не работает у tts-1/tts-1-hd |
stream_format | enum | Нет | sse или audio. Не поддерживается для tts-1/tts-1-hd |
user | string | Нет | Идентификатор конечного пользователя |
Параметры ElevenLabs
| Параметр | Тип | Описание |
|---|---|---|
stability | number (0–1) | Стабильность голоса (меньше = экспрессивнее) |
similarity_boost | number (0–1) | Схожесть с оригинальным голосом |
style | number (0–1) | Эмоциональность |
timestamps | boolean | Посимвольный alignment в ответе (characters, character_start_times_seconds, character_end_times_seconds) |
previous_text | string | Текст перед текущим фрагментом (контекст), до 5000 символов |
next_text | string | Текст после текущего фрагмента (контекст), до 5000 символов |
language_code | string | ISO-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
}
}
| Поле | Тип | Описание |
|---|---|---|
audio | string | Аудио в формате base64-строки (не бинарный поток) — декодируйте и сохраняйте с расширением по contentType |
contentType | string | MIME-тип (например, audio/mpeg, audio/wav, audio/ogg) |
model | string | Использованная модель |
duration | number | Длительность в секундах, если известна |
usage | object | Использование: characters (для посимвольных моделей), cost_rub, cost |
alignment | object | Посимвольные тайминги (только 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]
}
}
Генерация звуковых эффектов
Также доступна генерация звуков по текстовому описанию через тот же эндпоинт.Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | Да | Модель генерации звуков |
input | string | Да | Описание звука на английском |
duration_seconds | number | Нет | Длительность (0.5-10 сек) |
loop | boolean | Нет | Зацикленность |
output_format | string | Нет | Формат аудио |
prompt_influence | number | Нет | Влияние промпта |
Форматы вывода
mp3_22050_32— MP3 22050Hz 32kbpsmp3_44100_32— MP3 22050Hz 32kbpsmp3_44100_64— MP3 44100Hz 64kbpsmp3_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
}'
Авторизации
API ключ передаётся в заголовке: Authorization: Bearer <POLZA_AI_API_KEY>
Тело
Текст для озвучивания (максимум 5000 символов)
5000"Привет! Это тестовое сообщение."
Голос для генерации речи. Допустимые значения зависят от модели: OpenAI (alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), ElevenLabs (Rachel, Aria, Roger, Sarah и др.)
"alloy"
ID модели для генерации речи
"tts-1"
Инструкции для управления характеристиками голоса. Поддерживается только для gpt-4o-mini-tts, не работает с tts-1 и tts-1-hd
4096"Говори медленно и выразительно"
Формат выходного аудио
mp3, opus, aac, flac, wav, pcm Скорость генерации речи (0.25 - 4.0)
0.25 <= x <= 41
Формат потоковой передачи аудио. Не поддерживается для tts-1 и tts-1-hd
sse, audio Уникальный идентификатор конечного пользователя для отслеживания и предотвращения злоупотреблений
"user-123"
Стабильность голоса (0-1). Только для ElevenLabs
0 <= x <= 10.5
Усиление схожести голоса (0-1). Только для ElevenLabs
0 <= x <= 10.75
Экспрессия стиля (0-1). Только для ElevenLabs
0 <= x <= 10
Возвращать временные метки для каждого слова. Только для ElevenLabs
false
Предшествующий текст для улучшения непрерывности речи при конкатенации. Только для ElevenLabs
5000Последующий текст для улучшения непрерывности речи при конкатенации. Только для ElevenLabs
5000Код языка ISO 639-1. Для ElevenLabs Turbo v2.5 и MiniMax Speech
10"ru"
Эмоциональная окраска речи. Только для MiniMax Speech (neutral, happy, sad, angry, fearful, disgusted, surprised)
20"happy"
Настройки выбора провайдера. В multipart-форме — JSON-строкой
Show child attributes
Show child attributes
Ответ
Base64-encoded аудио данные
"SUQzBAAAAAAAI1RTU0UAAA..."
Content-Type аудио
"audio/mpeg"
ID использованной модели
"tts-1"
Длительность аудио в секундах (если известна)
5.2
Информация об использовании
{
"characters": 100,
"cost": 0.01,
"cost_rub": 0.01
}
Временные метки символов (при timestamps: true, ElevenLabs)
Была ли эта страница полезной?