API клонування голосу та генерації із заданим голосом (не рекомендовано)

Оновлено 2026-09-18 · команда Suno-API

⛔ Старий ланцюжок, не рекомендується для нових інтеграцій. Ця сторінка описує ранній ланцюжок persona (voice_task_id / generate-with-voice). Він досі працює, але більше не рекомендується клієнтам; у навігації ліворуч його позначено як «не рекомендовано».

Для нових інтеграцій використовуйте 【Рекомендовано】 API голосового профілю: створіть голосовий профіль з одного вокального зразка (POST /api/music/voice-profile/create), а потім за допомогою нього зробіть кавер на вибрану пісню або заспівайте нову. Голосовий профіль — це ресурс першого класу: його можна перелічити, отримати й видалити, а вихідне аудіо зберігається назавжди.

Якщо вашому продукту потрібен повний цикл «створити голос → довго використовувати повторно → робити кавери», обирайте новий ланцюжок.

Важливо: клонований голос може втратити чинність.

voice_id / voice_task_id, створені клонуванням голосу, не є ресурсом, що працює вічно: вони можуть перестати працювати через термін дії, стан акаунта або зміну стану голосу. Той, хто інтегрує, не повинен один раз клонувати, а потім вічно використовувати локально закешований ідентифікатор голосу.

Рекомендована практика:

  • Зберігайте voice_task_id, voice_id, is_available, updated_at і час останньої успішної генерації.
  • Перед кожною генерацією клонованим голосом викликайте GET /api/voice/clone/tasks/{voice_task_id} або POST /api/voice/clone/tasks/{voice_task_id}/check і підтверджуйте is_available=true.
  • Якщо кінцева точка відповідає, що голос недоступний, завдання не існує або повертає selected voice is not ready, попросіть користувача клонувати знову або вибрати інший доступний голос.
  • Не обіцяйте кінцевому користувачеві, що клонований голос — це «вічний актив»; покажіть в інтерфейсі продукту, що «голос може втратити чинність і потребувати повторної перевірки або повторного клонування».

Опис кінцевої точки

Ця група кінцевих точок створює голос, який можна використовувати повторно, і генерує ним пісні. Той, хто викликає, потребує лише API-ключа, виданого платформою; сервер сам відповідає за надсилання завдань, синхронізацію станів, оплату й завантаження.

Автентифікація: Authorization: Bearer YOUR_API_KEY

Оплата:

