API de încărcare întărită
Descrierea endpoint-ului
Încărcarea întărită trimite un fișier audio local; sistemul face întărirea în fundal și produce o piesă completă, redabilă. Apelul de trimitere returnează imediat informațiile sarcinii, iar clientul interoghează endpoint-ul de consultare pentru progres.
Endpoint de trimitere: POST /api/music/enhanced-upload
Consultarea unei sarcini: GET /api/music/enhanced-upload/:id
Anularea unei sarcini: POST /api/music/enhanced-upload/:id/cancel
Consultarea listei: GET /api/music/enhanced-upload
Facturare: 10 ¥ per apel, debitat în avans la prețul fix al suno-enhanced-upload. Dacă sarcina eșuează sau este anulată în etapa permisă, suma debitată în avans este returnată automat. Suma efectiv debitată urmează configurația actuală de prețuri din back-office.
Fluxul apelurilor
- Apelează
POST /api/music/enhanced-uploadpentru a încărca fișierul audio. - Salvează
task_id-ul returnat. - Apelează
GET /api/music/enhanced-upload/:idpentru a vedea progresul și rezultatul. - Când Suno termină redarea finală, serviciul folosește contul Suno asociat acelei sarcini ca să apeleze endpoint-ul de descărcare autorizată din Studio și scrie MP3-ul în serviciul media CN2.
- Sarcina devine
completeddoar când activul CN2 este pregătit; atunci adresa audio CDN se citește dinaudio_urlîn răspuns.
/api/forbidden este o adresă de rezervă care poate apărea în metadatele Suno Studio; nu este o resursă redabilă sau descărcabilă. Nu este niciodată returnată clientului și nu este folosită ca dovadă a finalizării. Dacă redarea s-a terminat, dar CN2 încă se pregătește, endpoint-ul continuă să returneze processing și nu returnează audio_url; clientul trebuie să continue interogarea și să nu considere adresa goală un eșec.
Trimiterea unei încărcări întărite
Headers
| Parametru | Tip | Obligatoriu | Observații |
|---|---|---|---|
| Authorization | string | da | Bearer YOUR_API_KEY |
| Content-Type | string | nu | Pentru cererile multipart nu îl seta manual; lasă clientul să îl genereze |
Parametri de formular
| Parametru | Tip | Obligatoriu | Implicit | Observații |
|---|---|---|---|---|
| file | file | da | - | Fișier audio local, maximum 80 MB |
| title | string | nu | numele fișierului fără extensie | Titlul piesei |
Exemplu de cerere
Exemplul de mai jos folosește aceeași formă de apel ca la validarea în producție, dar cheia API a fost înlocuită cu un substituent.
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"
Răspuns
{
"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"
}
}
Consultarea unei sarcini
Exemplu de cerere
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload/3209"
Exemplu de răspuns în timpul procesării
{
"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
}
}
}
Exemplu de răspuns finalizat
{
"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
}
}
}
Anularea unei sarcini
Anularea este posibilă doar cât timp sarcina și fluxul din backend sunt încă în etapa queued. După ce sarcina intră în leasing, running, processing sau s-a încheiat, nu mai poate fi anulată.
Exemplu de cerere
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"
Răspuns
{
"success": true,
"message": "",
"data": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"status": "cancelled"
}
}
Dacă sarcina a început deja procesarea, endpoint-ul returnează:
{
"success": false,
"message": "强化上传已开始处理,无法取消"
}
Consultarea listei de sarcini
Endpoint-ul de listă returnează doar sarcinile de încărcare întărită ale utilizatorului căruia îi aparține cheia API curentă; sarcinile de generare obișnuită, cover și extindere nu se amestecă.
Parametri de query
| Parametru | Tip | Obligatoriu | Implicit | Observații |
|---|---|---|---|---|
| p | number | nu | 1 | Numărul paginii |
| page_size | number | nu | valoarea implicită a sistemului | Elemente pe pagină, maximum 100 |
Exemplu de cerere
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"
Răspuns
{
"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
}
]
}
}
Descrierea câmpurilor din răspuns
| Câmp | Tip | Observații |
|---|---|---|
| task_id | number | ID-ul sarcinii de încărcare întărită; folosit la interogările ulterioare și la anulare |
| song_id | string | pending:enhanced-upload:* în timpul procesării; ID-ul real al piesei după finalizare |
| client_request_id | string | ID de urmărire al cererii clientului |
| status | string | Starea sarcinii, de exemplu queued, processing, completed, failed, cancelled |
| type | string | Întotdeauna enhanced_upload |
| audio_url | string | Adresa audio după finalizare |
| duration | number | Durata audio în secunde |
| progress.stage | string | Etapa de procesare curentă |
| progress.percent | number | Procentul de progres |
| progress.label | string | Textul de progres afișat utilizatorului |
| pre_consumed_quota | number | Cota debitată în avans pentru acest apel |
| billing_source | string | Sursa debitării, de exemplu wallet |
| error_message | string | Motivul eșecului |
Note
- Momentan endpoint-ul acceptă doar încărcare de fișiere multipart;
file_urlșifile_base64în JSON nu sunt acceptate. - Fișierul încărcat are maximum 80 MB.
- Endpoint-ul de trimitere este asincron: un răspuns
queuedînseamnă că sarcina a intrat în coadă, nu că audio-ul este gata. - Anularea se aplică doar sarcinilor care nu au început procesarea; după începerea procesării, fluxul contului de platformă nu este întrerupt.
- Nu expune chei API reale în codul clientului.
Pornirea unui cover după finalizarea încărcării întărite
După ce încărcarea întărită se încheie, poți folosi rezultatul ca clip sursă și apela POST /api/music/generate-from-source pentru a porni un cover.
Atenție: cover-ul este un endpoint sincron — comanda este acceptată doar la sosirea răspunsului, iar în cazurile măsurate așteptarea poate ajunge la aproximativ 230 de secunde. Setează timeout-ul clientului la 300 de secunde sau mai mult și nu reîncerca imediat după un timeout. Vezi „Timpii de așteptare și setarea timeout-ului” în Prezentarea noului API.
Mai întâi interoghează GET /api/music/enhanced-upload/:id până când task.status este completed. Atunci:
task.song_ideste ID-ul real al piesei și estesourceClipId-ul de care are nevoie endpoint-ul de cover;- se recomandă să trimiți
task.audio_urlcasourceAudioUrl, ca serverul să poată trata cazul în care clipul sursă și contul de execuție diferă; task.task_ideste doar ID-ul sarcinii de încărcare întărită și nu poate fi folosit casourceClipId;pending:enhanced-upload:*este un ID de rezervă din etapa de procesare și nu poate fi folosit pentru cover.
Când pornești cover-ul, folosește aceeași cheie API ca la încărcarea întărită și construiește cererea după corespondența de mai jos.
| Câmpul cererii de cover | De unde vine valoarea |
|---|---|
sourceClipId |
task.song_id din rezultatul finalizat al încărcării întărite |
sourceAudioUrl |
task.audio_url din rezultatul finalizat al încărcării întărite |
sourceTitle |
task.title din rezultatul finalizat al încărcării întărite |
Completează restul parametrilor (versuri, stil, titlu, model) conform API-ului de cover dintr-un clip sursă. Când endpoint-ul de cover returnează noul clips[].song_id, folosește POST /api/music/query pentru a verifica starea generării și audio-ul final.
Obține o cheie API
Creează o cheie API în consolă după înregistrare. Fiecare generare costă 0,6 ¥ și returnează 2 piese, descărcările sunt nelimitate și nu este nevoie de număr de telefon.
Obține cheia API Înapoi la prezentare