API wzmocnionego wgrania
Opis punktu końcowego
Wzmocnione wgranie przyjmuje lokalny plik dźwiękowy; system wykonuje wzmocnienie w tle i tworzy kompletny, odtwarzalny utwór. Wywołanie zwraca od razu informacje o zadaniu, a klient odpytuje punkt końcowy wyszukiwania o postęp.
Punkt końcowy zgłoszenia: POST /api/music/enhanced-upload
Wyszukanie jednego zadania: GET /api/music/enhanced-upload/:id
Anulowanie zadania: POST /api/music/enhanced-upload/:id/cancel
Wyszukanie listy: GET /api/music/enhanced-upload
Rozliczenie: 10 ¥ za wywołanie, pobierane z góry według stałej ceny suno-enhanced-upload. Jeśli zadanie się nie powiedzie lub zostanie anulowane na dozwolonym etapie, pobrana z góry kwota jest automatycznie zwracana. Faktycznie pobierana kwota zależy od bieżącej konfiguracji cen w panelu administracyjnym.
Przebieg wywołań
- Wywołaj
POST /api/music/enhanced-upload, aby przesłać plik dźwiękowy. - Zapisz zwrócone
task_id. - Wywołaj
GET /api/music/enhanced-upload/:id, aby sprawdzić postęp i wynik. - Gdy Suno zakończy finalne renderowanie, usługa używa konta Suno przypisanego do tego zadania, wywołuje punkt końcowy autoryzowanego pobierania Studio i zapisuje MP3 w usłudze mediów CN2.
- Zadanie staje się
completeddopiero gdy zasób CN2 jest gotowy; wtedy adres dźwięku CDN odczytuje się zaudio_urlw odpowiedzi.
/api/forbidden to adres zastępczy, który może pojawić się w metadanych Suno Studio; nie jest zasobem do odtwarzania ani pobierania. Nigdy nie jest zwracany klientowi ani nie służy jako podstawa uznania zadania za zakończone. Jeśli renderowanie się zakończyło, a CN2 wciąż się przygotowuje, punkt końcowy nadal zwraca processing i nie zwraca audio_url; klient powinien kontynuować odpytywanie i nie traktować pustego adresu jako błędu.
Wysłanie wzmocnionego wgrania
Headers
| Parametr | Typ | Wymagany | Uwagi |
|---|---|---|---|
| Authorization | string | tak | Bearer YOUR_API_KEY |
| Content-Type | string | nie | W żądaniach multipart nie ustawiaj go ręcznie; pozwól klientowi go wygenerować |
Parametry formularza
| Parametr | Typ | Wymagany | Domyślnie | Uwagi |
|---|---|---|---|---|
| file | file | tak | - | Lokalny plik dźwiękowy, maksymalnie 80 MB |
| title | string | nie | nazwa pliku bez rozszerzenia | Tytuł utworu |
Przykładowe żądanie
Poniższy przykład używa tego samego sposobu wywołania co przy walidacji na produkcji, ale klucz API zastąpiono wartością zastępczą.
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@source.aac" \
-F "title=Enhanced upload demo" \
"https://www.suno-api.io/api/music/enhanced-upload"
Odpowiedź
{
"success": true,
"message": "",
"data": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "queued",
"created_at": 1781137961,
"pre_consumed_quota": 5000000,
"billing_source": "wallet"
}
}
Wyszukanie jednego zadania
Przykładowe żądanie
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload/3209"
Przykładowa odpowiedź w trakcie przetwarzania
{
"success": true,
"message": "",
"data": {
"task": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "processing",
"type": "enhanced_upload",
"progress": {
"stage": "media_preparing",
"percent": 98,
"label": "正在准备播放资源",
"updated_at": 1781138500
},
"pre_consumed_quota": 5000000,
"billing_source": "wallet",
"created_at": 1781137961,
"updated_at": 1781138500
}
}
}
Przykładowa odpowiedź po zakończeniu
{
"success": true,
"message": "",
"data": {
"task": {
"task_id": 3209,
"song_id": "56cbd0bb-0e8c-4a34-8729-55d5c05d9c53",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "completed",
"type": "enhanced_upload",
"audio_url": "https://media.code-go.com/assets/56cbd0bb-0e8c-4a34-8729-55d5c05d9c53-mp3.mp3",
"duration": 217.74,
"progress": {
"stage": "completed",
"percent": 100,
"label": "已完成",
"updated_at": 1781138943
},
"pre_consumed_quota": 5000000,
"billing_source": "wallet",
"created_at": 1781137961,
"updated_at": 1781138943,
"completed_at": 1781138943
}
}
}
Anulowanie zadania
Anulowanie jest możliwe tylko wtedy, gdy zarówno zadanie, jak i workflow backendu są jeszcze na etapie queued. Gdy zadanie wejdzie w leasing, running, processing lub zostanie ukończone, anulowanie nie jest możliwe.
Przykładowe żądanie
curl.exe --http1.1 -s -S -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload/3209/cancel"
Odpowiedź
{
"success": true,
"message": "",
"data": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"status": "cancelled"
}
}
Jeśli zadanie już rozpoczęło przetwarzanie, punkt końcowy zwróci:
{
"success": false,
"message": "强化上传已开始处理,无法取消"
}
Wyszukanie listy zadań
Punkt końcowy listy zwraca wyłącznie zadania wzmocnionego wgrania użytkownika, do którego należy bieżący klucz API; zwykłe generowanie, covery i przedłużanie nie są mieszane.
Parametry zapytania
| Parametr | Typ | Wymagany | Domyślnie | Uwagi |
|---|---|---|---|---|
| p | number | nie | 1 | Numer strony |
| page_size | number | nie | wartość domyślna systemu | Elementów na stronę, maksymalnie 100 |
Przykładowe żądanie
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload?p=1&page_size=3"
Odpowiedź
{
"success": true,
"message": "",
"data": {
"page": 1,
"page_size": 3,
"total": 1,
"items": [
{
"task_id": 3209,
"song_id": "56cbd0bb-0e8c-4a34-8729-55d5c05d9c53",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "completed",
"type": "enhanced_upload",
"audio_url": "https://media.code-go.com/assets/56cbd0bb-0e8c-4a34-8729-55d5c05d9c53-mp3.mp3",
"duration": 217.74,
"progress": {
"stage": "completed",
"percent": 100,
"label": "已完成",
"updated_at": 1781138943
},
"pre_consumed_quota": 5000000,
"billing_source": "wallet",
"created_at": 1781137961,
"updated_at": 1781138943,
"completed_at": 1781138943
}
]
}
}
Opis pól odpowiedzi
| Pole | Typ | Uwagi |
|---|---|---|
| task_id | number | ID zadania wzmocnionego wgrania; użyj tej wartości w kolejnych wyszukaniach i przy anulowaniu |
| song_id | string | pending:enhanced-upload:* w trakcie przetwarzania; prawdziwe ID utworu po zakończeniu |
| client_request_id | string | ID śledzenia żądania klienta |
| status | string | Status zadania, np. queued, processing, completed, failed, cancelled |
| type | string | Zawsze enhanced_upload |
| audio_url | string | Adres dźwięku po zakończeniu |
| duration | number | Długość dźwięku w sekundach |
| progress.stage | string | Bieżący etap przetwarzania |
| progress.percent | number | Procent postępu |
| progress.label | string | Tekst postępu pokazywany użytkownikowi |
| pre_consumed_quota | number | Limit pobrany z góry za to wywołanie |
| billing_source | string | Źródło pobrania, np. wallet |
| error_message | string | Przyczyna niepowodzenia |
Uwagi
- Obecnie punkt końcowy obsługuje wyłącznie przesyłanie plików multipart; JSON
file_urlifile_base64nie są obsługiwane. - Przesyłany plik ma maksymalnie 80 MB.
- Punkt końcowy zgłoszenia jest asynchroniczny: odpowiedź
queuedoznacza, że zadanie trafiło do kolejki, a nie że dźwięk jest gotowy. - Anulowanie dotyczy tylko zadań, które nie rozpoczęły jeszcze przetwarzania; po rozpoczęciu przetwarzania workflow konta platformy nie jest przerywany.
- Nie ujawniaj prawdziwych kluczy API w kodzie klienta.
Rozpoczęcie coveru po zakończeniu wzmocnionego wgrania
Po zakończeniu wzmocnionego wgrania możesz użyć wyniku jako clipu źródłowego i wywołać POST /api/music/generate-from-source, aby rozpocząć cover.
Uwaga: cover to punkt końcowy synchroniczny — zamówienie jest przyjmowane dopiero z nadejściem odpowiedzi, a w zmierzonych przypadkach może to potrwać do około 230 sekund. Ustaw limit czasu klienta na 300 sekund lub więcej i nie ponawiaj od razu po przekroczeniu limitu. Zobacz „Czasy oczekiwania i ustawienia limitu czasu” w Przeglądzie nowego API.
Najpierw odpytuj GET /api/music/enhanced-upload/:id, aż task.status będzie completed. Wtedy:
task.song_idto prawdziwe ID utworu i zarazemsourceClipId, którego potrzebuje punkt końcowy coveru;- warto przekazać
task.audio_urljakosourceAudioUrl, aby serwer poradził sobie z przypadkiem, gdy clip źródłowy i konto wykonujące się różnią; task.task_idto jedynie ID zadania wzmocnionego wgrania i nie może być użyte jakosourceClipId;pending:enhanced-upload:*to identyfikator zastępczy etapu przetwarzania i nie można go użyć do coveru.
Rozpoczynając cover, użyj tego samego klucza API co przy wzmocnionym wgraniu i złóż żądanie według poniższego mapowania pól.
| Pole żądania coveru | Skąd pochodzi wartość |
|---|---|
sourceClipId |
task.song_id z zakończonego wzmocnionego wgrania |
sourceAudioUrl |
task.audio_url z zakończonego wzmocnionego wgrania |
sourceTitle |
task.title z zakończonego wzmocnionego wgrania |
Pozostałe parametry (tekst, styl, tytuł, model) wypełnij zgodnie z API coveru na podstawie clipu źródłowego. Gdy punkt końcowy coveru zwróci nowe clips[].song_id, użyj POST /api/music/query, aby sprawdzić status generowania i finalny dźwięk.
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