API завантаження вихідного аудіо
Опис кінцевої точки
Завантаження вихідного аудіо перетворює локальний або віддалений аудіофайл на вихідний кліп, який можуть використовувати подальші можливості: кавер, подовження, заміна фрагмента, розділення на доріжки та інші.
Кінцева точка: POST /api/music/upload-source
Оплата: Безкоштовно. Ця кінцева точка лише завантажує вихідне аудіо й не запускає задачу генерації.
Рекомендоване використання: це крок 1 «двокрокового каверу». Спершу завантажте аудіо цією кінцевою точкою (безкоштовно, і в разі невдачі можна повторювати будь-коли) і збережіть отриманий
clip_id; переконавшись, що завантаження успішне (statusу завершеному стані), викличте API каверу з вихідного кліпу, щоб почати кавер — тіло того запиту лише кілька сотень байтів, тому воно не обірветься через завелике аудіо. Порівняно з одноразовим API «завантажити й зробити кавер» таке розділення надійніше, коли аудіо велике, мережа нестабільна або той самий матеріал потрібно використати кілька разів (подовження / заміна / розділення).
Поради щодо завантаження великих файлів
| Ситуація | Рекомендований підхід |
|---|---|
| Аудіо вже публічне (є пряме посилання https) | Використовуйте file_url: тіло запиту лише кілька сотень байтів, найнадійніший варіант |
| Тимчасовий підписаний URL (ByteDance та інші) | Використовуйте file_url, лише поки URL публічний і дійсний; інакше використовуйте multipart або завантажте одразу |
| Локальний файл (Node / Python / десктоп) | Використовуйте multipart-завантаження (-F "file=@source.mp3") і не задавайте Content-Type вручну |
| Доступний лише JSON + base64 | Зверніть увагу: Content-Length має бути кількістю байтів (Buffer.byteLength), інакше тіло запиту може обірватися |
Після завершення завантаження завжди переконайтеся, що status у відповіді вже завершений, і збережіть clip_id, перш ніж переходити до кроку 2;
невдале завантаження не тарифікується й не створює задачі генерації — просто повторіть спробу.
Перевірте file_url перед завантаженням
file_urlзавантажує сам сервер платформи через HTTP, а не браузер. Якщо URL відкривається у браузері, це ще не означає, що виробничий сервер зможе його отримати.
Для локальних файлів використовуйте multipart-завантаження з полем file. Не використовуйте file_url для посилань ByteDance або тимчасових підписаних URL, якщо вони не є публічними або вже недійсні на момент запиту.
Виконайте це з публічного сервера перед надсиланням запиту:
curl -L --max-time 30 -D - -o /dev/null "https://example.com/source.mp3"
GET-запит має завершитися HTTP 200, повернути аудіо MIME-тип і непорожні дані. Сторінки входу, HTML і коди 401, 403, 404 або 410 сервер використати не може.
file_url download failed: HTTP 404 зазвичай означає, що підпис минув, файл видалено або параметри URL обрізано.
Завантаження безкоштовне. Якщо завантаження file_url не вдалося, clip_id, завдання пісні та виклик генерації не створюються, плата не стягується, повернення коштів не потрібне.
Параметри запиту
Headers
Для JSON-запитів:
| Параметр | Тип | Обов'язково | Примітки |
|---|---|---|---|
| Authorization | string | так | Bearer YOUR_API_KEY |
| Content-Type | string | так | application/json |
Не задавайте Content-Type вручну в multipart-запитах; клієнт створює його автоматично.
Параметри тіла запиту
| Параметр | Тип | Обов'язково | Типово | Примітки |
|---|---|---|---|---|
| model | string | ні | suno-v6 | Клієнтська назва моделі: suno-v6, suno-v6-wild або suno-v6-mini |
| file_url | string | ні | - | Адреса віддаленого аудіо |
| file_base64 | string | ні | - | Аудіо в Base64 |
| file | файл (multipart) | ні | - | Аудіофайл для завантаження; ім'я поля має бути file |
| file_name | string | ні | - | Ім'я файлу |
| upload_type | string | ні | file_upload | Тип завантаження |
Приклад JSON-запиту
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"file_url": "https://example.com/source.mp3",
"file_name": "source.mp3",
"upload_type": "file_upload"
}'
Приклад multipart-запиту
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@source.mp3" \
-F "file_name=source.mp3" \
-F "upload_type=file_upload" \
-F "model=suno-v6"
import requests
with open("source.mp3", "rb") as audio:
response = requests.post(
"https://www.suno-api.io/api/music/upload-source",
headers={"Authorization": "Bearer YOUR_API_KEY"},
data={
"file_name": "source.mp3",
"upload_type": "file_upload",
"model": "suno-v6",
},
files={"file": ("source.mp3", audio, "audio/mpeg")},
timeout=300,
)
response.raise_for_status()
print(response.json())
Відповідь
{
"clip_id": "uploaded_clip_id",
"status": "complete",
"title": "source.mp3",
"image_url": "https://...",
"audio_url": "https://...",
"display_tags": "pop, vocal",
"inferred_description": "uploaded source audio",
"clip_metadata": {}
}
Отримати API-ключ
Створіть API-ключ у консолі після реєстрації. Одна генерація коштує 0,6 ¥ і повертає 2 треки, завантаження необмежені, номер телефону не потрібен.
Отримати API-ключ Повернутися до огляду