Перейти к основному контенту

API Suno v6 Wild для экспериментальных песен: описание стиля и ваш текст на входе, два фактурных, менее предсказуемых дубля MP3 с вокалом на выходе; слова может написать и модель.

От $0.072/запрос

Рабочая область

Отправить запрос

Быстрый старт

Примеры используют публичные параметры выбранного эндпоинта. Замените API-ключ и примеры медиафайлов, затем отправьте запрос со своего сервера.

SDK и интеграции
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Аутентификация API

Храните API-ключ в серверной переменной окружения SPICY_API_KEY. Используйте Bearer-аутентификацию и Content-Type: application/json для JSON-запросов.

Authorization: Bearer $SPICY_API_KEY
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "suno/v6-wild/text-to-audio",
  "input": {
    "prompt": "Calm ambient pads with a slow rising motif"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Пример построен по входной схеме этой модели — той же, по которой API проверяет каждый запрос.

Входные параметры

Поместите эти поля в объект input тела запроса. Имена и типы соответствуют API. Не предполагайте значение по умолчанию, если оно не задано.

promptstringОбязательно

Описание стиля. Со своим текстом или при включённом instrumental это только стиль: жанр, темп, инструменты, голос, настроение, до 1 000 символов. Без текста и при включённом generate_lyrics это идея песни, по которой модель пишет слова, до 3 000 символов. Описывайте стиль словами: промпты с именами реальных исполнителей отклоняются. Не влияет на цену.

По умолчанию
Не задано
Ограничения
minLength:1
maxLength:3000
reference_audio_urlsarray<string>Необязательно

Один референсный аудиофайл (от 6 секунд до 30 минут, до 500 МБ), который вдохновляет песню. Только со сгенерированными словами: lyrics пусто, instrumental выключен, generate_lyrics включён. Используйте аудио, на которое у вас есть права. Не влияет на цену.

По умолчанию
Не задано
Ограничения
maxItems:1
reference_video_urlsarray<string>Необязательно

Одно референсное видео (MP4, MOV или WebM, до 100 МБ и 241 секунды), вокруг которого строится песня, например чтобы озвучить его музыкой. Только со сгенерированными словами: lyrics пусто, instrumental выключен, generate_lyrics включён. Не влияет на цену.

По умолчанию
Не задано
Ограничения
maxItems:1
image_urlsarray<string>Необязательно

До 5 картинок-настроений (JPEG, PNG, WebP или BMP, каждая до 10 МБ), по которым модель улавливает характер песни. Только со сгенерированными словами: lyrics пусто, instrumental выключен, generate_lyrics включён. В других режимах возвращается понятная ошибка. Не влияет на цену.

По умолчанию
Не задано
Ограничения
maxItems:5
persona_modelstringНеобязательно

Сообщает модели, чем является persona_id: style_persona (взять его музыкальный стиль) или voice_persona (взять его голос). Передавайте вместе с persona_id. Действует только со своим текстом или при включённом instrumental. Не влияет на цену.

По умолчанию
Не задано
Допустимые значения
"style_persona""voice_persona"
persona_idstringНеобязательно

ID сохранённой персоны или голоса Suno, который исполнит песню. Необязательно. Действует только со своим текстом или при включённом instrumental. Используется вместе с persona_model. Не влияет на цену.

По умолчанию
Не задано
Ограничения
minLength:1
maxLength:200
varietyintegerНеобязательно

Насколько модель варьирует ваш промпт стиля: целое число от 0 (выключено: теги стиля используются ровно как написаны) до 4 (максимум). По умолчанию 1. Это описание самой Suno, мы эту настройку не проверяли. Действует только со своим текстом или при включённом instrumental. На цену не влияет.

По умолчанию
Не задано
Ограничения
minimum:0
maximum:4
audio_weightnumberНеобязательно

Насколько сильно входное аудио влияет на результат: от 0 до 1 с шагом 0,01. Для песен без вокала Suno это не поддерживает. Действует только со своим текстом или при включённом instrumental. Не влияет на цену.

По умолчанию
Не задано
Ограничения
minimum:0
maximum:1
weirdnessnumberНеобязательно

Насколько далеко песня может уйти от ожидаемого: от 0 (традиционно) до 1 (смело), с шагом 0,01. Действует только со своим текстом или при включённом instrumental. Не влияет на цену.

По умолчанию
Не задано
Ограничения
minimum:0
maximum:1
style_weightnumberНеобязательно

Насколько строго песня следует описанию стиля: от 0 до 1 с шагом 0,01. Действует только со своим текстом или при включённом instrumental; в остальных случаях возвращается понятная ошибка. Не влияет на цену.

По умолчанию
Не задано
Ограничения
minimum:0
maximum:1
vocal_genderstringНеобязательно

Склоняет ведущий вокал к женскому (female) или мужскому (male). Это пожелание, а не гарантия, и как часто оно выполняется, мы не проверяли. Действует только со своим текстом или при включённом instrumental; при автоматическом тексте возвращается понятная ошибка. На цену не влияет.

По умолчанию
Не задано
Допустимые значения
"female""male"
negative_promptstringНеобязательно

Стили, звуки или настроения, которые нужно исключить из песни, коротким списком через запятую, например «harsh distortion, spoken word». Необязательно. Не влияет на цену.

По умолчанию
Не задано
Ограничения
minLength:1
maxLength:500
titlestringНеобязательно

Название песни, до 80 символов. Действует со своим текстом или при включённом instrumental; при сгенерированных словах название выбирает модель. Необязательно. Не влияет на цену.

По умолчанию
Не задано
Ограничения
minLength:1
maxLength:80
instrumentalbooleanНеобязательно

Включите, чтобы получить трек без вокала. Тогда prompt описывает стиль (до 1 000 символов), а lyrics не нужен. По умолчанию выключено. Не влияет на цену.

По умолчанию
false
generate_lyricsbooleanНеобязательно

По умолчанию включено: если lyrics пусто, а instrumental выключен, модель пишет слова по prompt. Ваш собственный текст никогда не переписывается. Выключайте только тогда, когда передаёте lyrics или включаете instrumental. Не влияет на цену.

По умолчанию
true
lyricsstringНеобязательно

Слова для пения, до 5 000 символов, по одной строке на строку. Теги секций вроде [Verse], [Chorus], [Bridge] и [Outro] на отдельных строках задают структуру и не поются. В наших тестах каждая строка пелась в том порядке, в каком написана, а припев не повторялся, пока вы не повторяли его сами. Оставьте пустым, чтобы слова написала модель (см. generate_lyrics). Не влияет на цену.

По умолчанию
Не задано
Ограничения
minLength:1
maxLength:5000

Отследить задачу

HTTP 202 означает принятие задачи, а не завершение генерации. Сохраните полученный taskId и проверяйте эту задачу. Не создавайте новую, пока ждёте результат.

Ответ при приёме задачи
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

В ответе о приёме есть оценка стоимости — приложение сможет показать ту же сумму в истории задач и в расчётах.

Получить задачу
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Начните с интервала около 2 секунд и постепенно увеличивайте его. Прекратите опрос при конечном состоянии. После сбоя соединения используйте исходный taskId. Повторно создавать задачу можно только с исходным ключом идемпотентности и исходным телом запроса.

Или пусть вызов придёт сам
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Передайте callBackUrl при создании задачи — готовая запись придёт к вам POST-запросом, и никакого опроса не понадобится. В каждой доставке есть X-Webhook-Timestamp, X-Webhook-Signature и X-Webhook-Payload-Version. Подпись — это HMAC-SHA256 в base64 от taskId.timestamp.sha256(body), поэтому проверять её нужно по исходным байтам: если разобрать JSON и сериализовать заново, байты изменятся и проверка не пройдёт. Неудачные доставки повторяются, так что один и тот же taskId может прийти дважды — сделайте обработчик идемпотентным. Сначала ответьте 2xx, работу выполняйте после: медленный обработчик считается неудачной доставкой.

Прочитать результат

Обрабатывайте output только при state, равном succeeded. При ошибке проверьте errorCode, errorMessage и request_id. Стоимость и состояния в примерах не являются фактическим счётом.

Пример ответа после завершения
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "suno/v6-wild/text-to-audio",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp3",
          "mime": "audio/mpeg",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp3?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Доступные файлы можно открыть или скачать по assets[].url без заголовка API Authorization. Подписанная ссылка действует до expiresAt. Чтобы обновить её, повторно запросите задачу в течение срока хранения файла. У ожидающих или недоступных файлов URL отсутствует. Не передавайте подписанные ссылки посторонним.

SDK и интеграции

Используйте SpicyAPI в приложении, терминале, ИИ-ассистенте или визуальном процессе. Выберите руководство по настройке.

Использование в ComfyUI

Установите узлы SpicyAPI через ComfyUI Manager или командой ниже и найдите на холсте Suno v6 Wild · Text to Music. У узла те же параметры, что и на этой странице, а цена показывается до запуска.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi