API klonowania głosu i generowania ze wskazanym głosem (niezalecane)

Zaktualizowano 2026-09-18 · zespół Suno-API

⛔ Stary łańcuch, niezalecany w nowych integracjach. Ta strona opisuje wczesny łańcuch persona (voice_task_id / generate-with-voice). Nadal działa, ale nie jest już zalecany klientom; nawigacja po lewej oznacza go jako „niezalecane".

W nowych integracjach użyj 【Zalecane】 API profilu głosu: utwórz profil głosu z jednej próbki wokalu (POST /api/music/voice-profile/create), a następnie użyj go, by zrobić cover wybranego utworu lub zaśpiewać nowy. Profil głosu jest zasobem pierwszej klasy: można go wylistować, pobrać i usunąć, a źródłowe audio jest zachowywane trwale.

Jeśli Twój produkt potrzebuje pełnego cyklu „utwórz głos → używaj długoterminowo → rób covery", wybierz nowy łańcuch.

Ważna uwaga: sklonowany głos może wygasnąć.

voice_id / voice_task_id tworzone przez klonowanie głosu nie są zasobem działającym wiecznie: mogą przestać działać z powodu okresu ważności, stanu konta lub zmiany stanu głosu. Integrator nie powinien raz sklonować głosu i potem na zawsze używać lokalnie zbuforowanego identyfikatora głosu.

Zalecana praktyka:

  • Przechowuj voice_task_id, voice_id, is_available, updated_at oraz czas ostatniej udanej generacji.
  • Przed każdą generacją ze sklonowanym głosem wywołaj GET /api/voice/clone/tasks/{voice_task_id} albo POST /api/voice/clone/tasks/{voice_task_id}/check i potwierdź is_available=true.
  • Jeśli interfejs zwraca informację, że głos jest niedostępny, że zadanie nie istnieje lub błąd selected voice is not ready, poproś użytkownika o ponowne sklonowanie albo wybór innego dostępnego głosu.
  • Nie obiecuj użytkownikom końcowym, że sklonowany głos jest „trwałym zasobem"; pokaż w interfejsie produktu, że „głos może wygasnąć i wymagać ponownej walidacji lub ponownego sklonowania".

Opis punktu końcowego

Ta grupa interfejsów tworzy głos wielokrotnego użytku i generuje nim utwory. Wywołujący potrzebuje tylko klucza API wydanego przez platformę; serwer obsługuje zgłaszanie zadań, synchronizację stanu, rozliczenie i pobieranie.

Uwierzytelnianie: Authorization: Bearer YOUR_API_KEY

Rozliczenie:

Kolejność wywołań

  1. Wywołaj POST /api/voice/clone/validate, aby przesłać źródłowy głos i uzyskać voice_task_id.
  2. Poczekaj lub odpytuj GET /api/voice/clone/tasks/{voice_task_id}, aż otrzymasz validate_info.
  3. Użytkownik czyta ten tekst na głos i nagrywa audio weryfikacyjne.
  4. Wywołaj POST /api/voice/clone/tasks/{voice_task_id}/generate, aby przesłać audio weryfikacyjne.
  5. Wywołaj POST /api/voice/clone/tasks/{voice_task_id}/check lub odpytuj zadanie dalej, aż is_available=true.
  6. Wywołaj POST /api/music/generate-with-voice, aby wygenerować utwór tym głosem.
  7. Interfejs generujący najpierw zwraca zadania zastępcze; gdy generowanie się zakończy i masz prawdziwy song_id, możesz pobrać pojedynczy plik albo paczkę przez interfejsy pobierania.
  8. (Opcjonalnie) Gdy głos nie jest już potrzebny, wywołaj DELETE /api/voice/clone/voices/{voice_task_id}, aby go usunąć; semantyka w sekcji 6.

