Озвучивает текст готовыми голосами на 15 языках, включая русский, с выбором между более естественной и более быстрой моделью. Цена зависит от модели: Max - 10 ₽ за 1000 символов, Mini - 6 ₽ за 1000 символов.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Inworld TTS 1.5 озвучивает текст готовыми голосами на 15 языках, в том числе на русском. Её используют для закадрового голоса в роликах, аудиоверсий статей и уроков, голосовых меню и объявлений, озвучки персонажей.
В одной нейросети две модели: Max звучит естественнее и выразительнее, Mini стоит дешевле и подходит для больших объёмов текста. Голоса у обеих моделей одинаковые: 65 голосов, каждый говорит на своём языке.
Каждый вызов создаёт асинхронную операцию: вы получаете id, а готовый MP3 забираете отдельным запросом статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режим один - озвучка текста. Модель выбирается полем model: max или mini.
{
"tool": "inworld-1-5",
"input": {
"...": "..."
}
}
tool - slug нейросети, здесь всегда "inworld-1-5".input - параметры конкретного запуска.input, без дополнительного вложенного объекта input.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | enum | Нет | Модель: max - звучит естественнее и выразительнее, mini - дешевле. Если не передать, используется max. |
text | string | Да | Текст для озвучки, от 1 до 2000 символов. Пишите на том языке, который указали в language. |
language | enum | Нет | Язык текста: ru (русский), en (английский), zh (китайский), ja (японский), ko (корейский), fr (французский), de (немецкий), es (испанский), pt (португальский), it (итальянский), nl (нидерландский), pl (польский), hi (хинди), he (иврит), ar (арабский). От языка зависит, какие голоса можно выбрать. Если не передать, используется ru. |
voice | enum | Нет | Готовый голос. Он должен относиться к выбранному языку - таблица голосов ниже. Если не передать, используется Nikolai. |
use_advanced | boolean | Нет | Включает ручные настройки speaking_rate и temperature. Без true эти поля не применяются. |
speaking_rate | number | Нет | Скорость речи от 0.5 до 1.5. 1 - обычная скорость. Работает только вместе с use_advanced: true. |
temperature | number | Нет | Выразительность от 0.7 до 1.5. 1 - обычная подача, меньше - ровнее и предсказуемее, больше - живее и разнообразнее. Работает только вместе с use_advanced: true. |
language | Язык | Голоса (voice - имя на сайте) |
|---|---|---|
ru | Русский | Svetlana - Светлана, Elena - Елена, Dmitry - Дмитрий, Nikolai - Николай |
en | Английский | Alex - Алекс, Ashley - Эшли, Craig - Крейг, Deborah - Дебора, Dennis - Деннис, Edward - Эдвард, Elizabeth - Элизабет, Hades - Аид, Julia - Джулия, Pixie - Пикси, Mark - Марк, Olivia - Оливия, Priya - Прия, Ronald - Рональд, Sarah - Сара, Shaun - Шон, Theodore - Теодор, Timothy - Тимоти, Wendy - Венди, Dominus - Доминус, Hana - Хана, Clive - Клайв, Carter - Картер, Blake - Блейк, Luna - Луна |
zh | Китайский | Yichen - Ичэнь, Xiaoyin - Сяоинь, Xinyi - Синьи, Jing - Цзин |
ja | Японский | Asuka - Асука, Satoshi - Сатоси |
ko | Корейский | Hyunwoo - Хёну, Minji - Минджи, Seojun - Соджун, Yoona - Юна |
fr | Французский | Alain - Ален, Hélène - Элен, Mathieu - Матьё, Étienne - Этьен |
de | Немецкий | Johanna - Йоханна, Josef - Йозеф |
es | Испанский | Diego - Диего, Lupita - Лупита, Miguel - Мигель, Rafael - Рафаэль |
pt | Португальский | Heitor - Эйтор, Maitê - Майте |
it | Итальянский | Gianni - Джанни, Orietta - Ориетта |
nl | Нидерландский | Erik - Эрик, Katrien - Катрин, Lennart - Леннарт, Lore - Лоре |
pl | Польский | Szymon - Шимон, Wojciech - Войцех |
hi | Хинди | Riya - Рия, Manoj - Манодж |
he | Иврит | Yael - Яэль, Oren - Орен |
ar | Арабский | Nour - Нур, Omar - Омар |
Послушать каждый голос можно на странице нейросети в форме сайта: у кнопки голоса есть пример звучания.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "inworld-1-5",
"input": {
"model": "max",
"text": "Добрый вечер! Сегодня я расскажу вам короткую историю о старом маяке, который стоял на краю холодного северного моря.",
"language": "ru",
"voice": "Nikolai"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'inworld-1-5',
input: {
model: 'max',
text: 'Добрый вечер! Сегодня я расскажу вам короткую историю о старом маяке, который стоял на краю холодного северного моря.',
language: 'ru',
voice: 'Nikolai',
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'inworld-1-5',
'input': {
'model': 'max',
'text': 'Добрый вечер! Сегодня я расскажу вам короткую историю о старом маяке, который стоял на краю холодного северного моря.',
'language': 'ru',
'voice': 'Nikolai',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Та же задача дешевле: model: "mini", голос Elena.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "inworld-1-5",
"input": {
"model": "mini",
"text": "Добрый вечер! Сегодня я расскажу вам короткую историю о старом маяке, который стоял на краю холодного северного моря.",
"language": "ru",
"voice": "Elena"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'inworld-1-5',
input: {
model: 'mini',
text: 'Добрый вечер! Сегодня я расскажу вам короткую историю о старом маяке, который стоял на краю холодного северного моря.',
language: 'ru',
voice: 'Elena',
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'inworld-1-5',
'input': {
'model': 'mini',
'text': 'Добрый вечер! Сегодня я расскажу вам короткую историю о старом маяке, который стоял на краю холодного северного моря.',
'language': 'ru',
'voice': 'Elena',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Английский текст читает голос Olivia. use_advanced включает ручную скорость и выразительность.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "inworld-1-5",
"input": {
"model": "max",
"text": "Welcome to our store! Today we have a special offer on all winter jackets.",
"language": "en",
"voice": "Olivia",
"use_advanced": true,
"speaking_rate": 0.9,
"temperature": 1.2
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'inworld-1-5',
input: {
model: 'max',
text: 'Welcome to our store! Today we have a special offer on all winter jackets.',
language: 'en',
voice: 'Olivia',
use_advanced: true,
speaking_rate: 0.9,
temperature: 1.2,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'inworld-1-5',
'input': {
'model': 'max',
'text': 'Welcome to our store! Today we have a special offer on all winter jackets.',
'language': 'en',
'voice': 'Olivia',
'use_advanced': True,
'speaking_rate': 0.9,
'temperature': 1.2,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "inworld-1-5",
"cost": 1.17,
"balance_after": 498.83,
"created_at": "2026-09-24T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "inworld-1-5",
"cost": 1.17,
"created_at": "2026-09-24T12:00:00Z",
"completed_at": "2026-09-24T12:00:10Z",
"result": {
"type": "audio",
"urls": [
"https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790254401468-speech.mp3"
],
"files": [
{
"url": "https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790254401468-speech.mp3",
"name": "result"
}
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "inworld-1-5",
"cost": 1.17,
"created_at": "2026-09-24T12:00:00Z",
"completed_at": "2026-09-24T12:00:09Z",
"result": null,
"error_message": "Сервис временно перегружен. Пожалуйста, попробуйте повторить запрос позже."
}
Такой ответ бывает, когда одновременно отправлено слишком много запросов. Деньги за операцию с ошибкой возвращаются на баланс, запрос можно повторить чуть позже.
После создания операции сохраните id и проверяйте её статус запросом:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const response = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
}
)
const data = await response.json()
Пока озвучка создаётся, status будет queued или processing. Опрашивайте статус раз в 3-5 секунд, не чаще одного раза в секунду.
После успешного завершения result содержит один аудиофайл MP3 (48 кГц, моно):
type всегда равен "audio";urls содержит одну ссылку на MP3;files дублирует ту же ссылку с именем файла.Длительность файла зависит от длины текста и скорости речи: 150 символов русского текста звучат примерно 10 секунд, 2000 символов - около 2,5 минуты.
Расчёт посимвольно, цена зависит только от модели и длины текста:
model | Цена | 1 символ | 150 символов | 1000 символов | 2000 символов |
|---|---|---|---|---|---|
max | 10 ₽ за 1000 символов | 0,01 ₽ | 1,50 ₽ | 10 ₽ | 20 ₽ |
mini | 6 ₽ за 1000 символов | 0,006 ₽ | 0,90 ₽ | 6 ₽ | 12 ₽ |
text, включая пробелы и знаки препинания. Итог округляется вверх до копейки.cost. Если операция завершилась с ошибкой, деньги возвращаются на баланс автоматически.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги.queued проверяйте статус по id.Nikolai работает только с ru, а Dennis - только с en. Несовместимая пара вернёт validation_error ещё до создания операции.language и voice, текст длиннее 2000 символов и speaking_rate или temperature вне допустимого диапазона тоже вернут validation_error.temperature и speaking_rate или выбором голоса.mini, а финальную версию озвучить на max.