Создаёт готовые песни по описанию и тексту, включая вокал и музыкальную аранжировку. Цена - 25 ₽ за одну песню.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
MiniMax Music 3.0 пишет готовую песню с вокалом и аранжировкой. Вы передаёте описание звучания (жанр, настроение, голос, инструменты) и текст песни, а получаете MP3-файл, где этот текст спет под музыку. Подходит для джинглов, поздравлений, песен для роликов и демо-версий треков.
Что важно понимать заранее:
lyrics;Каждый вызов создаёт асинхронную операцию. Песня генерируется несколько минут, поэтому после создания нужно проверять статус по id.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режимов у нейросети нет: один запрос - одна песня. Настройки качества (bitrate, sample_rate) влияют только на файл.
{
"tool": "minimax-music-3-0",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "minimax-music-3-0".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt | string | Да | Описание песни: жанр, настроение, темп, тип вокала, инструменты, звучание. Формально от 3 до 3000 символов, но описания длиннее примерно 2000 символов модель отклоняет с ошибкой «запрос слишком длинный». Держите описание коротким и по делу. |
lyrics | string | Да | Текст песни, от 10 до 3000 символов. Строки разделяйте переносом \n, паузу делайте пустой строкой. Разметка частей вроде [Intro], [Verse], [Chorus], [Bridge], [Outro] помогает выстроить структуру. Текст внутри ##...## тоже поётся (подойдёт для эха или подголоска), поэтому инструменты и проигрыши описывайте в prompt. |
bitrate | enum | Да | Битрейт MP3. Варианты: 32000 (32 кбит/с), 60000 (60 кбит/с), 64000 (64 кбит/с), 128000 (128 кбит/с), 256000 (256 кбит/с). Чем выше, тем подробнее звук и тяжелее файл. Если не передать, будет 256000. Значение передаётся строкой. |
sample_rate | enum | Да | Частота дискретизации. Варианты: 16000 (16 кГц), 24000 (24 кГц), 32000 (32 кГц), 44100 (44,1 кГц). Для музыки обычно берут 44100. Если не передать, будет 44100. Значение передаётся строкой. |
Короткая песня из куплета и припева, максимальный битрейт и 44,1 кГц.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "minimax-music-3-0",
"input": {
"prompt": "Лёгкий инди-поп, тёплый женский вокал, акустическая гитара, спокойное летнее настроение",
"lyrics": "[Verse]\nУтро тихо входит в дом,\nСолнце пишет на стекле\n\n[Chorus]\nЛето, лето, не спеши,\nПосиди ещё со мной",
"bitrate": "256000",
"sample_rate": "44100"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-music-3-0',
input: {
prompt: 'Лёгкий инди-поп, тёплый женский вокал, акустическая гитара, спокойное летнее настроение',
lyrics: '[Verse]\nУтро тихо входит в дом,\nСолнце пишет на стекле\n\n[Chorus]\nЛето, лето, не спеши,\nПосиди ещё со мной',
bitrate: '256000',
sample_rate: '44100',
},
}),
})
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': 'minimax-music-3-0',
'input': {
'prompt': 'Лёгкий инди-поп, тёплый женский вокал, акустическая гитара, спокойное летнее настроение',
'lyrics': '[Verse]\nУтро тихо входит в дом,\nСолнце пишет на стекле\n\n[Chorus]\nЛето, лето, не спеши,\nПосиди ещё со мной',
'bitrate': '256000',
'sample_rate': '44100',
},
},
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": "minimax-music-3-0",
"input": {
"prompt": "Энергичный синти-поп, мужской вокал, яркие синтезаторы, танцевальный ритм 120 BPM",
"lyrics": "[Verse]\nГород не спит, огни горят,\nМы снова здесь, как год назад\n\n[Chorus]\nТанцуй со мной до утра,\nСегодня наша пора\n\n[Bridge]\nНе отпускай мою руку\n\n[Chorus]\nТанцуй со мной до утра,\nСегодня наша пора",
"bitrate": "128000",
"sample_rate": "32000"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'minimax-music-3-0',
input: {
prompt: 'Энергичный синти-поп, мужской вокал, яркие синтезаторы, танцевальный ритм 120 BPM',
lyrics: '[Verse]\nГород не спит, огни горят,\nМы снова здесь, как год назад\n\n[Chorus]\nТанцуй со мной до утра,\nСегодня наша пора\n\n[Bridge]\nНе отпускай мою руку\n\n[Chorus]\nТанцуй со мной до утра,\nСегодня наша пора',
bitrate: '128000',
sample_rate: '32000',
},
}),
})
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': 'minimax-music-3-0',
'input': {
'prompt': 'Энергичный синти-поп, мужской вокал, яркие синтезаторы, танцевальный ритм 120 BPM',
'lyrics': '[Verse]\nГород не спит, огни горят,\nМы снова здесь, как год назад\n\n[Chorus]\nТанцуй со мной до утра,\nСегодня наша пора\n\n[Bridge]\nНе отпускай мою руку\n\n[Chorus]\nТанцуй со мной до утра,\nСегодня наша пора',
'bitrate': '128000',
'sample_rate': '32000',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "minimax-music-3-0",
"cost": 25,
"balance_after": 475,
"created_at": "2026-09-30T12:46:26Z"
}
cost - сколько списано за операцию, в рублях.balance_after - баланс после списания.{
"id": "op_uuid-123",
"status": "completed",
"tool": "minimax-music-3-0",
"cost": 25,
"created_at": "2026-09-30T12:46:26Z",
"completed_at": "2026-09-30T12:47:56Z",
"result": {
"type": "audio",
"urls": [
"https://storage.bratuha.ru/results/minimax-music-3-0/song-1.mp3"
],
"files": [
{
"url": "https://storage.bratuha.ru/results/minimax-music-3-0/song-1.mp3",
"name": "result"
}
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "minimax-music-3-0",
"cost": 25,
"created_at": "2026-09-30T12:46:26Z",
"completed_at": "2026-09-30T12:46:37Z",
"result": null,
"error_message": "Ваш запрос слишком длинный. Пожалуйста, сократите его и попробуйте снова."
}
Сохраните id из ответа на создание и запрашивайте статус операции по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForSong(id) {
while (true) {
const response = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await response.json()
if (operation.status === 'completed' || operation.status === 'failed') {
return operation
}
await new Promise((resolve) => setTimeout(resolve, 10000))
}
}
Статус операции:
queued - операция создана и ждёт запуска;processing - песня генерируется;completed - готово, ссылка лежит в result;failed - не получилось, причина в error_message.Песня обычно готова за 1,5-4 минуты. Проверять статус раз в 10 секунд вполне достаточно, чаще раза в секунду для одной операции нельзя - придёт 429.
После завершения в result приходит один MP3-файл:
{
"type": "audio",
"urls": [
"https://storage.bratuha.ru/results/minimax-music-3-0/song-1.mp3"
],
"files": [
{
"url": "https://storage.bratuha.ru/results/minimax-music-3-0/song-1.mp3",
"name": "result"
}
]
}
type - всегда "audio".urls - массив из одной ссылки на готовую песню.files - та же ссылка в виде объекта с url и name. Можно брать ссылку из любого из двух полей.Файл стерео, в выбранных bitrate и sample_rate. Для ориентира: текст из четырёх строк с разметкой [Verse] и [Chorus] дал песню длиной около минуты.
Цена фиксированная - 25 ₽ за одну песню.
| Что меняется | Влияет на цену |
|---|---|
| Длина текста и описания | Нет |
bitrate | Нет |
sample_rate | Нет |
Сумма приходит в поле cost ответа на создание операции и сразу списывается с баланса.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает 25 ₽. Не повторяйте запрос автоматически при обрыве связи.queued, результат нужно забирать запросом статуса по id.prompt. API принимает до 3000 символов, но на практике безопасно до 2000. Подробный сюжет и строки песни переносите в lyrics, а в prompt оставляйте только звучание.lyrics как есть. Проверьте опечатки заранее: слово, написанное с ошибкой, так и прозвучит.bitrate и sample_rate передаются строками ("256000", "44100"), а не числами.