Порядок викликів

  1. Викличте POST /api/voice/clone/validate, щоб завантажити вихідний голос і отримати voice_task_id.
  2. Зачекайте або опитуйте GET /api/voice/clone/tasks/{voice_task_id}, доки не отримаєте validate_info.
  3. Користувач читає цей текст уголос і записує перевірне аудіо.
  4. Викличте POST /api/voice/clone/tasks/{voice_task_id}/generate, щоб надіслати перевірне аудіо.
  5. Викликайте POST /api/voice/clone/tasks/{voice_task_id}/check або продовжуйте опитувати завдання, доки is_available=true.
  6. Викличте POST /api/music/generate-with-voice, щоб створити пісню цим голосом.
  7. Кінцева точка генерації спершу повертає завдання-заповнювачі; коли генерація завершиться й ви отримаєте справжній song_id, кінцеві точки завантаження дадуть один файл або архів.
  8. (Необов'язково) Коли голос більше не потрібен, викличте DELETE /api/voice/clone/voices/{voice_task_id}, щоб видалити його; семантика — у розділі 6.

Є також клонування в один крок: на першій сторінці запису/завантаження вихідного голосу в робочому просторі можна вибрати завершення за один крок; система виконує перевірку й створення голосу разом, тож записувати друге перевірне аудіо не потрібно; коштує 5 ¥ за виклик, у разі невдачі кошти повертаються.

Поля завдання голосу

Поле Тип Опис
voice_task_id number Ідентифікатор завдання голосу всередині платформи; усі подальші кінцеві точки використовують цей ID
voice_id string Ідентифікатор голосу, яким можна генерувати пісні; повертається, коли завдання стає придатним
voice_name string Назва голосу
description string Опис голосу
style string Стиль голосу
singer_skill_level string Рівень вокалу; типові значення: beginner, intermediate, professional
language string Мова вихідного голосу, наприклад zh, en
validate_info string Текст перевірки, який треба прочитати вголос
validate_status string Стан завдання перевірки
voice_status string Стан створення голосу
is_available boolean Чи вже можна використовувати для генерації пісень
status string Стан завдання на платформі
stage string Поточна фаза
error_code string Код помилки в разі невдачі
error_message string Причина невдачі
source_duration_seconds number Тривалість вихідного аудіо в секундах
created_at number Мітка часу створення
updated_at number Мітка часу оновлення
completed_at number Мітка часу завершення

1. Надіслати вихідний голос на перевірку

Кінцева точка: POST /api/voice/clone/validate

Параметри тіла запиту

Параметр Тип Обов'язковий Типово Опис
voice_url string Ні - URL аудіо вихідного голосу. Це або file_base64
file_base64 string Ні - Аудіо в base64. Це або voice_url
file_name string Ні - Ім'я файлу; рекомендовано разом із file_base64
voice_name string Ні створюється автоматично Назва голосу
description string Ні - Опис голосу
style string Ні - Стиль голосу
singer_skill_level string Ні beginner Рівень вокалу
language string Ні zh Мова вихідного голосу
vocal_start_s number Так - Секунда початку придатного вокалу
vocal_end_s number Так - Секунда кінця придатного вокалу
source_duration_seconds number Ні - Загальна тривалість вихідного аудіо в секундах

vocal_end_s - vocal_start_s має відповідати мінімальній вимозі до вокального фрагмента. Завантажуйте чистий вокальний запис без помітного супроводу й шуму.

Приклад запиту

curl -X POST https://www.suno-api.io/api/voice/clone/validate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_url": "https://example.com/source-voice.wav",
    "voice_name": "Мій китайський жіночий голос",
    "description": "Чистий і природний китайський жіночий голос",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Приклад відповіді

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Мій китайський жіночий голос",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Запит завдання голосу

Кінцева точка: GET /api/voice/clone/tasks/{voice_task_id}

Приклад запиту

curl https://www.suno-api.io/api/voice/clone/tasks/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Приклад відповіді

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Мій китайський жіночий голос",
      "validate_info": "Прочитайте вголос текст перевірки, повернутий тут",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Створити текст перевірки заново

Кінцева точка: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

Викликайте, коли текст перевірки незручно читати вголос або перевірку треба повторити.

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/regenerate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

4. Надіслати перевірне аудіо й створити голос

Кінцева точка: POST /api/voice/clone/tasks/{voice_task_id}/generate

Параметри тіла запиту

Параметр Тип Обов'язковий Типово Опис
verify_url string Ні - URL аудіо, прочитаного з тексту перевірки. Це або file_base64
file_base64 string Ні - Перевірне аудіо в base64. Це або verify_url
file_name string Ні - Ім'я файлу; рекомендовано разом із file_base64
voice_name string Ні назва завдання Назва голосу
description string Ні опис завдання Опис голосу
style string Ні стиль завдання Стиль голосу
singer_skill_level string Ні налаштування завдання Рівень вокалу

Приклад запиту

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "verify_url": "https://example.com/verify-voice.wav",
    "voice_name": "Мій китайський жіночий голос"
  }'

5. Перевірити, чи голос придатний

Кінцева точка: POST /api/voice/clone/tasks/{voice_task_id}/check

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/check \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Коли завдання придатне, is_available у відповіді дорівнює true і повертається voice_id.

6. Видалити голос

Кінцева точка: DELETE /api/voice/clone/voices/{voice_task_id}

Оплата: безкоштовно.

curl -X DELETE https://www.suno-api.io/api/voice/clone/voices/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Приклад відповіді

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Поле Тип Опис
voice_task_id number Ідентифікатор видаленого завдання голосу
deleted boolean Завжди true; запит на видалення прийнято

Що відбувається після видалення

7. Генерація пісні клонованим голосом

Кінцева точка: POST /api/music/generate-with-voice

Оплата: 1,2 ¥ за виклик.

Параметри тіла запиту

