Озвучивает текст естественным голосом - одним диктором или как диалог двух собеседников с разными голосами. Цена - от 0,20 ₽ за озвучку, дальше 0,04 ₽ за каждые 10 символов.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Gemini 2.5 Flash TTS озвучивает текст на русском и ещё 23 языках. Её используют для закадрового голоса к роликам и презентациям, озвучки уроков и инструкций, рекламных объявлений, аудиоверсий статей и коротких диалогов для подкастов и сценок.
Модель работает в двух режимах: весь текст читает один голос или два собеседника разыгрывают диалог разными голосами в одном файле. На выбор 30 готовых голосов, а манеру речи - тон, эмоцию, темп - можно описать словами. Каждый вызов создаёт асинхронную операцию: вы получаете id, а готовый MP3 забираете отдельным запросом статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режимы задаются полем generation_type:
single - один голос читает весь текст;dialogue - диалог двух собеседников, у каждого свой голос.{
"tool": "gemini-2-5-flash-tts",
"input": {
"...": "..."
}
}
tool - slug нейросети, здесь всегда "gemini-2-5-flash-tts".input - параметры конкретного запуска.input, без дополнительного вложенного объекта input.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Нет | Режим: single (один голос) или dialogue (диалог двух собеседников). Если не передать, используется single. |
text | string | Да | Текст для озвучки, от 1 до 4000 символов. В режиме dialogue каждая реплика начинается с имени собеседника и двоеточия, например Анна: Привет!. Реплики разделяйте переносом строки. |
language | enum | Нет | Язык текста, от него зависит произношение. Если не передать, используется Russian (Russia). Варианты: Russian (Russia) (русский), English (United States) (английский (США)), English (India) (английский (Индия)), Arabic (Egypt) (арабский (Египет)), Bangla (Bangladesh) (бенгальский), Vietnamese (Vietnam) (вьетнамский), Indonesian (Indonesia) (индонезийский), Spanish (Spain) (испанский), Italian (Italy) (итальянский), Korean (South Korea) (корейский), Marathi (India) (маратхи), German (Germany) (немецкий), Dutch (Netherlands) (нидерландский), Polish (Poland) (польский), Portuguese (Brazil) (португальский (Бразилия)), Romanian (Romania) (румынский), Thai (Thailand) (тайский), Tamil (India) (тамильский), Telugu (India) (телугу), Turkish (Turkey) (турецкий), Ukrainian (Ukraine) (украинский), French (France) (французский), Hindi (India) (хинди), Japanese (Japan) (японский). |
voice | enum | Нет | Голос для режима single. Если не передать, используется Kore. Список голосов - ниже. |
speaker_1 | string | Нет | Имя первого собеседника в режиме dialogue, до 30 символов. Должно совпадать с подписью его реплик в text. Если не передать, используется Анна. |
voice_1 | enum | Нет | Голос первого собеседника в режиме dialogue. Если не передать, используется Kore. |
speaker_2 | string | Нет | Имя второго собеседника в режиме dialogue, до 30 символов. Должно совпадать с подписью его реплик в text. Если не передать, используется Олег. |
voice_2 | enum | Нет | Голос второго собеседника в режиме dialogue. Если не передать, используется Puck. |
style_instruction | string | Нет | Манера речи словами: тон, эмоция, темп. До 300 символов, работает в обоих режимах. Само указание не озвучивается. Например: Спокойно и тепло, чуть медленнее. |
voice_gender | enum | Нет | Фильтр голосов: all (все), female (женские), male (мужские). Если не передать, используется all. Если передать female или male, выбранные голоса должны быть этого пола, иначе запрос вернёт validation_error. Обычно поле передавать не нужно. |
Одни и те же 30 голосов работают на всех языках. Послушать каждый голос можно на странице нейросети в форме сайта: у кнопки голоса есть пример звучания.
voice | Голос |
|---|---|
Achernar | женский |
Achird | мужской |
Algenib | мужской |
Algieba | мужской |
Alnilam | мужской |
Aoede | женский |
Autonoe | женский |
Callirrhoe | женский |
Charon | мужской |
Despina | женский |
Enceladus | мужской |
Erinome | женский |
Fenrir | мужской |
Gacrux | женский |
Iapetus | мужской |
Kore | женский |
Laomedeia | женский |
Leda | женский |
Orus | мужской |
Puck | мужской |
Pulcherrima | женский |
Rasalgethi | мужской |
Sadachbia | мужской |
Sadaltager | мужской |
Schedar | мужской |
Sulafat | женский |
Umbriel | мужской |
Vindemiatrix | женский |
Zephyr | женский |
Zubenelgenubi | мужской |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-2-5-flash-tts",
"input": {
"text": "Добрый день! Сегодня расскажу, как быстро приготовить вкусный завтрак: омлет с помидорами, зеленью и сыром. Понадобится всего десять минут.",
"language": "Russian (Russia)",
"voice": "Kore"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-2-5-flash-tts',
input: {
"text": "Добрый день! Сегодня расскажу, как быстро приготовить вкусный завтрак: омлет с помидорами, зеленью и сыром. Понадобится всего десять минут.",
"language": "Russian (Russia)",
"voice": "Kore"
},
}),
})
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': 'gemini-2-5-flash-tts',
'input': {
"text": "Добрый день! Сегодня расскажу, как быстро приготовить вкусный завтрак: омлет с помидорами, зеленью и сыром. Понадобится всего десять минут.",
"language": "Russian (Russia)",
"voice": "Kore"
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Имена в speaker_1 и speaker_2 совпадают с подписями реплик в тексте. Сами имена не озвучиваются: модель по ним понимает, какой голос читает реплику.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-2-5-flash-tts",
"input": {
"generation_type": "dialogue",
"text": "Анна: Олег, привет! Ты уже слышал новости про наш проект?\nОлег: Привет, Анна! Нет, а что случилось?\nАнна: Нам одобрили грант, представляешь?\nОлег: Вот это да! Поздравляю!",
"language": "Russian (Russia)",
"speaker_1": "Анна",
"voice_1": "Kore",
"speaker_2": "Олег",
"voice_2": "Puck"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-2-5-flash-tts',
input: {
"generation_type": "dialogue",
"text": "Анна: Олег, привет! Ты уже слышал новости про наш проект?\nОлег: Привет, Анна! Нет, а что случилось?\nАнна: Нам одобрили грант, представляешь?\nОлег: Вот это да! Поздравляю!",
"language": "Russian (Russia)",
"speaker_1": "Анна",
"voice_1": "Kore",
"speaker_2": "Олег",
"voice_2": "Puck"
},
}),
})
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': 'gemini-2-5-flash-tts',
'input': {
"generation_type": "dialogue",
"text": "Анна: Олег, привет! Ты уже слышал новости про наш проект?\nОлег: Привет, Анна! Нет, а что случилось?\nАнна: Нам одобрили грант, представляешь?\nОлег: Вот это да! Поздравляю!",
"language": "Russian (Russia)",
"speaker_1": "Анна",
"voice_1": "Kore",
"speaker_2": "Олег",
"voice_2": "Puck"
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Поле style_instruction подсказывает модели, как прочитать текст. Здесь рекламное объявление читается энергично, как на радио.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-2-5-flash-tts",
"input": {
"text": "Внимание! Только до конца недели - скидка двадцать процентов на все зимние куртки. Успейте купить подарок себе и близким!",
"language": "Russian (Russia)",
"voice": "Puck",
"style_instruction": "Энергично и радостно, как ведущий на радио"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-2-5-flash-tts',
input: {
"text": "Внимание! Только до конца недели - скидка двадцать процентов на все зимние куртки. Успейте купить подарок себе и близким!",
"language": "Russian (Russia)",
"voice": "Puck",
"style_instruction": "Энергично и радостно, как ведущий на радио"
},
}),
})
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': 'gemini-2-5-flash-tts',
'input': {
"text": "Внимание! Только до конца недели - скидка двадцать процентов на все зимние куртки. Успейте купить подарок себе и близким!",
"language": "Russian (Russia)",
"voice": "Puck",
"style_instruction": "Энергично и радостно, как ведущий на радио"
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "gemini-2-5-flash-tts",
"cost": 2,
"balance_after": 498,
"created_at": "2026-09-24T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gemini-2-5-flash-tts",
"cost": 2,
"created_at": "2026-09-24T12:00:00Z",
"completed_at": "2026-09-24T12:00:17Z",
"result": {
"type": "audio",
"urls": [
"https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790255763762-speech.mp3"
],
"files": [
{
"url": "https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790255763762-speech.mp3",
"name": "result"
}
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "gemini-2-5-flash-tts",
"cost": 2,
"created_at": "2026-09-24T12:00:00Z",
"completed_at": "2026-09-24T12:00:15Z",
"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. Опрашивайте статус раз в 5-10 секунд.
После успешного завершения result содержит один аудиофайл MP3 (моно, 24 кГц):
type всегда равен "audio";urls содержит одну ссылку на MP3;files дублирует ту же ссылку с именем файла.В режиме dialogue обе роли звучат в одном файле. Длительность зависит от длины текста и манеры речи: 140 символов русского текста в обычном темпе звучат примерно 10 секунд.
text, включая пробелы, знаки препинания и имена собеседников в репликах. style_instruction, speaker_1, speaker_2, голос, язык и режим на цену не влияют.cost. Если операция завершилась с ошибкой, деньги возвращаются на баланс автоматически.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги.queued проверяйте статус по id.language и голосов, а также несовпадение голоса с voice_gender вернут validation_error ещё до создания операции. Длинный текст разбейте на части и озвучьте несколькими запросами.language язык, на котором написан текст: так произношение будет точнее.dialogue собеседников всегда двое. Подписывайте каждую реплику ровно тем именем, которое передали в speaker_1 или speaker_2, иначе модель может перепутать голоса.style_instruction, а не пометками внутри текста.