API загрузки исходного аудио

Обновлено 2026-09-18 · команда Suno-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-ключ

Создайте API-ключ в консоли после регистрации. Одна генерация стоит 0,6 ¥ и возвращает 2 трека, загрузки не ограничены, номер телефона не нужен.

Получить API-ключ Вернуться к обзору