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 | нет | - | URL удалённого аудио |
| 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-ключ Вернуться к обзору