API przesyłania dźwięku źródłowego
Opis punktu końcowego
Przesyłanie dźwięku źródłowego zamienia lokalny lub zdalny plik audio w clip źródłowy, którego mogą użyć kolejne funkcje: cover, przedłużanie, zamiana fragmentu, rozdzielanie i inne.
Punkt końcowy: POST /api/music/upload-source
Rozliczenie: Bezpłatne. Ten punkt końcowy tylko przesyła dźwięk źródłowy; nie rozpoczyna zadania generowania.
Zalecane użycie: to krok 1 «coveru dwuetapowego». Najpierw prześlij dźwięk tym punktem końcowym (bezpłatnie, a w razie niepowodzenia możesz ponawiać w dowolnym momencie) i zapisz zwrócony
clip_id; po potwierdzeniu, że przesyłanie się powiodło (statusw stanie ukończonym), wywołaj API coveru na podstawie clipu źródłowego, aby rozpocząć cover — ciało tego żądania ma tylko kilkaset bajtów, więc nie zostanie ucięte w tranzycie z powodu zbyt dużego pliku audio. W porównaniu z jednorazowym API „prześlij i zrób cover" taki podział jest stabilniejszy, gdy dźwięk jest duży, sieć niestabilna albo ten sam materiał ma być użyty wielokrotnie (przedłużanie / zamiana / rozdzielanie).
Wskazówki dla dużych plików
| Sytuacja | Zalecane podejście |
|---|---|
| Dźwięk jest już publiczny (ma bezpośredni link https) | Użyj file_url: ciało żądania ma tylko kilkaset bajtów, najstabilniejsza opcja |
| Tymczasowy podpisany URL (ByteDance i inne) | Używaj file_url tylko gdy URL jest publiczny i nadal ważny; w przeciwnym razie użyj multipart lub wyślij od razu |
| Plik lokalny (Node / Python / komputer) | Użyj przesyłania multipart (-F "file=@source.mp3") i nie ustawiaj ręcznie Content-Type |
| Możliwe tylko JSON + base64 | Pamiętaj, że Content-Length musi być liczbą bajtów (Buffer.byteLength), inaczej ciało żądania może zostać ucięte |
Po zakończeniu przesyłania zawsze potwierdź, że status w odpowiedzi jest już stanem ukończonym, i zapisz clip_id, zanim przejdziesz do kroku 2;
nieudane przesyłanie nie jest rozliczane i nie tworzy zadania generowania — wystarczy ponowić.
Sprawdź file_url przed przesłaniem
To nasz serwer pobiera
file_urlprzez HTTP, a nie przeglądarka. Działający w przeglądarce URL nie musi być dostępny z serwerów produkcyjnych.
Dla plików lokalnych używaj wysyłania multipart z polem file. Nie używaj file_url dla linków ByteDance ani tymczasowych podpisanych URL, chyba że są publicznie dostępne i nadal ważne podczas wysyłania żądania.
Uruchom to na publicznym serwerze przed wysłaniem żądania uploadu:
curl -L --max-time 30 -D - -o /dev/null "https://example.com/source.mp3"
Żądanie GET musi zakończyć się HTTP 200, zwrócić typ MIME audio i zawierać dane. Strony logowania, HTML oraz kody 401, 403, 404 i 410 nie mogą być użyte przez serwer.
file_url download failed: HTTP 404 zwykle oznacza wygaśnięcie podpisu, usunięcie pliku lub niepełne parametry URL.
To przesyłanie jest bezpłatne. Jeśli pobranie file_url się nie powiedzie, nie powstaje clip_id, zadanie utworu ani wywołanie generowania i nie pobierana jest opłata; zwrot nie jest potrzebny.
Parametry żądania
Headers
Dla żądań JSON:
| Parametr | Typ | Wymagany | Uwagi |
|---|---|---|---|
| Authorization | string | tak | Bearer YOUR_API_KEY |
| Content-Type | string | tak | application/json |
W żądaniach multipart nie ustawiaj Content-Type ręcznie; klient generuje go automatycznie.
Parametry body
| Parametr | Typ | Wymagany | Domyślnie | Uwagi |
|---|---|---|---|---|
| model | string | nie | suno-v6 | Nazwa modelu dla klienta: suno-v6, suno-v6-wild lub suno-v6-mini |
| file_url | string | nie | - | URL zdalnego dźwięku |
| file_base64 | string | nie | - | Dźwięk w Base64 |
| file | plik (multipart) | nie | - | Przesyłany plik audio; nazwa pola musi mieć wartość file |
| file_name | string | nie | - | Nazwa pliku |
| upload_type | string | nie | file_upload | Typ przesyłania |
Przykład żądania JSON
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"file_url": "https://example.com/source.mp3",
"file_name": "source.mp3",
"upload_type": "file_upload"
}'
Przykład żądania multipart
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@source.mp3" \
-F "file_name=source.mp3" \
-F "upload_type=file_upload" \
-F "model=suno-v6"
import requests
with open("source.mp3", "rb") as audio:
response = requests.post(
"https://www.suno-api.io/api/music/upload-source",
headers={"Authorization": "Bearer YOUR_API_KEY"},
data={
"file_name": "source.mp3",
"upload_type": "file_upload",
"model": "suno-v6",
},
files={"file": ("source.mp3", audio, "audio/mpeg")},
timeout=300,
)
response.raise_for_status()
print(response.json())
Odpowiedź
{
"clip_id": "uploaded_clip_id",
"status": "complete",
"title": "source.mp3",
"image_url": "https://...",
"audio_url": "https://...",
"display_tags": "pop, vocal",
"inferred_description": "uploaded source audio",
"clip_metadata": {}
}
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