API генерації в розширеному режимі
Опис кінцевої точки
Розширений режим підходить, коли текст, стиль і назва вже готові, а ви хочете керувати співочим голосом, силою впливу стилю та ступенем випадковості генерації.
Кінцева точка: POST /api/music/create/custom
Оплата: платно, наразі типово 0,6 ¥ за виклик. За виклик зазвичай повертаються 2 пісні; фактично списана сума відповідає поточній конфігурації цін у бек-офісі.
Max Mode / Variety: ця кінцева точка підтримує необов'язкові параметри max_mode і variety (0-4). Коли
max_mode увімкнено, цей виклик тарифікується за подвійною ціною (0,6 → 1,2 ¥ за виклик); variety не коштує
нічого додатково. Що вони означають і як їх надсилати — у розділі «Розширені параметри»
Огляду нового API.
Час очікування та тайм-аути (важливо): це синхронна кінцева точка — замовлення приймають і передають у генерацію лише коли надходить відповідь. За вимірами більшість запитів відповідають за 1-3 секунди, близько 10% тривають понад 30 секунд, а найдовший — близько 230 секунд. Установіть тайм-аут клієнта 300 секунд або більше; відсутність відповіді не означає, що нічого не згенеровано, і не повторюйте запит одразу після тайм-ауту (це дублює замовлення й списує кошти вдруге). Якщо з'єднання обірвалося, перевірте пізніше через
GET /api/music/songs. Див. «Час очікування та налаштування тайм-ауту» в Огляді нового API.
Параметри запиту
Headers
| Параметр | Тип | Обов'язково | Примітки |
|---|---|---|---|
| Authorization | string | так | Bearer YOUR_API_KEY |
| Content-Type | string | так | application/json |
Параметри тіла
| Параметр | Тип | Обов'язково | Типово | Примітки |
|---|---|---|---|---|
| model | string | ні | suno-v6 |
Клієнтська назва моделі: suno-v6, suno-v6-wild або suno-v6-mini |
| lyrics | string | ні | - | Текст пісні; для інструментальної може бути порожнім |
| style_tags | string | так | - | Теги стилю; кілька можна розділити комами |
| song_title | string | ні | - | Назва пісні |
| instrumental | boolean | ні | false |
Чи генерувати інструментальну композицію |
| negative_tags | string | ні | - | Стилі або ефекти, яких не хочете |
| vocal_gender | string | ні | - | Стать голосу: m, f, male або female |
| style_weight | number | ні | - | Вплив стилю, від 0.0 до 1.0 |
| weirdness_constraint | number | ні | - | Випадковість, від 0.0 до 1.0 |
| wait_completion | boolean | ні | false |
Чи чекати завершення генерації перед відповіддю |
Примітки до розширених параметрів
Стать голосу vocal_gender
- Надсилайте
mабоmaleдля чоловічого голосу,fабоfemaleдля жіночого. - Сервіс нормалізує
maleіfemaleдоmтаfвідповідно. - За
instrumental=trueпараметр статі голосу не надсилається в сервіс генерації.
Вплив стилю style_weight
Керує тим, наскільки сильно результат дотримується style_tags. Чим вище значення, тим більше результат тяжіє до вказаних тегів стилю.
Випадковість weirdness_constraint
Керує тим, наскільки результат варіюється й експериментує. Вищі значення зазвичай дають більше варіацій; нижчі — безпечніший результат.
Обидва числові параметри в межах від 0.0 до 1.0, і 0 є припустимим явним значенням. Лише повне пропускання поля означає «не вказано».
Заповнюючи їх, врахуйте, що це десяткові дроби, а не відсоткові цілі числа. Орієнтир: 0.0–0.3 консервативно, 0.4–0.6 збалансовано, 0.7–1.0 експериментальніше; без чітких уподобань використовуйте 0.5 або просто пропустіть. Приклад: weirdness_constraint: 0.5, ніколи 50 чи 50%.
За instrumental=true результат інструментальний, тож текст і стать голосу не діють так, як у співаній пісні; якщо потрібен вокал, надішліть false або пропустіть поле. Логічні поля мають використовувати true/false у JSON, а не рядки.
Приклад запиту на Python
import requests
response = requests.post(
'https://www.suno-api.io/api/music/create/custom',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'model': 'suno-v6',
'lyrics': '[Verse]\nНіч опускається на море\nвечірній вітер проходить повз вікно',
'style_tags': 'Mandopop, acoustic guitar, warm vocal',
'song_title': 'Вечірній вітер біля моря',
'vocal_gender': 'male',
'style_weight': 0.68,
'weirdness_constraint': 0.32,
},
timeout=300,
)
response.raise_for_status()
songs = response.json()
Режим квитанції-приймання (необов'язково)
Ця кінцева точка також підтримує режим квитанції-приймання з API генерації в простому режимі: з "accept_mode": "async" у тілі (або заголовком X-Accept-Mode: async) кінцева точка одразу повертає 202 і номер квитанції, генерація триває у фоні, а поступ відстежується через GET /api/music/requests/{request_id}.
Підходить клієнтам, які не мають тримати довгі з'єднання або не хочуть, щоб тайм-аут було прочитано як «нічого не згенеровано». Без цього параметра поведінка точно як раніше.
curl -X POST https://www.suno-api.io/api/music/create/custom \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--max-time 300 \
-d '{
"style_tags": "Mandopop, acoustic guitar, warm vocal",
"song_title": "Вечірній вітер біля моря",
"vocal_gender": "male",
"accept_mode": "async"
}'
Форма відповіді та спосіб опитування описані в розділі «Режим квитанції-приймання» API генерації в простому режимі.
Перевірка параметрів
Ці випадки повертають HTTP 400, і message помилки називає недопустиме поле:
style_weightабоweirdness_constraintне є числом.- Числове значення менше
0.0або більше1.0. vocal_genderне один зm,f,male,female.
Ліміти текстових полів
Ці поля при перевищенні теж повертають HTTP 400, не потрапляють у генерацію й не списують кошти наперед. Лічба в символах Unicode (один ієрогліф рахується як 1) і пробіли на початку та в кінці враховуються:
| Поле | Ліміт |
|---|---|
prompt (текст, сумісне з lyrics) |
3000 символів |
style_tags (стиль, сумісне з tags, style) |
1000 символів |
negative_tags (виключені стилі) |
1000 символів |
song_title (назва, сумісне з title) |
100 символів |
Повідомлення про помилку має вигляд style_tags must not exceed 1000 characters; received 2772: перше слово — назва поля, що перевищило ліміт, а в кінці — виміряна кількість, тож отримавши 400, скорочуйте за цими двома числами, а не пробуйте поле за полем. Загальні правила — в «Обмеження текстових полів» Огляду нового API.
Відповідь
Кінцева точка зазвичай повертає масив із 2 піснями. Асинхронний запит зазвичай починається зі стану pending; збережіть song_id і отримайте фінальний стан та адресу аудіо через API запиту пісень. Поля пісні ті самі, що в API генерації в простому режимі.
Сумісні поля
| Рекомендоване поле | Сумісне поле |
|---|---|
vocal_gender |
vocalGender |
style_weight |
styleWeight |
weirdness_constraint |
weirdnessConstraint |
Новим інтеграціям варто всюди використовувати snake_case. Якщо один запит містить і snake_case, і camelCase, переважає значення в snake_case.
Отримати API-ключ
Створіть API-ключ у консолі після реєстрації. Одна генерація коштує 0,6 ¥ і повертає 2 треки, завантаження необмежені, номер телефону не потрібен.
Отримати API-ключ Повернутися до огляду