Параметр Тип Обов'язковий Типово Опис
voice_task_id number Так - Ідентифікатор уже придатного завдання голосу
voice_id string Ні - Необов'язкове поле перевірки; якщо надсилаєте, воно має збігатися з voice_id завдання
customMode boolean Ні false false — режим натхнення, true — розширений режим
prompt string Так - У режимі натхнення — опис пісні, у розширеному — текст пісні. Ні те, ні інше не може бути порожнім
style string Так у розширеному режимі - Теги стилю; не можуть бути порожніми, коли customMode=true
title string Так у розширеному режимі - Назва пісні; не може бути порожньою, коли customMode=true
negativeTags string Ні - Стиль, який треба виключити
instrumental boolean Ні false Поле сумісності; генерація клонованим голосом завжди трактується як вокальна пісня
waitAudio boolean Ні false Поле сумісності; ця кінцева точка завжди повертає завдання-заповнювачі асинхронно й не чекає на аудіо
model string Ні suno-v6 Модель звичайної генерації пісень; можна використовувати suno-v6, suno-v6-wild або suno-v6-mini
vocalGender string Ні - Надання переваги статі вокалу
lyricsMode string Ні - Поле сумісності; поточний ланцюжок надсилання з клонованим голосом сам не змінює режим тексту
weirdnessConstraint number Ні - Сила креативності
styleWeight number Ні - Вага стилю
audioWeight number Ні типове значення платформи Audio Influence (наскільки важливе референсне аудіо), діапазон 0.0-1.0. Якщо не надсилати, застосовується типове значення платформи (еквівалент 25% в офіційному інтерфейсі); 0 — дійсне значення, що означає зовсім не наближатися до джерела. Воно тісно пов'язане з sourceClipId у наступному рядку: з джерелом воно вказує на референсне аудіо, без джерела — на клонований голос; у платформи для обох випадків є лише цей один повзунок, тож не розділяйте його на два параметри за сценаріями
sourceClipId string Ні - Реальний ідентифікатор кліпу робочого простору для пісні-джерела. Якщо надіслати, вмикається кавер клонованим голосом; якщо ні — звичайна генерація клонованим голосом
sourceAudioUrl string Ні - Поле відображення джерела; не бере участі у визначенні власності чи акаунта, сервер покладається на свій запис у базі даних
sourceTitle string Ні - Поле відображення джерела; не бере участі у визначенні власності чи акаунта
clientSubmissionId string Ні - Поле сумісності Create UI; для надійного видалення дублікатів у клієнтському API треба використовувати заголовок Idempotency-Key

Підтримуються suno-v6, suno-v6-wild і suno-v6-mini; порожнє значення моделі трактується як suno-v6. Старі моделі V5/V5.5 виведено з експлуатації, але в історичних завданнях можуть ще з'являтися старі назви моделей.

Спільна структура запиту також розбирає поля сумісності Create UI: task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId, voiceId, але вони не є дійсними клієнтськими параметрами цієї кінцевої точки: завдання голосу треба надсилати як voice_task_id, необов'язкову перевірку голосу — як voice_id, а генерація музики голосом ніколи не читає поля sound.

Як заповнювати параметри генерації

Параметри заголовків

Заголовок Обов'язковий Опис
Authorization: Bearer ... Так Клієнтський API-токен
Content-Type: application/json Так Тіло запиту у форматі JSON
Idempotency-Key Ні, наполегливо рекомендовано До 128 символів. За однакових користувача, токена, кінцевої точки, ключа й тіла запиту списання та створення завдання відбуваються лише один раз

Поведінка Idempotency-Key:

Умови кавера через sourceClipId

Кавер із джерела в клієнтському API повністю обробляється на сервері: доступ до пісні-джерела вирішує сервер, і клієнт не передає жодних даних акаунта. Чи це можливо, визначає фактична відповідь кінцевої точки.

Джерело має належати поточному користувачеві API, бути завершеною піснею робочого простору, не pending:, і мати придатне аудіо. Підтримуються звичайна генерація, джерела звичайного завантаження та фінальна пісня посиленого завантаження; проміжні записи посиленого завантаження відхиляються до списання. Сервер приймає лише надісланий клієнтом ідентифікатор пісні-джерела й ніколи ідентифікатор акаунта; недоступне або незавершене джерело дає помилку до списання.

Приклад запиту

