API-ul de clonare vocală și generare cu voce indicată (nerecomandat)

Actualizat pe 2026-09-18 · echipa Suno-API

⛔ Lanț vechi, nerecomandat pentru integrări noi. Această pagină descrie lanțul persona de la început (voice_task_id / generate-with-voice). Funcționează în continuare, dar nu mai este recomandat clienților; navigarea din stânga îl marchează drept „nerecomandat".

Pentru integrări noi folosește 【Recomandat】 API-ul de profil vocal: creează un profil vocal dintr-o singură mostră vocală (POST /api/music/voice-profile/create) și folosește-l ca să faci un cover la o piesă anume sau ca să cânte o piesă nouă. Profilul vocal este o resursă de prim rang: poate fi listat, interogat și șters, iar audio-ul sursă este păstrat permanent.

Dacă produsul tău are nevoie de ciclul complet „creează o voce → reutilizeaz-o pe termen lung → fă cover-uri", alege lanțul nou.

Atenție importantă: o voce clonată poate expira.

voice_id / voice_task_id generate de clonarea vocală nu sunt o resursă utilizabilă pentru totdeauna: pot înceta să funcționeze din cauza perioadei de valabilitate, a stării contului sau a schimbării stării vocii. Cine integrează nu trebuie să cloneze o dată și apoi să refolosească la nesfârșit un ID de voce salvat local în cache.

Practica recomandată:

  • Salvează voice_task_id, voice_id, is_available, updated_at și momentul ultimei generări reușite.
  • Înainte de fiecare generare cu o voce clonată, apelează GET /api/voice/clone/tasks/{voice_task_id} sau POST /api/voice/clone/tasks/{voice_task_id}/check și confirmă is_available=true.
  • Dacă endpointul răspunde că vocea nu este disponibilă, că sarcina nu există sau returnează selected voice is not ready, cere utilizatorului să cloneze din nou sau să aleagă altă voce disponibilă.
  • Nu promite utilizatorilor finali că o voce clonată este un „activ permanent"; afișează în interfața produsului că „vocea poate expira și poate necesita o nouă validare sau o nouă clonare".

Descrierea endpoint-ului

Acest grup de endpointuri creează o voce reutilizabilă și generează piese cu ea. Cine apelează are nevoie doar de cheia API emisă de platformă; serverul se ocupă de trimiterea sarcinilor, sincronizarea stării, facturare și descărcări.

Autentificare: Authorization: Bearer YOUR_API_KEY

Facturare:

Fluxul apelurilor

  1. Apelează POST /api/voice/clone/validate pentru a încărca vocea sursă și a obține un voice_task_id.
  2. Așteaptă sau interoghează GET /api/voice/clone/tasks/{voice_task_id} până primești validate_info.
  3. Utilizatorul citește textul cu voce tare și înregistrează audio-ul de verificare.
  4. Apelează POST /api/voice/clone/tasks/{voice_task_id}/generate pentru a trimite audio-ul de verificare.
  5. Apelează POST /api/voice/clone/tasks/{voice_task_id}/check sau continuă să interoghezi sarcina până când is_available=true.
  6. Apelează POST /api/music/generate-with-voice pentru a genera o piesă cu acea voce.
  7. Endpointul de generare returnează mai întâi sarcini substituent; când generarea s-a terminat și ai song_id-ul real, poți folosi endpointurile de descărcare pentru un fișier unic sau o arhivă.
  8. (Opțional) Când vocea nu mai este necesară, apelează DELETE /api/voice/clone/voices/{voice_task_id} ca să o ștergi; semantica este în secțiunea 6.

Există și clonarea într-un pas: pe prima pagină de înregistrare/încărcare a vocii sursă din spațiul de lucru poți alege finalizarea într-un singur pas; sistemul face validarea și crearea vocii împreună, astfel încât nu mai trebuie să înregistrezi un al doilea audio de verificare; costă 5 ¥ per apel și se returnează la eșec.

Câmpurile sarcinii de voce

Câmp Tip Descriere
voice_task_id number ID-ul sarcinii de voce din platformă; toate endpointurile ulterioare folosesc acest ID
voice_id string ID-ul vocii care poate fi folosit pentru generarea de piese; este returnat când sarcina devine utilizabilă
voice_name string Numele vocii
description string Descrierea vocii
style string Stilul vocii
singer_skill_level string Nivelul vocal; valori uzuale: beginner, intermediate, professional
language string Limba vocii sursă, de exemplu zh, en
validate_info string Textul de verificare care trebuie citit cu voce tare
validate_status string Starea sarcinii de validare
voice_status string Starea creării vocii
is_available boolean Dacă poate fi deja folosită pentru a genera piese
status string Starea sarcinii pe platformă
stage string Etapa curentă
error_code string Codul de eroare la eșec
error_message string Motivul eșecului
source_duration_seconds number Durata audio-ului sursă în secunde
created_at number Marcaj de timp al creării
updated_at number Marcaj de timp al actualizării
completed_at number Marcaj de timp al finalizării