Jest też klonowanie w jednym kroku: na pierwszej stronie nagrywania/przesyłania źródłowego głosu w obszarze roboczym możesz wybrać zakończenie w jednym kroku — system wykona walidację i utworzenie głosu razem, więc nie musisz nagrywać drugiego audio weryfikacyjnego; kosztuje 5 ¥ za wywołanie, a przy niepowodzeniu środki są zwracane.

Pola zadania głosu

Pole Typ Opis
voice_task_id number ID zadania głosu w platformie; wszystkie kolejne interfejsy używają tego ID
voice_id string ID głosu, którym można generować utwory; zwracane, gdy zadanie jest gotowe
voice_name string Nazwa głosu
description string Opis głosu
style string Styl głosu
singer_skill_level string Poziom śpiewu; typowe wartości: beginner, intermediate, professional
language string Język źródłowego głosu, na przykład zh, en
validate_info string Tekst weryfikacyjny do przeczytania na głos
validate_status string Stan zadania walidacji
voice_status string Stan tworzenia głosu
is_available boolean Czy głos można już używać do generowania utworów
status string Stan zadania na platformie
stage string Bieżący etap
error_code string Kod błędu przy niepowodzeniu
error_message string Przyczyna niepowodzenia
source_duration_seconds number Czas trwania źródłowego audio w sekundach
created_at number Znacznik czasu utworzenia
updated_at number Znacznik czasu aktualizacji
completed_at number Znacznik czasu zakończenia

1. Przesłanie źródłowego głosu do walidacji

Punkt końcowy: POST /api/voice/clone/validate

Parametry treści żądania

Parametr Typ Wymagany Domyślnie Opis
voice_url string Nie - URL audio źródłowego głosu. Albo to, albo file_base64
file_base64 string Nie - Audio w base64. Albo to, albo voice_url
file_name string Nie - Nazwa pliku; zalecana przy file_base64
voice_name string Nie generowana automatycznie Nazwa głosu
description string Nie - Opis głosu
style string Nie - Styl głosu
singer_skill_level string Nie beginner Poziom śpiewu
language string Nie zh Język źródłowego głosu
vocal_start_s number Tak - Sekunda początku użytecznego wokalu
vocal_end_s number Tak - Sekunda końca użytecznego wokalu
source_duration_seconds number Nie - Całkowity czas trwania źródłowego audio w sekundach

vocal_end_s - vocal_start_s musi spełniać minimalne wymaganie dla fragmentu wokalu. Prześlij czyste nagranie wokalu bez wyraźnego podkładu i szumów.

Przykład żądania

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": "Mój chiński głos żeński",
    "description": "Czysty, naturalny chiński głos żeński",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Przykład odpowiedzi

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Mój chiński głos żeński",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Odpytanie zadania głosu

Punkt końcowy: GET /api/voice/clone/tasks/{voice_task_id}

Przykład żądania

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

Przykład odpowiedzi

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Mój chiński głos żeński",
      "validate_info": "Przeczytaj na głos zwrócony tutaj tekst weryfikacyjny",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Ponowne wygenerowanie tekstu weryfikacyjnego

Punkt końcowy: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

Wywołaj, gdy tekst weryfikacyjny nie nadaje się do czytania na głos albo trzeba powtórzyć walidację.

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. Przesłanie audio weryfikacyjnego i utworzenie głosu

Punkt końcowy: POST /api/voice/clone/tasks/{voice_task_id}/generate

Parametry treści żądania

Parametr Typ Wymagany Domyślnie Opis
verify_url string Nie - URL audio przeczytanego z tekstu weryfikacyjnego. Albo to, albo file_base64
file_base64 string Nie - Audio weryfikacyjne w base64. Albo to, albo verify_url
file_name string Nie - Nazwa pliku; zalecana przy file_base64
voice_name string Nie nazwa zadania Nazwa głosu
description string Nie opis zadania Opis głosu
style string Nie styl zadania Styl głosu
singer_skill_level string Nie ustawienie zadania Poziom śpiewu

Przykład żądania

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": "Mój chiński głos żeński"
  }'

