Текст, изображения, видео и музыка через один API — выберите модель
  1. Главная
  2. /
  3. Документация
  4. /
  5. Гайды

Музыка

Гайды, примеры запросов и справочник методов. Всё, что нужно для подключения нейросетей к вашему проекту.

Гайды

Реализован POST /music/generations для текущих версий Suno: suno/v6, suno/v6-mini и suno/v6-wild. Выбирайте доступную модель с операцией music из GET /models; непроверенные сочетания остаются черновиками.

Тело содержит model, custom_mode и instrumental. В custom_mode=true укажите title и хотя бы style, lyrics или negative_tags. title — до 80 символов, style — до 1000, lyrics — до 5000. Переносы строк в lyrics сохраняются.

В custom_mode=false обязательна хотя бы одна ссылка на изображение/видео/аудио либо style или lyrics. Всего допускается до 10 вложений; до пяти изображений и одного видео. Параметры duration, vocal_gender, style_weight, weirdness_constraint, audio_weight и variety предназначены для пользовательского режима.

duration — запрошенная длительность от 10 до 360 секунд. Реальные проверки показали, что фактическая длительность может отличаться; проверяйте duration_seconds каждого трека. Не считайте запрошенную длительность доказательством фактического использования.

Создание возвращает собственный ID и HTTP 202. Опрашивайте GET /requests/{id}; completed содержит result.data с собственными id и защищёнными url, названием, текстом песни и фактической длительностью. Файлы хранятся сутки. Денежный результат находится в billing; количество токенов баланса внешнего поставщика не подменяет рублёвую стоимость клиента.

Suno поддерживает генерацию и продолжение, кавер и продолжение загруженного аудио, добавление вокала и инструментов, mashup, замену участка, звуковые эффекты и циклы, тексты песен и временные метки, улучшение стиля, Persona, Voice, разделение stems, MIDI, WAV, обложку, клип и восстановление аудиоссылок. Схемы всех 23 методов, включая обязательные поля, перечисления и значения по умолчанию, находятся в /docs/api/music и /openapi.json.

cURL · POST /music/generations

curl "https://formula-ai.ru/api/v1/music/generations" \
  -H "Authorization: Bearer $AI_SERVICE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: example-music-1" \
  --data-binary "{
    \"model\": \"$AI_SERVICE_MODEL\",
    \"custom_mode\": true,
    \"instrumental\": true,
    \"style\": \"Calm minimalist piano\",
    \"title\": \"Integration check\"
}"

cURL · GET /requests/REQUEST_ID

curl "https://formula-ai.ru/api/v1/requests/REQUEST_ID" \
  -H "Authorization: Bearer $AI_SERVICE_API_KEY"

PHP · POST /music/generations

<?php
$key = getenv("AI_SERVICE_API_KEY");
$url = "https://formula-ai.ru/api/v1/music/generations";
$handle = curl_init($url);
curl_setopt_array($handle, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode(["model" => getenv("AI_SERVICE_MODEL")] + array (
  'custom_mode' => true,
  'instrumental' => true,
  'style' => 'Calm minimalist piano',
  'title' => 'Integration check',
), JSON_THROW_ON_ERROR),
    CURLOPT_HTTPHEADER => ["Authorization: Bearer " . $key, "Content-Type: application/json", "Idempotency-Key: php-music-1"],
]);
if (getenv("AI_SERVICE_CA")) {
    curl_setopt($handle, CURLOPT_CAINFO, getenv("AI_SERVICE_CA"));
}
$body = curl_exec($handle);
if ($body === false) {
    throw new RuntimeException(curl_error($handle));
}
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
echo json_encode(["status" => $status, "result" => $result], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);

PHP · GET /requests/

<?php
$key = getenv("AI_SERVICE_API_KEY");
$url = "https://formula-ai.ru/api/v1/requests/";
$url .= rawurlencode(getenv("AI_SERVICE_REQUEST_ID"));
$handle = curl_init($url);
curl_setopt_array($handle, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["Authorization: Bearer " . $key],
]);
if (getenv("AI_SERVICE_CA")) {
    curl_setopt($handle, CURLOPT_CAINFO, getenv("AI_SERVICE_CA"));
}
$body = curl_exec($handle);
if ($body === false) {
    throw new RuntimeException(curl_error($handle));
}
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
echo json_encode(["status" => $status, "result" => $result], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);

Примеры cURL используют Bash. Задайте AI_SERVICE_API_KEY и AI_SERVICE_MODEL; модель выберите из /models. В PHP для опроса/файла задайте AI_SERVICE_REQUEST_ID/AI_SERVICE_MEDIA_ID, для правки — AI_SERVICE_SOURCE_URL. Для локального сертификата используйте доверенный CA через --cacert, для PHP — AI_SERVICE_CA. Проверку TLS сохраняйте включённой.