API di caricamento potenziato
Descrizione dell'endpoint
Il caricamento potenziato invia un file audio locale; il sistema esegue il potenziamento in background e produce un brano completo e riproducibile. La chiamata di invio restituisce subito le informazioni dell'attività e il client interroga l'endpoint di consultazione per il progresso.
Endpoint di invio: POST /api/music/enhanced-upload
Consultazione di un'attività: GET /api/music/enhanced-upload/:id
Annullamento di un'attività: POST /api/music/enhanced-upload/:id/cancel
Consultazione dell'elenco: GET /api/music/enhanced-upload
Fatturazione: 10 ¥ per chiamata, addebitati in anticipo al prezzo fisso di suno-enhanced-upload. Se l'attività fallisce, o viene annullata nella fase consentita, l'importo addebitato in anticipo viene rimborsato automaticamente. L'importo effettivamente addebitato segue la configurazione prezzi attuale del back-office.
Flusso di chiamata
- Chiama
POST /api/music/enhanced-uploadper inviare il file audio. - Salva il
task_idrestituito. - Chiama
GET /api/music/enhanced-upload/:idper consultare progresso e risultato. - Quando Suno ha terminato il rendering finale, il servizio usa l'account Suno associato a quell'attività per chiamare l'endpoint di download autorizzato di Studio e scrive l'MP3 nel servizio media CN2.
- L'attività passa a
completedsolo quando l'asset CN2 è pronto; a quel punto leggi l'indirizzo audio CDN daaudio_urlnella risposta.
/api/forbidden è un indirizzo segnaposto che può comparire nei metadati di Suno Studio; non è una risorsa riproducibile né scaricabile. Non viene mai restituito al cliente e non è usato come prova di completamento. Se il rendering è terminato ma CN2 sta ancora preparando, l'endpoint continua a restituire processing e non restituisce audio_url; il client deve continuare a interrogare e non considerare l'indirizzo vuoto un errore.
Inviare un caricamento potenziato
Headers
| Parametro | Tipo | Obbligatorio | Note |
|---|---|---|---|
| Authorization | string | sì | Bearer YOUR_API_KEY |
| Content-Type | string | no | Nelle richieste multipart non impostarlo a mano; lascia che lo generi il client |
Parametri del form
| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
| file | file | sì | - | File audio locale, massimo 80 MB |
| title | string | no | nome del file senza estensione | Titolo del brano |
Esempio di richiesta
L'esempio seguente usa la stessa forma di chiamata della validazione in produzione, ma la chiave API è stata sostituita da un segnaposto.
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"
Risposta
{
"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"
}
}
Consultare un'attività
Esempio di richiesta
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload/3209"
Esempio di risposta in elaborazione
{
"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
}
}
}
Esempio di risposta completata
{
"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
}
}
}
Annullare un'attività
Si può annullare solo finché sia l'attività sia il flusso del backend sono nella fase queued. Una volta che l'attività entra in leasing, running, processing o è già completata, non è più annullabile.
Esempio di richiesta
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"
Risposta
{
"success": true,
"message": "",
"data": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"status": "cancelled"
}
}
Se l'attività ha già iniziato l'elaborazione, l'endpoint restituisce:
{
"success": false,
"message": "强化上传已开始处理,无法取消"
}
Consultare l'elenco delle attività
L'endpoint di elenco restituisce solo le attività di caricamento potenziato dell'utente a cui appartiene la chiave API corrente; le attività di generazione ordinaria, cover ed extend non vengono mescolate.
Parametri di query
| Parametro | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
| p | number | no | 1 | Numero di pagina |
| page_size | number | no | predefinito di sistema | Elementi per pagina, massimo 100 |
Esempio di richiesta
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"
Risposta
{
"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
}
]
}
}
Riferimento dei campi della risposta
| Campo | Tipo | Note |
|---|---|---|
| task_id | number | ID dell'attività di caricamento potenziato; da usare per le consultazioni e l'annullamento successivi |
| song_id | string | pending:enhanced-upload:* durante l'elaborazione; l'ID reale del brano una volta completata |
| client_request_id | string | ID di tracciamento della richiesta del client |
| status | string | Stato dell'attività, come queued, processing, completed, failed, cancelled |
| type | string | Sempre enhanced_upload |
| audio_url | string | Indirizzo audio una volta completata |
| duration | number | Durata audio in secondi |
| progress.stage | string | Fase di elaborazione corrente |
| progress.percent | number | Percentuale di avanzamento |
| progress.label | string | Testo di avanzamento mostrato all'utente |
| pre_consumed_quota | number | Quota addebitata in anticipo per questa chiamata |
| billing_source | string | Origine dell'addebito, per esempio wallet |
| error_message | string | Motivo del fallimento |
Note
- Attualmente l'endpoint supporta solo l'upload di file multipart;
file_urlefile_base64in JSON non sono supportati. - Il file inviato può pesare al massimo 80 MB.
- L'endpoint di invio è asincrono: una risposta
queuedsignifica che l'attività è in coda, non che l'audio sia pronto. - L'annullamento vale solo per le attività che non hanno ancora iniziato l'elaborazione; una volta avviata l'elaborazione il flusso dell'account della piattaforma non viene interrotto.
- Non esporre chiavi API reali nel codice del client.
Avviare un cover al termine del caricamento potenziato
Quando il caricamento potenziato è terminato, puoi usare il risultato come clip di origine e chiamare POST /api/music/generate-from-source per avviare un cover.
Attenzione: il cover è un endpoint sincrono — l'ordine viene accettato solo all'arrivo della risposta, e nei casi misurati può attendere fino a circa 230 secondi. Imposta il timeout del client a 300 secondi o più e non ritentare subito dopo un timeout. Vedi «Tempi di attesa e impostazione del timeout» nella Panoramica della nuova API.
Interroga prima GET /api/music/enhanced-upload/:id finché task.status non è completed. A quel punto:
task.song_idè l'ID reale del brano ed è ilsourceClipIdrichiesto dall'endpoint di cover;- conviene passare
task.audio_urlcomesourceAudioUrl, così il server può gestire il caso in cui il clip di origine e l'account di esecuzione non coincidono; task.task_idè solo l'ID dell'attività di caricamento potenziato e non può essere usato comesourceClipId;pending:enhanced-upload:*è un ID segnaposto della fase di elaborazione e non può essere usato per un cover.
Per avviare il cover usa la stessa chiave API del caricamento potenziato e componi la richiesta secondo la corrispondenza seguente:
| Campo della richiesta di cover | Da dove viene il valore |
|---|---|
sourceClipId |
task.song_id dal risultato completato del caricamento potenziato |
sourceAudioUrl |
task.audio_url dal risultato completato del caricamento potenziato |
sourceTitle |
task.title dal risultato completato del caricamento potenziato |
Compila gli altri parametri (testo, stile, titolo, modello) secondo l'API di cover da un clip di origine. Quando l'endpoint di cover restituisce il nuovo clips[].song_id, usa POST /api/music/query per consultare lo stato di generazione e l'audio finale.
Ottenere una chiave API
Dopo la registrazione puoi creare una chiave API nella console. Ogni generazione costa 0,6 ¥ e restituisce 2 brani, i download sono illimitati e non serve un numero di telefono.
Ottieni chiave API Torna alla panoramica