5. Sprawdzenie, czy głos jest dostępny

Punkt końcowy: 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 '{}'

Gdy zadanie jest dostępne, is_available w odpowiedzi wynosi true i zwracany jest voice_id.

6. Usunięcie głosu

Punkt końcowy: DELETE /api/voice/clone/voices/{voice_task_id}

Rozliczenie: bezpłatnie.

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

Przykład odpowiedzi

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Pole Typ Opis
voice_task_id number ID usuniętego zadania głosu
deleted boolean Zawsze true; oznacza, że żądanie usunięcia zostało przyjęte

Co się dzieje po usunięciu

7. Generowanie utworu sklonowanym głosem

Punkt końcowy: POST /api/music/generate-with-voice

Rozliczenie: 1,2 ¥ za wywołanie.

Parametry treści żądania

Parametr Typ Wymagany Domyślnie Opis
voice_task_id number Tak - ID już dostępnego zadania głosu
voice_id string Nie - Opcjonalne pole weryfikacyjne; jeśli je prześlesz, musi być zgodne z voice_id zadania
customMode boolean Nie false false to tryb inspiracji, true to tryb zaawansowany
prompt string Tak - W trybie inspiracji opis utworu, w trybie zaawansowanym tekst utworu. Żaden nie może być pusty
style string Tak w trybie zaawansowanym - Tagi stylu; nie może być puste przy customMode=true
title string Tak w trybie zaawansowanym - Tytuł utworu; nie może być pusty przy customMode=true
negativeTags string Nie - Styl do wykluczenia
instrumental boolean Nie false Pole zgodności; generowanie sklonowanym głosem jest zawsze traktowane jak utwór wokalny
waitAudio boolean Nie false Pole zgodności; ten interfejs zawsze zwraca zadania zastępcze asynchronicznie i nie czeka na audio
model string Nie suno-v6 Model zwykłego generowania utworów; dostępne suno-v6, suno-v6-wild, suno-v6-mini
vocalGender string Nie - Preferencja płci wokalu
lyricsMode string Nie - Pole zgodności; obecny łańcuch zgłaszania ze sklonowanym głosem sam nie zmienia trybu tekstu
weirdnessConstraint number Nie - Siła kreatywności
styleWeight number Nie - Waga stylu
audioWeight number Nie wartość domyślna platformy Audio Influence (jak mocno liczy się audio referencyjne), zakres 0.0-1.0. Jeśli nie zostanie przesłane, obowiązuje wartość domyślna platformy (odpowiednik 25% w oficjalnym interfejsie); 0 jest wartością prawidłową i oznacza brak zbliżania się do źródła. Pole jest silnie powiązane z sourceClipId z następnego wiersza: ze źródłem wskazuje audio referencyjne, bez źródła wskazuje sklonowany głos; platforma ma na oba przypadki tylko ten jeden suwak, więc nie dziel go na dwa parametry według scenariusza
sourceClipId string Nie - Prawdziwe ID klipu w obszarze roboczym dla utworu źródłowego. Jeśli je prześlesz, wchodzisz w cover sklonowanym głosem; jeśli nie, jest to zwykłe generowanie sklonowanym głosem
sourceAudioUrl string Nie - Pole prezentacyjne źródła; nie bierze udziału w ustalaniu własności ani konta, serwer opiera się na swoim rekordzie w bazie
sourceTitle string Nie - Pole prezentacyjne źródła; nie bierze udziału w ustalaniu własności ani konta
clientSubmissionId string Nie - Pole zgodności Create UI; do niezawodnej deduplikacji w API klienta trzeba użyć nagłówka Idempotency-Key

Obsługiwane są suno-v6, suno-v6-wild i suno-v6-mini; puste pole modelu jest traktowane jako suno-v6. Stare modele V5/V5.5 zostały wycofane, ale w historycznych zadaniach mogą pozostać stare nazwy modeli.