1. Trimite vocea sursă la validare

Endpoint: POST /api/voice/clone/validate

Parametri din body

Parametru Tip Obligatoriu Implicit Descriere
voice_url string Nu - URL-ul audio-ului vocii sursă. Acesta sau file_base64
file_base64 string Nu - Audio în base64. Acesta sau voice_url
file_name string Nu - Numele fișierului; recomandat când folosești file_base64
voice_name string Nu generat automat Numele vocii
description string Nu - Descrierea vocii
style string Nu - Stilul vocii
singer_skill_level string Nu beginner Nivelul vocal
language string Nu zh Limba vocii sursă
vocal_start_s number Da - Secunda de început a vocii utile
vocal_end_s number Da - Secunda de sfârșit a vocii utile
source_duration_seconds number Nu - Durata totală a audio-ului sursă în secunde

vocal_end_s - vocal_start_s trebuie să respecte cerința minimă pentru fragmentul vocal. Încarcă o înregistrare vocală curată, fără acompaniament sau zgomot evidente.

Exemplu de cerere

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": "Vocea mea feminină în chineză",
    "description": "Voce feminină în chineză, clară și naturală",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Exemplu de răspuns

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Vocea mea feminină în chineză",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Interoghează o sarcină de voce

Endpoint: GET /api/voice/clone/tasks/{voice_task_id}

Exemplu de cerere

curl https://www.suno-api.io/api/voice/clone/tasks/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Exemplu de răspuns

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Vocea mea feminină în chineză",
      "validate_info": "Citește cu voce tare textul de verificare returnat aici",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Regenerează textul de verificare

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

Se apelează când textul de verificare nu este potrivit pentru citire cu voce tare sau când validarea trebuie refăcută.

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. Trimite audio-ul de verificare și creează vocea

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/generate

Parametri din body

Parametru Tip Obligatoriu Implicit Descriere
verify_url string Nu - URL-ul audio-ului citit din textul de verificare. Acesta sau file_base64
file_base64 string Nu - Audio de verificare în base64. Acesta sau verify_url
file_name string Nu - Numele fișierului; recomandat când folosești file_base64
voice_name string Nu numele sarcinii Numele vocii
description string Nu descrierea sarcinii Descrierea vocii
style string Nu stilul sarcinii Stilul vocii
singer_skill_level string Nu setarea sarcinii Nivelul vocal

Exemplu de cerere

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": "Vocea mea feminină în chineză"
  }'

5. Verifică dacă vocea este utilizabilă

Endpoint: 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 '{}'

Când sarcina este utilizabilă, is_available din răspuns este true și se returnează un voice_id.

6. Șterge o voce

Endpoint: DELETE /api/voice/clone/voices/{voice_task_id}

Facturare: gratuit.

curl -X DELETE https://www.suno-api.io/api/voice/clone/voices/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Exemplu de răspuns

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Câmp Tip Descriere
voice_task_id number ID-ul sarcinii de voce șterse
deleted boolean Întotdeauna true; cererea de ștergere a fost acceptată

Ce se întâmplă după ștergere

7. Generează o piesă cu o voce clonată

Endpoint: POST /api/music/generate-with-voice

Facturare: 1,2 ¥ per apel.

Parametri din body

