Озвучивает текст готовым голосом, создаёт голос по словесному описанию или клонирует голос по короткой записи. Цена - 10 ₽ за 1000 символов текста.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Qwen3 TTS озвучивает текст на русском и ещё 9 языках. Голос можно задать тремя способами: выбрать один из 9 готовых голосов, описать нужный голос словами или передать короткую запись, и модель прочитает текст этим голосом.
Типичные задачи: закадровый голос для ролика или презентации, озвучка статьи или урока, реплики персонажа с особым голосом, поздравление голосом конкретного человека (с его согласия).
Каждый вызов создаёт асинхронную операцию: вы получаете id, а готовый MP3 забираете отдельным запросом статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Сценарии, которые поддерживает модель:
generation_type: "preset" - готовый голос из списка (voice), при желании с подсказкой о манере речи (style_instruction).generation_type: "design" - голос по текстовому описанию (voice_description).generation_type: "clone" - голос из вашей записи (audio).{
"tool": "qwen3-tts",
"input": {
"...": "..."
}
}
tool - slug нейросети, здесь всегда "qwen3-tts".input - параметры конкретного запуска.input, без дополнительного вложенного объекта input.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Нет | Сценарий: preset (готовый голос, используется, если поле не передано), design (голос по описанию) или clone (голос из записи). |
text | string | Да | Текст для озвучки, от 1 до 5000 символов. Модель читает его целиком, поэтому пишите только то, что должно прозвучать. |
language | enum | Нет | Язык текста: Russian (используется, если поле не передано), auto (модель определит язык сама), English, Chinese, German, French, Spanish, Italian, Portuguese, Japanese, Korean. |
voice | enum | Нет | Только в сценарии preset. Женские голоса: Vivian (используется, если поле не передано), Serena, Ono_Anna, Sohee. Мужские: Uncle_Fu, Dylan, Eric, Ryan, Aiden. Все голоса говорят по-русски. |
style_instruction | string | Нет | Только в сценарии preset. Как произнести текст: тон, эмоция, темп. До 500 символов. Сама подсказка не озвучивается. |
voice_description | string | В сценарии design | Описание голоса: пол, возраст, тембр, настроение, манера речи. От 1 до 1000 символов. Само описание не озвучивается. |
audio | string | В сценарии clone | Ссылка на запись голоса: MP3, WAV или M4A, до 10 МБ. Лучше всего 5-15 секунд чистой речи одного человека. |
reference_text | string | Нет | Только в сценарии clone. Дословный текст того, что звучит в записи . Необязателен, но помогает модели точнее повторить голос. До 1000 символов. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "qwen3-tts",
"input": {
"generation_type": "preset",
"voice": "Serena",
"style_instruction": "Радостно и энергично, как ведущая праздника",
"text": "Всем привет! Сегодня у нас большой праздник, и я очень рада видеть каждого из вас!",
"language": "Russian"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'qwen3-tts',
input: {
generation_type: 'preset',
voice: 'Serena',
style_instruction: 'Радостно и энергично, как ведущая праздника',
text: 'Всем привет! Сегодня у нас большой праздник, и я очень рада видеть каждого из вас!',
language: 'Russian',
},
}),
})
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': 'qwen3-tts',
'input': {
'generation_type': 'preset',
'voice': 'Serena',
'style_instruction': 'Радостно и энергично, как ведущая праздника',
'text': 'Всем привет! Сегодня у нас большой праздник, и я очень рада видеть каждого из вас!',
'language': 'Russian',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Опишите голос так, как описали бы его актёру озвучки. Чем конкретнее описание, тем предсказуемее результат.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "qwen3-tts",
"input": {
"generation_type": "design",
"voice_description": "Пожилой мужчина, низкий хрипловатый голос, говорит медленно и таинственно, как рассказчик у камина",
"text": "Добрый вечер. Сегодня я расскажу вам историю о старом маяке на краю света.",
"language": "Russian"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'qwen3-tts',
input: {
generation_type: 'design',
voice_description:
'Пожилой мужчина, низкий хрипловатый голос, говорит медленно и таинственно, как рассказчик у камина',
text: 'Добрый вечер. Сегодня я расскажу вам историю о старом маяке на краю света.',
language: 'Russian',
},
}),
})
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': 'qwen3-tts',
'input': {
'generation_type': 'design',
'voice_description': 'Пожилой мужчина, низкий хрипловатый голос, говорит медленно и таинственно, как рассказчик у камина',
'text': 'Добрый вечер. Сегодня я расскажу вам историю о старом маяке на краю света.',
'language': 'Russian',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Передайте ссылку на короткую запись голоса и подтвердите право на этот голос полем voice_consent: true. Если знаете, что в записи сказано, добавьте этот текст в reference_text: так голос получается точнее.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "qwen3-tts",
"input": {
"generation_type": "clone",
"audio": "https://cdn.example.com/source-audio-1.mp3",
"reference_text": "Привет, это мой голос. Я записываю его для озвучки.",
"voice_consent": true,
"text": "Дорогие друзья, поздравляю вас с праздником! Желаю тепла, удачи и хорошего настроения.",
"language": "Russian"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'qwen3-tts',
input: {
generation_type: 'clone',
audio: 'https://cdn.example.com/source-audio-1.mp3',
reference_text: 'Привет, это мой голос. Я записываю его для озвучки.',
voice_consent: true,
text: 'Дорогие друзья, поздравляю вас с праздником! Желаю тепла, удачи и хорошего настроения.',
language: 'Russian',
},
}),
})
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': 'qwen3-tts',
'input': {
'generation_type': 'clone',
'audio': 'https://cdn.example.com/source-audio-1.mp3',
'reference_text': 'Привет, это мой голос. Я записываю его для озвучки.',
'voice_consent': True,
'text': 'Дорогие друзья, поздравляю вас с праздником! Желаю тепла, удачи и хорошего настроения.',
'language': 'Russian',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "qwen3-tts",
"cost": 10,
"balance_after": 490,
"created_at": "2026-09-24T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "qwen3-tts",
"cost": 10,
"created_at": "2026-09-24T12:00:00Z",
"completed_at": "2026-09-24T12:00:25Z",
"result": {
"type": "audio",
"urls": [
"https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790253348388-voice.mp3"
],
"files": [
{
"url": "https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790253348388-voice.mp3",
"name": "result"
}
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "qwen3-tts",
"cost": 10,
"created_at": "2026-09-24T12:00:00Z",
"completed_at": "2026-09-24T12:00:30Z",
"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 дублирует ту же ссылку с именем файла.Длительность зависит от длины текста и голоса: 170 символов русского текста звучат примерно 11-18 секунд.
text.style_instruction и reference_text на цену не влияют: считаются только символы text, включая пробелы и знаки препинания.cost. Если операция завершилась с ошибкой, деньги возвращаются на баланс автоматически.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги.queued проверяйте статус по id.audio должна быть публичным http/https URL, который открывается без авторизации.voice и style_instruction учитываются только в preset, voice_description - только в design, audio, reference_text и voice_consent - только в clone.voice_consent: true.language. auto удобен для смешанных текстов, но с явным языком произношение стабильнее.text, будет прочитано вслух.validation_error. Длинный материал разбивайте на части и склеивайте готовые файлы.audiovoice_consent | boolean | В сценарии clone | Подтверждение, что у вас есть право использовать голос из записи: свой голос или голос человека, который дал согласие. Передавайте true, без него запрос в сценарии clone отклоняется с ошибкой 400. В модель не отправляется. |