API klonowania głosu i generowania ze wskazanym głosem (niezalecane)
⛔ 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_idtworzone 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_atoraz czas ostatniej udanej generacji.- Przed każdą generacją ze sklonowanym głosem wywołaj
GET /api/voice/clone/tasks/{voice_task_id}alboPOST /api/voice/clone/tasks/{voice_task_id}/checki 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:
- Walidacja głosu, klonowanie głosu, sprawdzanie stanu, usuwanie i pobieranie: bezpłatnie.
- Wejście do klonowania w jednym kroku w obszarze roboczym: stałe 5 ¥ za wywołanie; wykonuje automatycznie walidację źródłowego głosu i drugie audio weryfikacyjne, a przy niepowodzeniu zwraca środki.
- Automatyczne przejście do audio weryfikacyjnego po zwykłym klonowaniu: stałe 5 ¥ za wywołanie; przy niepowodzeniu zwrot zgodnie z obowiązującym procesem.
- Generowanie utworu sklonowanym głosem: płatne, stałe 1,2 ¥ za wywołanie; jedno wywołanie zwykle zwraca 2 zadania zastępcze.
- Po włączeniu Max Mode (
max_mode: truewPOST /api/music/generate-with-voice) te 1,2 ¥ za wywołanie są rozliczane podwójnie, czyli 2,4 ¥ za wywołanie; generowanie głosem obsługuje teżvariety(0-4, bez dodatkowej opłaty) — zasady wartości w sekcji „Parametry zaawansowane" przeglądu nowego API.
Kolejność wywołań
- Wywołaj
POST /api/voice/clone/validate, aby przesłać źródłowy głos i uzyskaćvoice_task_id. - Poczekaj lub odpytuj
GET /api/voice/clone/tasks/{voice_task_id}, aż otrzymaszvalidate_info. - Użytkownik czyta ten tekst na głos i nagrywa audio weryfikacyjne.
- Wywołaj
POST /api/voice/clone/tasks/{voice_task_id}/generate, aby przesłać audio weryfikacyjne. - Wywołaj
POST /api/voice/clone/tasks/{voice_task_id}/checklub odpytuj zadanie dalej, ażis_available=true. - Wywołaj
POST /api/music/generate-with-voice, aby wygenerować utwór tym głosem. - 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. - (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_smusi 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
- Głosu nie można już użyć do generowania nowych utworów: wywołanie
POST /api/music/generate-with-voicez tymvoice_task_id(lub jegovoice_id) zostaje odrzucone z komunikatemselected voice is not ready, bez obciążenia. - Utwory już nim wygenerowane nie są w żaden sposób dotknięte: odtwarzanie, pobieranie, kontynuowanie, zamiana i rozdzielanie ścieżek działają jak wcześniej.
- To zadanie głosu znika z zapytań:
GET /api/voice/clone/tasks/{voice_task_id}zwracarecord not found. - Źródłowe audio jest zachowywane zgodnie z polityką trwałego przechowywania platformy (od 2026-09-23 usuwanie nie czyści już przesłanej próbki wokalu), ale nie oznacza to, że można je odzyskać: to stare zadanie zostało zakończone, a aby nadal używać tego samego głosu, trzeba przejść proces klonowania od nowa — otrzymasz nowe
voice_task_id. - Podwójne usunięcie: ponowne usunięcie tego samego zadania zwraca
record not found(jest już w stanie usuniętym i nie da się go odnaleźć).
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
- Przy
customMode=falsepromptzawiera opis utworu; przycustomMode=truepromptzawiera pełny tekst utworu, astyleititleteż muszą być wypełnione. Nie przesyłaj tekstu utworu do pola opisu trybu inspiracji i nie traktuj opisu utworu jak tekstu w trybie zaawansowanym. weirdnessConstraintistyleWeightto ułamki dziesiętne od0.0do1.0; nie można przesłać50ani50%.0.5to wartość zrównoważona; pominięcie oznacza „nieokreślone", a0jest prawidłową wartością jawną.vocalGenderprzyjmuje tylkom,male,flubfemale.instrumentaljest tu wyłącznie polem zgodności: generowanie sklonowanym głosem jest zawsze traktowane jak utwór wokalny.waitAudionic tu nie zmienia; interfejs zawsze zwraca zadania zastępcze asynchronicznie. Pusteaudio_urlw pierwszym wyniku jest normalne: odpytuj przezclient_request_idi czytaj adres audio dopiero po zakończeniu wyniku.
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:
- Pierwsze żądanie zapisuje trwały rekord idempotencji przed rozliczeniem;
- Jeśli ten sam klucz z tym samym żądaniem jest już zakończony, powtarzana jest pierwsza odpowiedź przyjęcia, bez drugiego obciążenia i drugiego zadania;
- Ten sam klucz z inną treścią żądania jest odrzucany;
- Ten sam klucz wciąż przetwarzany zwraca stabilny błąd przetwarzania i ujawnia bezpieczny
client_request_idtylko wtedy, gdy został już wygenerowany; - Jeśli pierwsze żądanie z danym kluczem zakończy się niepowodzeniem, stan błędu pozostaje; ponowna próba wymaga nowego klucza.
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ść:
- Wywołaj
POST /api/music/generate-with-voice, aby zgłosić zadanie generowania głosem. - Zapisz
client_request_id,items[].placeholder_idiitems[].client_request_indexz odpowiedzi. - Odpytuj
GET /api/music/generate-with-voice/results?client_request_id=cu_xxxw pętli. - Gdy
items[].song_idma wartość, która nie zaczyna się odpending:, wywołaj/api/music/query,/api/music/download-filealbo/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:
song_idto prawdziwe ID utworu;placeholder_idpojawia się tylko, gdy zadanie jest jeszcze w stanie zastępczym;- wartość zaczynająca się od
pending:nie może być użyta z/api/music/queryani z interfejsami pobierania.
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
successw treści (falseoznacza niepowodzenie, przyczyna wmessage) 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.
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