Parametru Tip Obligatoriu Implicit Descriere
voice_task_id number Da - ID-ul unei sarcini de voce deja utilizabile
voice_id string Nu - Câmp opțional de verificare; dacă îl trimiți, trebuie să coincidă cu voice_id-ul sarcinii
customMode boolean Nu false false este modul inspirație, true modul avansat
prompt string Da - În modul inspirație descrierea piesei, în modul avansat versurile. Niciunul nu poate fi gol
style string Da în modul avansat - Etichete de stil; nu poate fi gol când customMode=true
title string Da în modul avansat - Titlul piesei; nu poate fi gol când customMode=true
negativeTags string Nu - Stil de exclus
instrumental boolean Nu false Câmp de compatibilitate; generarea cu voce clonată este tratată mereu ca piesă vocală
waitAudio boolean Nu false Câmp de compatibilitate; acest endpoint returnează mereu sarcinile substituent asincron și nu așteaptă audio-ul
model string Nu suno-v6 Modelul de generare obișnuită; poți folosi suno-v6, suno-v6-wild sau suno-v6-mini
vocalGender string Nu - Preferința pentru genul vocii
lyricsMode string Nu - Câmp de compatibilitate; lanțul actual de trimitere cu voce clonată nu schimbă singur modul versurilor
weirdnessConstraint number Nu - Forța creativă
styleWeight number Nu - Greutatea stilului
audioWeight number Nu valoarea implicită a platformei Audio Influence (cât de mult contează audio-ul de referință), interval 0.0-1.0. Dacă nu este trimis, se aplică valoarea implicită a platformei (echivalent cu 25% în interfața oficială); 0 este o valoare validă și înseamnă să nu te apropii deloc de referință. Este strâns legat de sourceClipId din rândul următor: cu o sursă indică audio-ul de referință, fără sursă indică vocea clonată; platforma are doar acest singur cursor pentru ambele cazuri, așa că nu îl împărți în doi parametri după scenariu
sourceClipId string Nu - ID-ul real al clipului din spațiul de lucru pentru piesa sursă. Dacă îl trimiți, intri în cover cu voce clonată; dacă nu, este generare obișnuită cu voce clonată
sourceAudioUrl string Nu - Câmp de afișare pentru sursă; nu participă la proprietate sau la decizia de cont, serverul se bazează pe înregistrarea din baza de date
sourceTitle string Nu - Câmp de afișare pentru sursă; nu participă la proprietate sau la decizia de cont
clientSubmissionId string Nu - Câmp de compatibilitate Create UI; pentru deduplicare sigură în API-ul clientului trebuie folosit headerul Idempotency-Key

suno-v6, suno-v6-wild și suno-v6-mini sunt acceptate; un model gol este tratat ca suno-v6. Modelele vechi V5/V5.5 au fost retrase, dar sarcinile istorice pot afișa în continuare numele vechi.

Structura comună de cerere interpretează și câmpuri de compatibilitate Create UI precum task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId și voiceId, dar acestea nu sunt parametri valizi de client pentru acest endpoint: sarcina de voce trebuie trimisă ca voice_task_id, verificarea opțională a vocii ca voice_id, iar generarea muzicală cu voce nu citește niciodată câmpurile sound.

Cum se completează parametrii de generare

Parametri de header

Header Obligatoriu Descriere
Authorization: Bearer ... Da Tokenul API al clientului
Content-Type: application/json Da Corpul cererii în JSON
Idempotency-Key Nu, recomandat insistent Până la 128 de caractere. Pentru același utilizator, token, endpoint, cheie și corp, facturarea și crearea sarcinii au loc o singură dată

Comportamentul Idempotency-Key:

Condiții pentru cover cu sourceClipId

Cover-ul dintr-o sursă în API-ul clientului este gestionat integral pe server: accesul la piesa sursă este rezolvat de server, iar clientul nu trimite nicio informație de cont. Dacă este posibil decide răspunsul real al endpointului.

Sursa trebuie să aparțină utilizatorului API curent, să fie o piesă finalizată din spațiul de lucru care nu este pending: și să aibă audio utilizabil. Sunt acceptate generarea obișnuită, sursele din încărcarea obișnuită și piesa finală a unei încărcări consolidate; înregistrările intermediare ale încărcării consolidate sunt respinse înainte de facturare. Serverul acceptă doar ID-ul piesei sursă trimis de client și niciodată un ID de cont; o sursă indisponibilă sau nefinalizată returnează eroare înainte de facturare.

Exemplu de cerere

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": "Scrie o piesă pop chinezească despre malul mării într-o noapte de vară",
    "style": "Mandopop, warm piano, emotional",
    "title": "Briză de mare într-o noapte de vară",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Exemplu de răspuns

