API запиту пісень та історії

Оновлено 2026-09-18 · команда Suno-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. Кілька ключів, створених під одним головним акаунтом, можуть читати історію цього акаунта, але не пісні іншого користувача чи акаунта підсайту.

Кінцеві точки історії повертають лише справді згенеровані пісні. Виключено:


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. Порожні значення ніколи не повертаються.

Три правила відображення (дотримуйтеся їх, а не здогадуйтеся):

  1. Розрізняйте джерело стилю: за style_source=suno_derived показуйте «стиль (виведено Suno з вашого опису)» і ніколи «ваш стиль»;
  2. Внутрішні промпти ніколи не з'являються: голосові кавер-типи повертають лише 【вимоги до стилю】/【вимоги до каверу】, які ввів користувач; фіксована конструкція, яку ми складаємо для моделі, не з'являється в жодному полі (історичні дані очищено так само);
  3. Не вгадуйте відсутні параметри: якщо чогось немає в extended, тоді це не записали — поясніть причину через retention.

Примітки щодо збереження параметрів

parameter_retention розділяє «порожнє значення передано явно» та «поле історично не зберігалося»:

Звичайні історичні пісні зазвичай зберігали промпт, стиль, поточну назву, модель, тип генерації та вихідну пісню, але не зберігали окремо всі розширені параметри. Платформа ніколи не вгадує відсутні значення з 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 тексту з мітками часу

Отримати API-ключ

Створіть API-ключ у консолі після реєстрації. Одна генерація коштує 0,6 ¥ і повертає 2 треки, завантаження необмежені, номер телефону не потрібен.

Отримати API-ключ Повернутися до огляду