Wspólna struktura żądania rozpoznaje też pola zgodności Create UI, takie jak task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId i voiceId, ale nie są one prawidłowymi parametrami klienta dla tego interfejsu: zadanie głosu trzeba przesłać jako voice_task_id, opcjonalną weryfikację głosu jako voice_id, a generowanie muzyki głosem nigdy nie czyta pól sound.

Jak wypełniać parametry generowania

Parametry nagłówków

Nagłówek Wymagany Opis
Authorization: Bearer ... Tak Token API klienta
Content-Type: application/json Tak Treść żądania w JSON
Idempotency-Key Nie, zdecydowanie zalecany Do 128 znaków. Przy tym samym użytkowniku, tokenie, punkcie końcowym, kluczu i treści żądania rozliczenie i utworzenie zadania następują tylko raz

Zachowanie Idempotency-Key:

Warunki covera przez sourceClipId

Cover ze źródła w API klienta obsługuje w całości serwer: dostęp do utworu źródłowego rozstrzyga serwer, a klient nie przesyła żadnych danych konta. O możliwości decyduje rzeczywista odpowiedź interfejsu.

Źródło musi należeć do bieżącego użytkownika API, być zakończonym utworem w obszarze roboczym, nie pending:, i mieć dostępne audio. Obsługiwane są zwykłe generowanie, źródła ze zwykłego przesyłania oraz końcowy utwór z przesyłania wzmocnionego; rekordy pośrednie przesyłania wzmocnionego są odrzucane przed rozliczeniem. Serwer przyjmuje wyłącznie ID utworu źródłowego przesłane przez klienta i nigdy ID konta; niedostępne lub niezakończone źródło zwraca błąd przed rozliczeniem.

Przykład żądania

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": "Napisz chiński utwór pop o nadmorskim brzegu w letnią noc",
    "style": "Mandopop, warm piano, emotional",
    "title": "Morska bryza w letnią noc",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Przykład odpowiedzi

{
  "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": "Morska bryza w letnią noc",
        "prompt": "Napisz chiński utwór pop o nadmorskim brzegu w letnią noc"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Morska bryza w letnią noc",
        "prompt": "Napisz chiński utwór pop o nadmorskim brzegu w letnią noc"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

O zadaniach zastępczych i końcowym song_id

generate-with-voice to asynchroniczny interfejs generowania. Pomyślna odpowiedź oznacza tylko, że zadanie generowania zostało zgłoszone, a nie że utwór jest gotowy.

Znaczenie kluczowych pól odpowiedzi:

Pole Opis
client_request_id ID śledzenia tego żądania generowania. Jedno żądanie zwykle tworzy 2 utwory, a oba wyniki używają tego samego client_request_id.
items[].placeholder_id Lokalny identyfikator zastępczy platformy, zwykle w formie pending:{client_request_id}:{index}. To nie jest końcowe ID utworu.
items[].client_request_index Numer wyniku w tym samym żądaniu, zwykle 0 i 1.
items[].status Stan początkowy po zgłoszeniu, na przykład submitted. Późniejszy sukces lub porażkę wyznacza końcowy rekord zadania.

Uwaga: placeholder_id zaczynający się od pending: nie może służyć jako końcowe song_id ani być przekazany do /api/music/query czy interfejsów pobierania. Wywołanie /api/music/query tylko z wartościami pending:* może zwrócić pustą tablicę [], bo prawdziwy utwór nie jest jeszcze gotowy albo zadanie zastępcze nie zostało jeszcze zastąpione końcowym ID utworu.

Błędny przykład:

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

Właściwa kolejność:

  1. Wywołaj POST /api/music/generate-with-voice, aby zgłosić zadanie generowania głosem.
  2. Zapisz client_request_id, items[].placeholder_id i items[].client_request_index z odpowiedzi.
  3. Odpytuj GET /api/music/generate-with-voice/results?client_request_id=cu_xxx w pętli.
  4. Gdy items[].song_id ma wartość, która nie zaczyna się od pending:, wywołaj /api/music/query, /api/music/download-file albo /api/music/download-all.

Obecna wersja dodaje publiczny interfejs zapytań:

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

Zwraca wyniki zadań dla tego samego client_request_id u bieżącego użytkownika, więc klient może sam odnaleźć końcowe song_id. Na zwróconej liście:

Jeśli zapisałeś tylko client_request_id albo zastępcze ID pending:*, najpierw wywołaj ten interfejs wyników; jeśli prawdziwe song_id nadal się nie pojawia, przekaż client_request_id do wsparcia technicznego w celu zlokalizowania.

Odpytanie wyników generowania głosem

Punkt końcowy: GET /api/music/generate-with-voice/results

Rozliczenie: bezpłatnie.

Parametry zapytania

Parametr Typ Wymagany Opis
client_request_id string Tak ID śledzenia zwrócone przez generate-with-voice

Przykład żądania

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"

Przykład odpowiedzi w trakcie generowania

{
  "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": "Morska bryza w letnią noc"
      }
    ]
  }
}

