API кавера по исходному клипу
Описание эндпоинта
Кавер по исходному клипу переиспользует исходный клип, который вы уже загрузили или который уже существует, и создаёт на его основе новую версию кавера.
Эндпоинт: POST /api/music/generate-from-source
Оплата: платно, сейчас по умолчанию 0,6 ¥ за вызов. Загрузка исходного аудио сама по себе бесплатна; списание происходит при создании кавера по исходному клипу. Фактически списанная сумма следует текущей конфигурации цен в бэк-офисе.
Max Mode / Variety: эндпоинт поддерживает необязательные параметры max_mode и variety (0-4). При включённом
max_mode этот вызов тарифицируется по двойной цене (0,6 → 1,2 ¥ за вызов); variety не стоит
ничего дополнительно. Что они означают и как их отправлять — в разделе «Расширенные параметры»
Обзора нового API.
Время ожидания и тайм-ауты (важно): это синхронный эндпоинт — заказ принимается и передаётся в генерацию только при получении ответа. По измерениям большинство запросов отвечают за 1-3 секунды, около 10% занимают больше 30 секунд, а самый долгий — около 230 секунд. Установите тайм-аут клиента 300 секунд или больше; отсутствие ответа не означает, что ничего не сгенерировано, и не повторяйте запрос сразу после тайм-аута (это дублирует заказ и списывает деньги повторно). Если соединение оборвалось, проверьте позже через
GET /api/music/songs. См. «Время ожидания и настройка тайм-аута» в Обзоре нового API.
Рекомендуемое использование: это шаг 2 «двухшагового кавера». На шаге 1 загрузите файл через API загрузки исходного аудио (бесплатно) и сохраните
clip_id; на шаге 2 вызовите этот эндпоинт, чтобы запустить кавер. Так аудио появляется только на бесплатном шаге: если загрузка не удалась, просто повторите её — деньги не списываются, а тело запроса платного шага занимает всего несколько сотен байт, поэтому оно вряд ли сорвётся из-за обрыва передачи. API загрузки и кавера в один шаг кладёт в тело запроса всё аудио целиком, поэтому как только аудио превышает примерно 8 МБ, оно легко обрезается в пути и возвращаетunexpected end of JSON input(см. «Большие файлы и обрезанные запросы» на той странице).Кроме того, один и тот же
clip_idможно переиспользовать для Extend, Replace Section, разделения на дорожки и других последующих действий — повторно загружать аудио не нужно.
Параметры запроса
Headers
| Параметр | Тип | Обязательно | Примечания |
|---|---|---|---|
| Authorization | string | да | Bearer YOUR_API_KEY |
| Content-Type | string | да | application/json |
Параметры тела
| Параметр | Тип | Обязательно | По умолчанию | Примечания |
|---|---|---|---|---|
| model | string | нет | suno-v6 | Название модели для клиента: suno-v6, suno-v6-wild или suno-v6-mini |
| sourceClipId | string | да | - | ID исходного клипа; можно использовать clip_id, полученный от загрузки исходного аудио, реальный song_id уже имеющейся песни или реальный song_id, возвращённый после завершения усиленной загрузки |
| sourceAudioUrl | string | нет | - | URL исходного аудио |
| sourceTitle | string | нет | - | Название исходного аудио |
| prompt | string | нет | - | Новый текст или творческое направление |
| customMode | boolean | нет | true | Использовать ли расширенный режим |
| style | string | нет | - | Теги стиля |
| title | string | нет | - | Название |
| negativeTags | string | нет | - | Негативный стиль |
| instrumental | boolean | нет | false | Инструментальная ли композиция |
| waitAudio | boolean | нет | false | Ждать ли завершения аудио |
| vocalGender | string | нет | - | Пол голоса |
| lyricsMode | string | нет | - | Режим текста |
| weirdnessConstraint | number | нет | - | Случайность |
| styleWeight | number | нет | - | Влияние стиля |
| audio_weight | number | нет | - | Зависимость от референсного аудио, диапазон 0.0-1.0; можно передавать только при указании исходного клипа или референсного аудио |
weirdnessConstraint, styleWeight и audio_weight принимают десятичную долю от 0.0 до 1.0, а не целое число процентов; например, 50% записывается как 0.5. 0 — допустимое значение; «не указано» означает только пропуск поля. audio_weight отображается на metadata.control_sliders.audio_weight в Suno и управляет тем, насколько результат опирается на референсное аудио; его можно передавать только когда в запросе есть действующий sourceClipId или референсное аудио, поэтому не отправляйте его при обычной генерации только по тексту. При customMode=true напишите новый текст в prompt и укажите одновременно style и title; при customMode=false напишите в prompt творческое описание. instrumental и waitAudio должны использовать логические значения JSON true/false.
Этот эндпоинт по умолчанию отвечает асинхронно. Пока возвращённый status равен pending, пустой audio_url — это нормально; дождитесь завершения, прежде чем использовать адрес аудио. sourceClipId должен быть реальным ID исходной песни/клипа — нельзя использовать task_id, client_request_id или заполнитель с pending:.
Что за ID такой sourceClipId
sourceClipId — это реальный идентификатор клипа Suno, используемого как источник этого кавера. Клиентский объект песни на платформе обычно называет этот идентификатор song_id, а параметры запроса кавера сохраняют имя sourceClipId; здесь оба означают один и тот же реальный ID песни.
Если источник — усиленная загрузка, сначала запросите задачу усиленной загрузки и дождитесь, пока status станет completed, а затем подставьте возвращённый реальный song_id в sourceClipId. Рекомендуется также подставить audio_url и title этого результата в sourceAudioUrl и sourceTitle.
Не подставляйте в sourceClipId ни task_id, ни client_request_id, ни заполнитель pending:enhanced-upload:* от усиленной загрузки.
Пример запроса
curl -X POST https://www.suno-api.io/api/music/generate-from-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"sourceClipId": "uploaded_or_existing_clip_id",
"sourceAudioUrl": "https://example.com/source.mp3",
"sourceTitle": "Название исходного аудио",
"prompt": "Новый текст или творческое направление",
"customMode": true,
"style": "Mandopop, warm vocal",
"title": "Название кавера",
"negativeTags": "noise",
"audio_weight": 0.5,
"instrumental": false,
"waitAudio": false
}'
Ответ
{
"code": 200,
"message": "success",
"data": {
"clips": [
{
"song_id": "new_clip_id",
"song_title": "Название кавера",
"status": "pending"
}
],
"source_update": {}
}
}
Примечания
Этот эндпоинт по возможности разбирается с тем, какому аккаунту принадлежит исходный клип. Если исходный клип нельзя использовать напрямую, сервер может повторно загрузить его на основе информации об исходном аудио и только затем сгенерировать результат.
Получить API-ключ
Создайте API-ключ в консоли после регистрации. Одна генерация стоит 0,6 ¥ и возвращает 2 трека, загрузки не ограничены, номер телефона не нужен.
Получить API-ключ Вернуться к обзору