curl -X POST https://www.suno-api.io/api/music/generate-with-voice \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_task_id": 123,
    "customMode": true,
    "prompt": "Напиши китайську поп-пісню про морський берег літньої ночі",
    "style": "Mandopop, warm piano, emotional",
    "title": "Морський бриз літньої ночі",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Приклад відповіді

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "items": [
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Морський бриз літньої ночі",
        "prompt": "Напиши китайську поп-пісню про морський берег літньої ночі"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Морський бриз літньої ночі",
        "prompt": "Напиши китайську поп-пісню про морський берег літньої ночі"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Про завдання-заповнювачі та фінальний song_id

generate-with-voice — асинхронна кінцева точка генерації. Успішна відповідь означає лише те, що завдання генерації надіслано, а не що пісня готова.

Значення ключових полів відповіді:

Поле Опис
client_request_id Ідентифікатор відстеження цього запиту генерації. Один запит зазвичай створює 2 пісні, і обидва результати використовують той самий client_request_id.
items[].placeholder_id Локальний заповнювач платформи, зазвичай у формі pending:{client_request_id}:{index}. Це не фінальний ідентифікатор пісні.
items[].client_request_index Номер результату в тому самому запиті, зазвичай 0 і 1.
items[].status Початковий стан після надсилання, наприклад submitted. Подальший успіх чи невдача визначаються фінальним записом завдання.

Увага: placeholder_id, що починається з pending:, не можна використовувати як фінальний song_id і не можна передавати до /api/music/query чи кінцевих точок завантаження. Виклик /api/music/query лише зі значеннями pending:* може повернути порожній масив [], бо справжня пісня ще не готова або завдання-заповнювач ще не замінено фінальним ідентифікатором пісні.

Неправильний приклад:

{
  "song_ids": "pending:cu_1780480000_abcd1234:0"
}

Правильний порядок:

  1. Викличте POST /api/music/generate-with-voice, щоб надіслати завдання генерації музики голосом.
  2. Збережіть client_request_id, items[].placeholder_id і items[].client_request_index з відповіді.
  3. Опитуйте GET /api/music/generate-with-voice/results?client_request_id=cu_xxx.
  4. Коли items[].song_id матиме значення, що не починається з pending:, викличте /api/music/query, /api/music/download-file або /api/music/download-all.

Поточна версія додає публічну кінцеву точку запиту:

GET /api/music/generate-with-voice/results?client_request_id=cu_xxx

Вона повертає результати завдань із тим самим client_request_id для поточного користувача, тож клієнт може сам знайти фінальний song_id. У повернутому списку:

Якщо ви зберегли лише client_request_id або заповнювач pending:*, спершу викличте цю кінцеву точку результатів; якщо справжній song_id досі не знаходиться, надішліть client_request_id до технічної підтримки для пошуку.

Запит результатів генерації голосом

Кінцева точка: GET /api/music/generate-with-voice/results

Оплата: безкоштовно.

Параметри запиту

Параметр Тип Обов'язковий Опис
client_request_id string Так Ідентифікатор відстеження, повернутий generate-with-voice

Приклад запиту

curl -X GET "https://www.suno-api.io/api/music/generate-with-voice/results?client_request_id=cu_1780480000_abcd1234" \
  -H "Authorization: Bearer YOUR_API_KEY"

Приклад відповіді під час генерації

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "processing",
    "items": [
      {
        "song_id": "",
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "processing",
        "type": "voice_generate",
        "title": "Морський бриз літньої ночі"
      }
    ]
  }
}

Приклад відповіді після завершення

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "completed",
    "items": [
      {
        "song_id": "song_abc123",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "completed",
        "type": "voice_generate",
        "title": "Морський бриз літньої ночі",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Значення верхньорівневого status

Стан Опис
not_found Для поточного користувача ще немає запису завдання з цим client_request_id
processing Принаймні один результат ще не завершено; продовжуйте опитування
completed Усі результати завершено; song_id можна запитати або завантажити
partial Частину завершено, частину не вдалося; спершу обробіть завершені song_id
failed Усі результати невдалі; дивіться items[].error_message

8. Завантажити один файл

Кінцева точка: POST /api/music/download-file

Параметри тіла запиту

Параметр Тип Обов'язковий Опис
song_id string Так Ідентифікатор пісні
kind string Так Тип завантаження: audio, cover, wav, video

Приклад запиту

curl -X POST https://www.suno-api.io/api/music/download-file \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123",
    "kind": "audio"
  }' \
  --output song.mp3

Відповідь — потік файлу; Content-Type і ім'я файлу відповідають тому, що повертає бекенд.

9. Завантажити ресурси пісні архівом

Кінцева точка: POST /api/music/download-all

Параметри тіла запиту

Параметр Тип Обов'язковий Опис
song_id string Так Ідентифікатор пісні

Приклад запиту

curl -X POST https://www.suno-api.io/api/music/download-all \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123"
  }' \
  --output song.zip

Архів зазвичай містить аудіо, обкладинку та metadata.json; якщо якийсь тип ресурсу ще не створено, він не потрапляє до архіву.

Поширені помилки

message Опис
voice audio is required Під час надсилання вихідного голосу не вказано ні voice_url, ні file_base64
invalid voice task id Ідентифікатор завдання голосу в шляху недійсний
voice validation is not ready Текст перевірки ще не отримано, тож перевірне аудіо надіслати не можна
selected voice is not ready Вибраний голос ще не може генерувати пісні (не готовий, видалений або не належить поточному акаунту)
selected voice does not match voice task voice_id у запиті не збігається із завданням
voice task is required Бракує voice_task_id під час генерації пісні голосом
record not found Завдання / пісня не існує, не належить акаунту поточного API-ключа або вже видалене (запит цього завдання після видалення голосу покаже те саме)

Помилки цієї групи завжди повертають HTTP 200: визначайте результат за полем success у тілі (false — невдача, причина в message) і не дивіться лише на код стану HTTP. Повна семантика видалення голосу (чи залишається придатним, чи можна відновити) — у розділі 6.

Далі【Рекомендовано】 API голосового профілю

Отримати API-ключ

Створіть API-ключ у консолі після реєстрації. Одна генерація коштує 0,6 ¥ і повертає 2 треки, завантаження необмежені, номер телефону не потрібен.

Отримати API-ключ Повернутися до огляду