Przykład odpowiedzi po zakończeniu

{
  "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": "Morska bryza w letnią noc",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Znaczenie górnego status

Stan Opis
not_found Dla bieżącego użytkownika nie ma jeszcze rekordu zadania z tym client_request_id
processing Co najmniej jeden wynik nie jest gotowy; odpytuj dalej
completed Wszystkie wyniki są gotowe; można odpytać lub pobrać przez song_id
partial Część gotowa, część nieudana; najpierw obsłuż gotowe song_id
failed Wszystkie wyniki nieudane; sprawdź items[].error_message

8. Pobranie pojedynczego pliku

Punkt końcowy: POST /api/music/download-file

Parametry treści żądania

Parametr Typ Wymagany Opis
song_id string Tak ID utworu
kind string Tak Typ pobierania: audio, cover, wav, video

Przykład żądania

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

Odpowiedzią jest strumień pliku; Content-Type i nazwa pliku wynikają z tego, co zwróci backend.

9. Pobranie zasobów utworu jako paczki

Punkt końcowy: POST /api/music/download-all

Parametry treści żądania

Parametr Typ Wymagany Opis
song_id string Tak ID utworu

Przykład żądania

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

Paczka zawiera zwykle audio, okładkę i metadata.json; jeśli jakiś typ zasobu nie został jeszcze wygenerowany, nie trafia do archiwum.

Częste błędy

message Opis
voice audio is required Przy przesyłaniu źródłowego głosu nie podano ani voice_url, ani file_base64
invalid voice task id ID zadania głosu w ścieżce jest nieprawidłowe
voice validation is not ready Tekst weryfikacyjny nie jest jeszcze dostępny, więc audio weryfikacyjnego nie można przesłać
selected voice is not ready Wybrany głos nie może jeszcze generować utworów (niegotowy, usunięty lub nie należy do bieżącego konta)
selected voice does not match voice task voice_id w żądaniu nie zgadza się z zadaniem
voice task is required Przy generowaniu utworu głosem brakuje voice_task_id
record not found Zadanie / utwór nie istnieje, nie należy do konta bieżącego klucza API lub zostało już usunięte (odpytanie tego zadania po usunięciu głosu pokaże to samo)

Błędy tej grupy zawsze zwracają HTTP 200: o powodzeniu decyduj po polu success w treści (false oznacza niepowodzenie, przyczyna w message) i nie patrz wyłącznie na kod stanu HTTP. Pełna semantyka usuwania głosu (czy nadal da się używać, czy da się przywrócić) jest w sekcji 6.

Następny【Zalecane】 API profilu głosu

Uzyskaj klucz API

Po rejestracji utwórz klucz API w konsoli. Każde generowanie kosztuje 0,6 ¥ i zwraca 2 utwory, pobierania są nieograniczone, a numer telefonu nie jest wymagany.

Pobierz klucz API Powrót do przeglądu