{
  "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": "Briză de mare într-o noapte de vară",
        "prompt": "Scrie o piesă pop chinezească despre malul mării într-o noapte de vară"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Briză de mare într-o noapte de vară",
        "prompt": "Scrie o piesă pop chinezească despre malul mării într-o noapte de vară"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Despre sarcinile substituent și song_id-ul final

generate-with-voice este un endpoint de generare asincronă. Un răspuns reușit înseamnă doar că sarcina de generare a fost trimisă, nu că piesa este gata.

Semnificația câmpurilor principale din răspuns:

Câmp Descriere
client_request_id ID-ul de urmărire al acestei cereri de generare. O cerere generează de obicei 2 piese, iar ambele rezultate folosesc același client_request_id.
items[].placeholder_id ID substituent local al platformei, de obicei în forma pending:{client_request_id}:{index}. Nu este ID-ul final al piesei.
items[].client_request_index Indexul rezultatului în aceeași cerere, de obicei 0 și 1.
items[].status Starea inițială după trimitere, de exemplu submitted. Succesul sau eșecul ulterior urmează înregistrarea finală a sarcinii.

Atenție: un placeholder_id care începe cu pending: nu poate fi folosit ca song_id final și nu poate fi trimis la /api/music/query sau la endpointurile de descărcare. Apelarea /api/music/query doar cu valori pending:* poate returna o matrice goală [], pentru că piesa reală nu este încă gata sau sarcina substituent nu a fost încă înlocuită cu ID-ul final.

Exemplu greșit:

{
  "song_ids": "pending:cu_1780480000_abcd1234:0"
}

Flux corect:

  1. Apelează POST /api/music/generate-with-voice pentru a trimite sarcina de generare vocală.
  2. Salvează client_request_id, items[].placeholder_id și items[].client_request_index din răspuns.
  3. Interoghează în buclă GET /api/music/generate-with-voice/results?client_request_id=cu_xxx.
  4. Când items[].song_id are o valoare care nu începe cu pending:, apelează /api/music/query, /api/music/download-file sau /api/music/download-all.

Versiunea actuală adaugă un endpoint public de interogare:

GET /api/music/generate-with-voice/results?client_request_id=cu_xxx

Returnează rezultatele sarcinilor pentru același client_request_id la utilizatorul curent, astfel încât clientul să poată găsi singur song_id-ul final. În lista returnată:

Dacă ai salvat doar client_request_id sau un ID substituent pending:*, apelează mai întâi acest endpoint de rezultate; dacă song_id-ul real tot nu apare, trimite client_request_id la suportul tehnic pentru localizare.

Interogarea rezultatelor generării vocale

Endpoint: GET /api/music/generate-with-voice/results

Facturare: gratuit.

Parametri de query

Parametru Tip Obligatoriu Descriere
client_request_id string Da ID-ul de urmărire returnat de generate-with-voice

Exemplu de cerere

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"

Exemplu de răspuns în timpul procesării

{
  "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": "Briză de mare într-o noapte de vară"
      }
    ]
  }
}

Exemplu de răspuns după finalizare

{
  "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": "Briză de mare într-o noapte de vară",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Semnificația status-ului de nivel superior

Stare Descriere
not_found Pentru utilizatorul curent nu există încă o înregistrare de sarcină cu acel client_request_id
processing Cel puțin un rezultat nu este gata; continuă interogarea
completed Toate rezultatele sunt gata; song_id poate fi interogat sau descărcat
partial Unele gata, altele eșuate; tratează mai întâi song_id-urile finalizate
failed Toate rezultatele au eșuat; verifică items[].error_message

8. Descarcă un singur fișier

Endpoint: POST /api/music/download-file

Parametri din body

Parametru Tip Obligatoriu Descriere
song_id string Da ID-ul piesei
kind string Da Tipul descărcării: audio, cover, wav, video

Exemplu de cerere

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

Răspunsul este un flux de fișier; Content-Type și numele fișierului urmează ce returnează backendul.

9. Descarcă resursele piesei ca arhivă

Endpoint: POST /api/music/download-all

Parametri din body

Parametru Tip Obligatoriu Descriere
song_id string Da ID-ul piesei

Exemplu de cerere

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

Arhiva conține de obicei audio-ul, coperta și metadata.json; dacă un tip de resursă nu a fost încă generat, nu intră în arhivă.

Erori frecvente

message Descriere
voice audio is required La trimiterea vocii sursă nu s-a furnizat nici voice_url, nici file_base64
invalid voice task id ID-ul sarcinii de voce din cale este invalid
voice validation is not ready Textul de verificare nu este încă disponibil, deci audio-ul de verificare nu poate fi trimis
selected voice is not ready Vocea aleasă nu poate genera încă piese (nu este pregătită, a fost ștearsă sau nu aparține contului curent)
selected voice does not match voice task voice_id-ul din cerere nu corespunde sarcinii
voice task is required Lipsește voice_task_id la generarea unei piese vocale
record not found Sarcina / piesa nu există, nu aparține contului cheii API curente sau a fost deja ștearsă (dacă interoghezi această sarcină după ștergerea vocii vei vedea același lucru)

Erorile acestui grup returnează întotdeauna HTTP 200: judecă rezultatul după câmpul success din corp (false înseamnă eșec, motivul este în message) și nu te uita doar la codul de stare HTTP. Semantica completă a ștergerii unei voci (dacă rămâne utilizabilă, dacă poate fi recuperată) este în secțiunea 6.

Următorul【Recomandat】 API-ul de profil vocal

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