Сгенерировать музыку
https://api.souz.ai/v1/audio/generationsТрек по описанию — с текстом песни, который напишет модель, со своим текстом (lyrics)
или без вокала (instrumental). Ждёт результат и отвечает 200 с завершённой задачей:
звук — в data[], у моделей, которые за один запрос дают два варианта трека, — оба, по
порядку. Не успело за 9 минут или прислан Prefer: respond-async — 202 с задачей в
работе.
Задача, провалившаяся во время ожидания, отвечает статусом по причине (400
invalid_input/content_policy/capability_mismatch, 502 generation_failed или
unknown_error, 503 model_unavailable) и телом — объектом задачи с error.
Авторизация
BearerAuthAPI-ключ из кабинета souz.ai — запускает модели. Ключ управления здесь не подходит: 403 forbidden с detail[].reason: requires_api_key.
Заголовки
PreferstringRFC 7240. Понимаем respond-async — не ждать результат, сразу ответить 202 с
задачей; остальные предпочтения игнорируются. Долгим моделям — вместе с
Idempotency-Key и вебхуком (callback_url): ответ всегда 202, один путь кода.
"respond-async"Idempotency-KeystringСтрока до 255 символов, уникальная для аккаунта. Повтор с тем же ключом и параметрами
возвращает ту же задачу с текущим статусом без новой задачи и повторного списания,
в том числе при одновременных запросах, даже если настройки аккаунта за это время
изменились: сравниваются только поля запроса. Другие параметры — 409 idempotency_key_conflict;
store и callback_url в сравнение не входят. У изображений, видео и музыки
также не сравнивается response_format; у синтеза речи формат звука сравнивается.
Ключ хранится вместе с задачей, сейчас без ограничения срока.
Повтор задачи со статусом failed не запускает её заново: для новой попытки нужен новый ключ.
Срок хранения файлов результата — retention.files_days из GET /v1/key; повтор его не продлевает.
Поддерживается для генерации изображений, видео и музыки, транскрибации, синтеза речи и
чата. У чата сравнивается тело запроса целиком; повтор дожидается идущего вызова и
получает тот же ответ (и поток), что первый; ответ хранится сутки.
255Тело запроса обязательно
application/jsonactionstringДействие с музыкой или звуком; без поля — создание музыки.
generate, sounds, cover, extend, add_vocals, add_instrumental, mashup, replace_section, separate_vocals, split_stems, isolate_stem, wav, midi, video, cover_image, lyrics, boost_style, timestamps, persona, voice_validate, voice_generate, voice_regenerate, voice_checkaudio_weightnumberВлияние аудиоэлементов; доступно и при создании в custom_mode.
01authorstringАвтор.
callback_urlstring · uriКуда прислать вебхук — https на публичный хост; без поля — адрес по умолчанию из настроек аккаунта.
continue_atnumberС какой секунды продолжить исходный трек.
0.01custom_modebooleanСоздание по своему стилю и тексту; для инструментала текст не нужен.
descriptionstringОписание.
domain_namestringПодпись сайта.
duration_secondsintegerЖелаемая длительность в режиме своего текста или стиля.
10360end_secondsnumberКонец фрагмента.
full_lyricsstringПолный текст после замены.
grab_lyricsbooleanСохранить текст звука.
instrumentalboolean | nullТрек без вокала.
languagestringЯзык проверки голоса.
lyricsstringТекст песни — модель споёт его как написан; разделы размечаются [Verse], [Chorus],
[Bridge]. Без поля текст пишет модель. Вместе с instrumental не присылается.
max_price_multiplierMaxPriceMultiplier | nullmodelstringобязательно"suno-v6"namestringИмя.
negative_tagsstringКакие стили и элементы исключить.
200persona_idstringID задачи Союза, создавшей персону или голос.
persona_modelstringТип сохранённой персоны.
style_persona, voice_personapromptstringОписание трека: жанр, настроение, инструменты, темп, голос. Язык текста песни, который напишет модель, — язык описания. В custom_mode и при lyrics это музыкальный стиль.
reference_audioarray[string]Входные аудиофайлы — ссылки https или идентификаторы загруженных файлов.
2routingRoutingrouting_optionsRoutingOptions | nullsinger_skill_levelstringУровень вокала.
sound_keystringТональность звука из схемы параметров модели.
sound_loopbooleanЗацикленный звук.
sound_tempointegerТемп звука в ударах в минуту.
1300source_filestringID аудиофайла из data исходной задачи.
source_jobstringID готовой задачи Союза, принадлежащей вашему аккаунту.
start_secondsnumberНачало фрагмента.
stem_namestringДорожка или инструмент.
storeboolean | nullfalse — запрос без хранения: тексты запроса и ответа не сохраняются; файлы живут обычный срок. По умолчанию тексты хранятся; true не отменяет режим без хранения аккаунта.
style_weightnumberТочность следования стилю.
01titlestringНазвание в режиме своего текста или стиля и при переработке аудио. Без него — первая строка текста песни или описания. В простом режиме название выбирает модель.
userstringПоле OpenAI (id конечного пользователя); принимается, ни на что не влияет и не хранится.
versionstringВерсия модели из её схемы параметров.
vocal_genderstringПредпочтительный вокал; результат не гарантирован.
m, fweirdnessnumberСтепень экспериментальности.
01Ответы
200Задача завершена, результат в `data`.
application/jsonactionstringВыполненное действие с аудио.
channelChannelId | nullФактический цвет канала запроса: при успехе — канал, который выполнил запрос; пока
запрос идёт — канал, которому он уже отправлен; при ошибке — последний вызванный канал.
null — запрос ещё не отправлялся ни одному каналу или запись старше каналов.
Название и HEX цвета — GET /v1/channels.
completed_atstring | null · date-timeобязательноКогда задача завершилась; null, пока идёт.
createdinteger · int64обязательноТо же время, что created_at, в unix-секундах — как created у OpenAI.
created_atstring · date-timeобязательноФайлы результата; data[0] — сам результат. У музыкальной модели, которая за запрос даёт
два варианта трека, оба — role: result, по порядку. Пустой, пока задача не завершена, и
у чата.
durationnumber | null · doubleТранскрибация — длительность звука в секундах.
Почему задача не удалась; null, если не провалилась.
idstringобязательноjob_…; у чата — chatcmpl-… из его ответа.
"job_1a2b3c4d5e6f"languageLanguageCode | nullТранскрибация — язык записи, код ISO 639-1 (ru, en) у любой модели: названный
моделью или, если она его не назвала, из подсказки language запроса. Язык неизвестен
— поля нет.
Потолок цены, с которым задача принята: из запроса или из настроек аккаунта на момент
приёма. null — без потолка.
modelstringобязательно"nano-banana-pro"model_versionstringВерсия музыкальной модели; используйте её при продолжении исходного трека.
objectstringобязательно"job"persona_idstringID этой задачи для повторного использования созданной персоны.
priceinteger | null · int64обязательноИтог в микроединицах currency — фактический объём × цены сработавшего канала
на момент приёма; null, пока задача не завершена. У проваленной — 0.
0resultMusicResultНастройки каналов, с которыми задача принята: из запроса или из настроек аккаунта на
момент приёма. null — каналы выбирает Авто-роутинг.
segmentsarray[TranscriptionSegment]Транскрибация, verbose_json у модели с таймкодами — фразы: предложение или отрезок
речи до паузы в секунду и дольше, не длиннее 30 с. Начало фразы — начало её первого
слова, конец — конец последнего; одинаково у всех моделей.
textstring | nullТранскрибация — расшифровка; у остальных задач поля нет.
Объём выполненного — токены, символы, секунды; null, где мерить нечего.
voice_idstringID этой задачи для повторного использования созданного голоса.
webhookJobWebhookwordsarray[TranscriptionWord]Транскрибация — слова с таймкодами, если запрошена детализация по словам.
202Задача принята и выполняется.
application/jsonactionstringВыполненное действие с аудио.
channelChannelId | nullФактический цвет канала запроса: при успехе — канал, который выполнил запрос; пока
запрос идёт — канал, которому он уже отправлен; при ошибке — последний вызванный канал.
null — запрос ещё не отправлялся ни одному каналу или запись старше каналов.
Название и HEX цвета — GET /v1/channels.
completed_atstring | null · date-timeобязательноКогда задача завершилась; null, пока идёт.
createdinteger · int64обязательноТо же время, что created_at, в unix-секундах — как created у OpenAI.
created_atstring · date-timeобязательноФайлы результата; data[0] — сам результат. У музыкальной модели, которая за запрос даёт
два варианта трека, оба — role: result, по порядку. Пустой, пока задача не завершена, и
у чата.
durationnumber | null · doubleТранскрибация — длительность звука в секундах.
Почему задача не удалась; null, если не провалилась.
idstringобязательноjob_…; у чата — chatcmpl-… из его ответа.
"job_1a2b3c4d5e6f"languageLanguageCode | nullТранскрибация — язык записи, код ISO 639-1 (ru, en) у любой модели: названный
моделью или, если она его не назвала, из подсказки language запроса. Язык неизвестен
— поля нет.
Потолок цены, с которым задача принята: из запроса или из настроек аккаунта на момент
приёма. null — без потолка.
modelstringобязательно"nano-banana-pro"model_versionstringВерсия музыкальной модели; используйте её при продолжении исходного трека.
objectstringобязательно"job"persona_idstringID этой задачи для повторного использования созданной персоны.
priceinteger | null · int64обязательноИтог в микроединицах currency — фактический объём × цены сработавшего канала
на момент приёма; null, пока задача не завершена. У проваленной — 0.
0resultMusicResultНастройки каналов, с которыми задача принята: из запроса или из настроек аккаунта на
момент приёма. null — каналы выбирает Авто-роутинг.
segmentsarray[TranscriptionSegment]Транскрибация, verbose_json у модели с таймкодами — фразы: предложение или отрезок
речи до паузы в секунду и дольше, не длиннее 30 с. Начало фразы — начало её первого
слова, конец — конец последнего; одинаково у всех моделей.
textstring | nullТранскрибация — расшифровка; у остальных задач поля нет.
Объём выполненного — токены, символы, секунды; null, где мерить нечего.
voice_idstringID этой задачи для повторного использования созданного голоса.
webhookJobWebhookwordsarray[TranscriptionWord]Транскрибация — слова с таймкодами, если запрошена детализация по словам.
400Запрос не принят — `Error`; задача провалилась во время ожидания — объект задачи с
401Нет ключа или ключ недействителен.
application/json402Баланса не хватает на самый дешёвый канал с учётом запросов, которые ещё
Баланса не хватает на самый дешёвый канал с учётом запросов, которые ещё
выполняются (insufficient_balance), или исчерпан лимит трат ключа
(key_spend_limit_exceeded) либо участника, которому он выдан
(member_spend_limit_exceeded). Повтор не поможет, пока баланс не пополнят, а лимит не
начнётся заново или его не поднимут: потолок ключа со spend_limit_reset: none — на
всё время ключа.
application/json403Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли
Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли
участника нет права или подпись ссылки на файл не сходится. detail[].reason говорит,
что именно: requires_api_key, requires_management_key, cabinet_only (только в
кабинете), insufficient_role (в allowed — роли, которым можно), not_key_author
(секрет ключа открывает только тот, кто его создал).
application/json404Нет такого объекта у этого аккаунта.
application/json409Тот же `Idempotency-Key` с другим телом.
application/json413Тело или файл больше предела (`invalid_input`, `detail[].reason: too_large`) или — только у `POST /v1/files` — загрузки аккаунта заняли квоту (`storage_limit_exceeded`).
application/json415Тип тела не тот, что принимает метод: `Content-Type: application/json` (у загрузки файла и транскрибации — `multipart/form-data`). В `detail[]` — `{"path": "body", "reason": "unsupported_format"}` и принимаемые типы.
application/json429Слишком часто — повторите через `Retry-After` секунд. Запуск моделей, задачи и файлы результатов частотой не ограничены (их ограничивают баланс и лимиты трат); здесь 429 — на поток запросов с ключом, который сервер не знает, с одного адреса, и на потоки сверх 1000 одновременных на аккаунт (события задачи, чат с `stream: true`). Пределы — раздел «Лимиты» руководства.
application/json