API запиту пісень та історії
Ця сторінка охоплює три безкоштовні кінцеві точки запиту:
| Можливість | Method | Кінцева точка |
|---|---|---|
| Запит стану та результату пісні | POST | /api/music/query |
| Запит пісень, створених поточним акаунтом | GET | /api/music/songs |
| Запит параметрів, збережених під час генерації пісні | GET | /api/music/songs/:song_id |
Якщо ви використали на кінцевій точці генерації режим квитанції-приймання (
accept_mode=async), у вас на руках номер квитанції, а не ID пісні. Відстежуйте поступ черезGET /api/music/requests/{request_id}і поверніться до кінцевих точок цієї сторінки, коли отримаєте справжнійsong_id. Див. «Режим квитанції-приймання» в API генерації в простому режимі.
Автентифікація та обсяг даних
Усі три кінцеві точки використовують той самий ключ API:
Authorization: Bearer YOUR_API_KEY
Історія пісень ізольована за user_id, якому належить ключ API. Кілька ключів, створених під одним головним акаунтом, можуть читати історію цього акаунта, але не пісні іншого користувача чи акаунта підсайту.
Кінцеві точки історії повертають лише справді згенеровані пісні. Виключено:
- записи-заповнювачі генерації, що починаються з
pending:; - завантаження вихідного аудіо та записи вдосконаленого завантаження;
- побічні результати, як-от розділення вокалу й акомпанементу та стеми;
- пісні інших користувачів або акаунтів підсайтів.
1. Запит стану генерації
Шукає поточний стан і кінцевий результат для одного або кількох ID пісень.
Кінцева точка: POST /api/music/query
Оплата: безкоштовно.
Headers
| Параметр | Тип | Обов'язково | Примітки |
|---|---|---|---|
| Authorization | string | так | Bearer YOUR_API_KEY |
| Content-Type | string | так | application/json |
Параметри тіла
| Параметр | Тип | Обов'язково | Типово | Примітки |
|---|---|---|---|---|
| model | string | ні | suno-v6 |
Версія моделі |
| song_ids | string | так | - | ID пісень, розділені комами |
Приклад запиту
curl -X POST https://www.suno-api.io/api/music/query \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"song_ids": "clip_id_1,clip_id_2"
}'
Приклад відповіді
[
{
"song_id": "clip_id_1",
"song_title": "Назва пісні",
"status": "completed",
"audio_url": "https://example.com/audio.mp3",
"video_url": "https://example.com/video.mp4",
"cover_url": "https://example.com/cover.jpg",
"lyrics": "Текст пісні",
"style_tags": "Mandopop, acoustic",
"duration": 180.5,
"model_version": "suno-v6",
"created_at": "2026-05-21T10:00:00Z"
}
]
Примітки щодо сумісності
Старіша документація може показувати song_ids як масив. Сьогодні рекомендується рядок, розділений комами, що відповідає фактичному виклику кінцевої точки.
song_ids має містити справжні ID пісень. Заповнювач, що починається з pending:, не є кінцевим song_id і тут не працює; запит лише за заповнювачами може повернути порожній масив [].
model, model_version або платформний model_name у відповіді можуть зберігати історичні значення. Нові завдання мають використовувати suno-v6, suno-v6-wild або suno-v6-mini; від suno-v2 до suno-v5-5 виведено з ужитку, і поява цих назв в історії не означає, що модель ще можна надсилати.
Поки завдання в стані pending, submitted або processing, поля audio_url, video_url і cover_url можуть бути порожніми — це нормально для незавершеного завдання. Не робіть висновок про збій лише з порожньої адреси; орієнтуйтеся на status і запитайте знову, коли стан завершено. Лише якщо стан завершено, а адреси досі порожні, варто звернутися до підтримки, вказавши song_id.
⚠️ Адреси аудіо живуть 7 днів — перенесіть файли вчасно
audio_url,video_url(та інші адреси медіа, наприклад WAV), які повертає ця кінцева точка, віддаються з об'єктного сховища платформи і типово спливають через 7 днів: файли переробляються, а стара адреса повертає 404.
- Протягом цих 7 днів перенесіть файли у власне сховище; не вважайте адресу довготривалим посиланням.
- Протермінована адреса не потребує повторної генерації пісні й не оплачується знову: викличте цю кінцеву точку (
POST /api/music/query) ще раз, щоб отримати свіжу дійсну адресу цієї пісні.
2. Запит історії пісень акаунта
Перелічує пісні, створені головним акаунтом поточного ключа API. Підходить для власного списку пісень, вибору або сторінки історії.
Кінцева точка: GET /api/music/songs
Оплата: безкоштовно.
Параметри запиту
| Параметр | Тип | Обов'язково | Типово | Примітки |
|---|---|---|---|---|
| p | integer | ні | 1 |
Номер сторінки, починаючи з 1 |
| page_size | integer | ні | 20 |
Елементів на сторінку, максимум 100 |
| q | string | ні | - | Нечіткий пошук за назвою або точний пошук за повним ID пісні |
| status | string | ні | - | Точний фільтр за станом, наприклад completed, playable |
Результати впорядковано за created_at і внутрішнім ID запису за спаданням, тож порядок сторінок стабільний.
Як знайти надсилання, що вийшло за тайм-аут: кінцеві точки генерації не дають проміжної відповіді до приймання. Якщо клієнт вийшов за тайм-аут або з'єднання обірвалося під час надсилання, замовлення могло вже бути прийняте й генеруватися. Погляньте на цю кінцеву точку (найновіші спершу): прийняті пісні з'являються у списку як звичайно. Надсилайте повторно лише після підтвердження, що її справді немає, аби не заплатити двічі. Див. «Час очікування та налаштування тайм-ауту» в Огляді нового API.
Приклад запиту
curl "https://www.suno-api.io/api/music/songs?p=1&page_size=20&status=completed" \
-H "Authorization: Bearer YOUR_API_KEY"
Приклад відповіді
{
"success": true,
"message": "",
"data": {
"page": 1,
"page_size": 20,
"total": 42,
"items": [
{
"song_id": "8e31b3c0-example-song-id",
"title": "Місто вночі",
"status": "completed",
"generation_type": "custom_generate",
"model": "suno-v6",
"duration": 187.42,
"audio_url": "https://example.com/audio.mp3",
"image_url": "https://example.com/cover.jpg",
"created_at": 1784000000,
"completed_at": 1784000120
}
]
}
}
Поля відповіді
| Поле | Тип | Примітки |
|---|---|---|
| song_id | string | Справжній ID пісні, придатний для запиту деталей |
| title | string | Поточна назва, яку користувач міг змінити |
| status | string | Поточний стан |
| generation_type | string | Тип генерації |
| model | string | Модель генерації |
| duration | number | Тривалість аудіо в секундах |
| audio_url | string | Адреса аудіо; може бути порожньою, поки завдання не завершено |
| image_url | string | Адреса обкладинки; може бути порожньою |
| created_at | integer | Час створення, позначка часу Unix у секундах |
| completed_at | integer | Час завершення, позначка часу Unix у секундах; може бути відсутня, поки завдання не завершено |
Кінцева точка списку не повертає промпти, поля оплати, інформацію про акаунт чи сирі відповіді. Для промптів і параметрів генерації викличте кінцеву точку деталей пісні.
3. Запит параметрів генерації
Шукає промпт, стиль, модель і вихідну пісню, які платформа зберегла під час генерації пісні.
Кінцева точка: GET /api/music/songs/:song_id
Оплата: безкоштовно.
Читати можна лише пісні головного акаунта, якому належить поточний ключ API. Пісні інших користувачів або акаунтів підсайтів однаково трактуються як «пісню не знайдено».
Параметр шляху
| Параметр | Тип | Обов'язково | Примітки |
|---|---|---|---|
| song_id | string | так | Справжній ID пісні |
Приклад запиту
curl "https://www.suno-api.io/api/music/songs/8e31b3c0-example-song-id" \
-H "Authorization: Bearer YOUR_API_KEY"
Приклад відповіді
{
"success": true,
"message": "",
"data": {
"song_id": "8e31b3c0-example-song-id",
"title": "Місто вночі",
"status": "completed",
"generation_type": "custom_generate",
"model": "suno-v6",
"duration": 187.42,
"audio_url": "https://example.com/audio.mp3",
"image_url": "https://example.com/cover.jpg",
"video_url": "",
"wav_url": "",
"created_at": 1784000000,
"completed_at": 1784000120,
"client_request_id": "example-request-id",
"client_request_index": 0,
"parameters": {
"prompt": "міські вулиці після дощу, текст про нову зустріч",
"style_tags": "Mandopop, acoustic, warm vocal",
"title": "Місто вночі",
"model": "suno-v6",
"generation_type": "custom_generate",
"source_song_id": "",
"source_audio_url": "",
"custom_mode": null,
"instrumental": null,
"negative_tags": null,
"vocal_gender": null,
"lyrics_mode": null,
"wait_audio": null,
"style_weight": null,
"weirdness_constraint": null
},
"parameter_retention": {
"core_parameters_available": true,
"extended_parameters_available": false,
"sources": [
"suno_tasks"
],
"unavailable_fields": [
"custom_mode",
"instrumental",
"negative_tags",
"vocal_gender",
"lyrics_mode",
"wait_audio",
"style_weight",
"weirdness_constraint"
]
}
}
}
Поля parameters
| Поле | Тип | Примітки |
|---|---|---|
| prompt | string | Промпт генерації або текст пісні |
| style_tags | string | Теги стилю |
| title | string | Збережена назва генерації; звичайне історичне завдання може зберегти лише поточну назву |
| model | string | Модель генерації |
| generation_type | string | Тип генерації |
| source_song_id | string | ID вихідної пісні для каверів, продовження та подібних завдань |
| source_audio_url | string | Адреса вихідного аудіо |
| custom_mode | boolean/null | Чи використано розширений режим; null, якщо не збережено |
| instrumental | boolean/null | Чи пісня інструментальна; наявні історичні дані зазвичай не зберігають це окремо |
| negative_tags | string/null | Виключені стилі |
| vocal_gender | string/null | Налаштування статі вокалу |
| lyrics_mode | string/null | Режим тексту; наявні історичні дані зазвичай його не зберігають |
| wait_audio | boolean/null | Чи очікувалося повне аудіо; наявні історичні дані зазвичай цього не зберігають |
| style_weight | number/null | Вага стилю |
| weirdness_constraint | number/null | Параметр креативності / химерності |
Поле prompt_view (перегляд промпту, додано 2026-09-28)
prompt_view — нормалізована структура, призначена для «перегляду промпту»: вона впорядковує дані у фіксовані
розділи за типом генерації, тож клієнтові більше не потрібно вирішувати, яке поле показувати. Це
суто додаткове поле — старі поля (parameters, parameter_retention) зберігають назву та
значення, а клієнти, які не розбирають нове поле, взагалі не зазнають впливу.
"prompt_view": {
"type": "custom_generate",
"type_label": "Розширений режим",
"generation": {
"model": "suno-v6", "max_mode": false, "duration": 182.4,
"title": "Четверта ранку#701f37", "title_base": "Четверта ранку", "title_suffix": "701f37",
"created_at": 1790421721
},
"inputs": {
"user_text": "...", "user_text_kind": "lyrics",
"user_style": "електроніка ґочао, глибокий саб-бас, ретро-синтезатор",
"style_tags": "електроніка ґочао, глибокий саб-бас, ретро-синтезатор",
"style_source": "user", "lyrics": "...",
"negative_tags": "", "is_instrumental": false
},
"extended": {
"vocal_gender": "m", "style_weight": 0.5, "audio_weight": 0.85,
"weirdness_constraint": 0.5, "variety": 2, "lyrics_mode": "manual",
"custom_mode": true
},
"reference": { "voice_name": "sv_40_34", "source_song_id": "", "source_title": "" },
"retention": {
"recorded_since": "2026-09-28", "missing_reason": "",
"not_applicable_fields": ["audio_weight"]
}
}
| Поле | Тип | Примітки |
|---|---|---|
type / type_label |
string | Сирий тип генерації / відображувана мітка (проста генерація, розширений режим, режим звукових ефектів, генерація клонованим голосом…) |
generation.model |
string | Використана модель |
generation.max_mode |
bool | Чи ввімкнено Max Mode |
generation.duration |
number | Тривалість аудіо в секундах |
generation.title |
string | Назва точно як збережено (може містити суфікс) |
generation.title_base |
string | Відображувана назва без суфікса #xxxxxx у кінці |
generation.title_suffix |
string | Сам суфікс (без #); порожньо, якщо його немає |
inputs.user_text |
string | Введення користувача (опис або текст, залежно від типу) |
inputs.user_text_kind |
string | lyrics / description / cover_requirements |
inputs.user_style |
string | Стиль, який ввів користувач (розширений режим, голос, звукові ефекти) |
inputs.style_tags |
string | Стиль, який фактично застосовано |
inputs.style_source |
string | user = введено користувачем; suno_derived = виведено Suno з опису |
inputs.lyrics |
string | Текст пісні; порожньо, якщо немає, [Instrumental] для інструментальної |
inputs.negative_tags |
string | Виключені стилі |
inputs.is_instrumental |
bool | Чи пісня інструментальна |
extended.* |
— | Розширені параметри, див. нижче; незбережені поля не з'являються |
reference.voice_name |
string | Назва голосу (лише для голосових типів; внутрішній persona id не повертається) |
reference.source_song_id / source_title |
string | Вихідна пісня для каверів, продовження та подібних завдань |
retention.recorded_since |
string | Дата, відколи зберігаються розширені параметри (2026-09-28) |
retention.missing_reason |
string | Чому немає розширених параметрів; в історичних даних not_recorded_before_20260928 |
retention.not_applicable_fields |
string[] | Параметри, які цей тип генерації ніколи не потребував (не показуйте їх як «відсутні параметри») |
Поля, що можуть з'явитися в extended: vocal_gender, style_weight, audio_weight,
weirdness_constraint, variety, lyrics_mode, custom_mode, а також група звукових ефектів
sound_type / sound_bpm / sound_key / sound_loop. Порожні значення ніколи не повертаються.
Три правила відображення (дотримуйтеся їх, а не здогадуйтеся):
- Розрізняйте джерело стилю: за
style_source=suno_derivedпоказуйте «стиль (виведено Suno з вашого опису)» і ніколи «ваш стиль»; - Внутрішні промпти ніколи не з'являються: голосові кавер-типи повертають лише 【вимоги до стилю】/【вимоги до каверу】, які ввів користувач; фіксована конструкція, яку ми складаємо для моделі, не з'являється в жодному полі (історичні дані очищено так само);
- Не вгадуйте відсутні параметри: якщо чогось немає в
extended, тоді це не записали — поясніть причину черезretention.
Примітки щодо збереження параметрів
parameter_retention розділяє «порожнє значення передано явно» та «поле історично не зберігалося»:
core_parameters_available: чи існує головний запис завдання; у коректному запиті деталей зазвичайtrue;extended_parameters_available: чи знайдено пов'язаний запис розширеного музичного завдання;sources: з яких таблиць даних узято цю відповідь;unavailable_fields: поля, які не можна надійно відновити з історії; вони повертаютьnullуparameters.
Звичайні історичні пісні зазвичай зберігали промпт, стиль, поточну назву, модель, тип генерації та вихідну пісню, але не зберігали окремо всі розширені параметри. Платформа ніколи не вгадує відсутні значення з generation_type.
Деякі розширені музичні завдання також зберегли початковий промпт, стиль, назву, модель, а також custom_mode, negative_tags, vocal_gender, style_weight і weirdness_constraint. Навіть коли розширений запис існує, instrumental, lyrics_mode і wait_audio можуть залишитися невідновними.
Назви пісень користувач може змінити пізніше. Коли звичайне історичне завдання не зберегло окремої початкової назви, parameters.title може бути поточною назвою; коли є запис розширеного завдання, перевага надається початковій назві генерації, збереженій там.
Не знайдено або немає прав
Бізнес-помилки використовують єдиний конверт відповіді. Коли пісні немає або вона не належить поточному акаунту:
{
"success": false,
"message": "song not found"
}
Ця бізнес-помилка зараз повертається з HTTP 200, тож оцінюйте результат за полем success. Відсутній, недійсний, протермінований або вимкнений ключ API повертає HTTP 401.
Примітки щодо безпеки
Кінцеві точки історії та деталей ніколи не повертають:
- ключі API або ID токенів;
- поля квот, оплати чи повернень;
- інформацію про акаунт або сирі відповіді;
- внутрішні ключі об'єктного сховища;
- помилки адміністратора чи помилки внутрішніх ресурсів.
Отримати API-ключ
Створіть API-ключ у консолі після реєстрації. Одна генерація коштує 0,6 ¥ і повертає 2 треки, завантаження необмежені, номер телефону не потрібен.
Отримати API-ключ Повернутися до огляду