API di clonazione vocale e generazione con voce indicata (non consigliato)

Aggiornato il 2026-09-18 · team Suno-API

⛔ Catena precedente, non consigliata per le nuove integrazioni. Questa pagina descrive la catena persona iniziale (voice_task_id / generate-with-voice). Funziona ancora, ma non è più consigliata ai clienti; il menu di sinistra la segnala come «non consigliato».

Per le nuove integrazioni usa l'【Consigliato】 API profilo vocale: crea un profilo vocale da un campione di voce (POST /api/music/voice-profile/create) e usalo per fare una cover di un brano scelto o per cantarne uno nuovo. Il profilo vocale è una risorsa di prima classe: si può elencare, leggere ed eliminare, e il suo audio di origine viene conservato in modo permanente.

Se il tuo prodotto richiede il ciclo completo «creare una voce → riutilizzarla a lungo → fare cover», dai priorità alla catena nuova.

Avviso importante: una voce clonata può scadere.

Il voice_id / voice_task_id prodotto dalla clonazione vocale non è una risorsa utilizzabile per sempre: può smettere di funzionare per la durata di validità, lo stato dell'account o i cambiamenti dello stato della voce. Chi integra non deve clonare una volta e poi riutilizzare per sempre un ID voce salvato in cache locale.

Prassi consigliata:

  • Salva voice_task_id, voice_id, is_available, updated_at e l'ora dell'ultima generazione riuscita.
  • Prima di ogni generazione con una voce clonata, chiama GET /api/voice/clone/tasks/{voice_task_id} o POST /api/voice/clone/tasks/{voice_task_id}/check e verifica is_available=true.
  • Se l'endpoint restituisce voce non disponibile, attività inesistente o selected voice is not ready, invita l'utente a clonare di nuovo o a scegliere un'altra voce disponibile.
  • Non promettere all'utente finale che una voce clonata sia un «asset permanente»; mostra nell'interfaccia del prodotto che «la voce può scadere e richiedere una nuova verifica o una nuova clonazione».

Descrizione dell'endpoint

Questo gruppo di endpoint crea una voce riutilizzabile e genera brani con essa. Chi chiama ha bisogno solo della chiave API emessa dalla piattaforma; il server gestisce invio delle attività, sincronizzazione dello stato, fatturazione e download.

Autenticazione: Authorization: Bearer YOUR_API_KEY

Fatturazione:

Sequenza di chiamate

  1. Chiama POST /api/voice/clone/validate per caricare la voce di origine e ottenere un voice_task_id.
  2. Attendi o interroga GET /api/voice/clone/tasks/{voice_task_id} fino a ottenere validate_info.
  3. L'utente legge quel testo ad alta voce e registra l'audio di verifica.
  4. Chiama POST /api/voice/clone/tasks/{voice_task_id}/generate per inviare l'audio di verifica.
  5. Chiama POST /api/voice/clone/tasks/{voice_task_id}/check o continua a interrogare l'attività finché is_available=true.
  6. Chiama POST /api/music/generate-with-voice per generare un brano con quella voce.
  7. L'endpoint di generazione restituisce prima attività segnaposto; quando la generazione è finita e hai il song_id reale, puoi usare gli endpoint di download per ottenere un singolo file o un pacchetto.
  8. (Facoltativo) Quando la voce non serve più, chiama DELETE /api/voice/clone/voices/{voice_task_id} per eliminarla; la semantica è nella sezione 6.

Esiste anche la clonazione in un passo: nella prima pagina di registrazione/caricamento della voce dell'area di lavoro puoi scegliere di completare tutto in una volta; il sistema esegue insieme verifica e creazione della voce, così non devi registrare un secondo audio di verifica; costa 5 ¥ per chiamata e in caso di errore viene rimborsato.

Campi dell'attività voce

Campo Tipo Note
voice_task_id number ID dell'attività voce nella piattaforma; tutti gli endpoint successivi usano questo ID
voice_id string ID voce utilizzabile per generare brani; viene restituito quando l'attività è disponibile
voice_name string Nome della voce
description string Descrizione della voce
style string Stile della voce
singer_skill_level string Livello di canto; valori comuni: beginner, intermediate, professional
language string Lingua della voce di origine, ad esempio zh, en
validate_info string Testo di verifica da leggere ad alta voce
validate_status string Stato dell'attività di verifica
voice_status string Stato di creazione della voce
is_available boolean Se è già utilizzabile per generare brani
status string Stato dell'attività sulla piattaforma
stage string Fase corrente
error_code string Codice di errore in caso di fallimento
error_message string Motivo del fallimento
source_duration_seconds number Durata dell'audio di origine in secondi
created_at number Timestamp di creazione
updated_at number Timestamp di aggiornamento
completed_at number Timestamp di completamento

1. Inviare la voce di origine alla verifica

Endpoint: POST /api/voice/clone/validate

Parametri del corpo

Parametro Tipo Obbligatorio Predefinito Note
voice_url string No - URL dell'audio della voce di origine. Questo oppure file_base64
file_base64 string No - Audio in base64. Questo oppure voice_url
file_name string No - Nome file; consigliato con file_base64
voice_name string No generato automaticamente Nome della voce
description string No - Descrizione della voce
style string No - Stile della voce
singer_skill_level string No beginner Livello di canto
language string No zh Lingua della voce di origine
vocal_start_s number Sì - Secondo di inizio della voce utile
vocal_end_s number Sì - Secondo di fine della voce utile
source_duration_seconds number No - Durata totale dell'audio di origine in secondi

vocal_end_s - vocal_start_s deve rispettare il minimo del frammento vocale. Carica una registrazione vocale pulita, senza accompagnamento o rumore evidenti.

Esempio di richiesta

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": "La mia voce femminile in cinese",
    "description": "Voce femminile in cinese, chiara e naturale",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Esempio di risposta

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "La mia voce femminile in cinese",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Interrogare un'attività voce

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

Esempio di richiesta

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

Esempio di risposta

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "La mia voce femminile in cinese",
      "validate_info": "Leggi ad alta voce il testo di verifica restituito qui",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Rigenerare il testo di verifica

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

Da chiamare quando il testo di verifica non è adatto alla lettura ad alta voce o quando serve rifare la verifica.

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. Inviare l'audio di verifica e creare la voce

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

Parametri del corpo

Parametro Tipo Obbligatorio Predefinito Note
verify_url string No - URL dell'audio letto dal testo di verifica. Questo oppure file_base64
file_base64 string No - Audio di verifica in base64. Questo oppure verify_url
file_name string No - Nome file; consigliato con file_base64
voice_name string No nome dell'attività Nome della voce
description string No descrizione dell'attività Descrizione della voce
style string No stile dell'attività Stile della voce
singer_skill_level string No impostazione dell'attività Livello di canto

Esempio di richiesta

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": "La mia voce femminile in cinese"
  }'

5. Verificare se la voce è utilizzabile

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

Quando l'attività è utilizzabile, is_available nella risposta è true e viene restituito un voice_id.

6. Eliminare una voce

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

Fatturazione: gratuita.

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

Esempio di risposta

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Campo Tipo Note
voice_task_id number ID dell'attività voce eliminata
deleted boolean Sempre true: la richiesta di eliminazione è stata accettata

Cosa succede dopo l'eliminazione

7. Generare un brano con una voce clonata

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

Fatturazione: 1,2 ¥ per chiamata.

Parametri del corpo

Parametro Tipo Obbligatorio Predefinito Note
voice_task_id number Sì - ID di un'attività voce già disponibile
voice_id string No - Campo di verifica facoltativo; se lo invii deve coincidere con il voice_id dell'attività
customMode boolean No false false è la modalità ispirazione, true quella avanzata
prompt string Sì - In modalità ispirazione la descrizione del brano, in modalità avanzata il testo. Nessuno dei due può essere vuoto
style string Sì in modalità avanzata - Tag di stile; non può essere vuoto quando customMode=true
title string Sì in modalità avanzata - Titolo del brano; non può essere vuoto quando customMode=true
negativeTags string No - Stile da escludere
instrumental boolean No false Campo di compatibilità; la generazione con voce clonata è sempre trattata come brano cantato
waitAudio boolean No false Campo di compatibilità; questo endpoint restituisce sempre le attività segnaposto in modo asincrono e non attende l'audio
model string No suno-v6 Modello di generazione normale; puoi usare suno-v6, suno-v6-wild o suno-v6-mini
vocalGender string No - Preferenza sul genere vocale
lyricsMode string No - Campo di compatibilità; l'attuale catena di invio con voce clonata non cambia da sé la modalità del testo
weirdnessConstraint number No - Forza creativa
styleWeight number No - Peso dello stile
audioWeight number No valore predefinito della piattaforma Audio Influence (quanto conta l'audio di riferimento), intervallo 0.0-1.0. Se non viene inviato, si applica il valore predefinito della piattaforma (equivalente al 25% nell'interfaccia ufficiale); 0 è un valore valido e significa non avvicinarsi affatto al riferimento. È strettamente legato al sourceClipId della riga successiva: con una sorgente punta all'audio di riferimento, senza sorgente punta alla voce clonata; la piattaforma ha solo questo cursore per entrambi i casi, quindi non dividerlo in due parametri per caso d'uso
sourceClipId string No - ID reale del clip nell'area di lavoro del brano di origine. Se lo invii si entra nella cover con voce clonata; altrimenti è generazione normale con voce clonata
sourceAudioUrl string No - Campo di presentazione della sorgente; non partecipa alla proprietà né alla decisione sull'account, il server si basa sul proprio record nel database
sourceTitle string No - Campo di presentazione della sorgente; non partecipa alla proprietà né alla decisione sull'account
clientSubmissionId string No - Campo di compatibilità Create UI; per una deduplicazione affidabile nell'API client va usato l'header Idempotency-Key

Sono supportati suno-v6, suno-v6-wild e suno-v6-mini; un modello vuoto viene trattato come suno-v6. I vecchi modelli V5/V5.5 sono ritirati, ma le attività storiche possono ancora mostrare i nomi vecchi.

La struttura di richiesta condivisa interpreta anche campi di compatibilità Create UI come task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId e voiceId, ma non sono parametri client validi per questo endpoint: l'attività voce va inviata come voice_task_id, la verifica facoltativa della voce come voice_id, e la generazione musicale con voce non legge mai i campi sound.

Come compilare i parametri di generazione

Parametri header

Header Obbligatorio Note
Authorization: Bearer ... Sì Token dell'API client
Content-Type: application/json Sì Corpo JSON
Idempotency-Key No, fortemente consigliato Fino a 128 caratteri. Con stesso utente, token, endpoint, chiave e corpo si fattura e si crea l'attività una sola volta

Comportamento di Idempotency-Key:

Condizioni per la cover con sourceClipId

La cover da una sorgente nell'API client è gestita interamente dal server: l'accesso al brano di origine viene risolto lato server e il cliente non invia alcun dato di account. Se sia possibile lo decide la risposta reale dell'endpoint.

La sorgente deve appartenere all'utente API corrente, essere un brano dell'area di lavoro completato e non pending:, e avere audio utilizzabile. Sono supportate la generazione normale, le sorgenti da caricamento normale e il brano finale del caricamento potenziato; i record intermedi del caricamento potenziato vengono rifiutati prima della fatturazione. Il server accetta solo l'ID del brano di origine inviato dal cliente e mai un ID account; una sorgente non disponibile o non completata restituisce errore prima della fatturazione.

Esempio di richiesta

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": "Scrivi una canzone pop cinese su un litorale in una notte d'estate",
    "style": "Mandopop, warm piano, emotional",
    "title": "Brezza di mare in una notte d'estate",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Esempio di risposta

{
  "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": "Brezza di mare in una notte d'estate",
        "prompt": "Scrivi una canzone pop cinese su un litorale in una notte d'estate"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Brezza di mare in una notte d'estate",
        "prompt": "Scrivi una canzone pop cinese su un litorale in una notte d'estate"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Attività segnaposto e song_id finale

generate-with-voice è un endpoint di generazione asincrona. Una risposta riuscita significa solo che l'attività di generazione è stata inviata, non che il brano sia pronto.

Significato dei campi chiave della risposta:

Campo Note
client_request_id ID di tracciamento di questa richiesta di generazione. Una richiesta genera di norma 2 brani e i due risultati condividono lo stesso client_request_id.
items[].placeholder_id ID segnaposto locale della piattaforma, di norma nella forma pending:{client_request_id}:{index}. Non è l'ID finale del brano.
items[].client_request_index Indice del risultato nella stessa richiesta, di norma 0 e 1.
items[].status Stato iniziale dopo l'invio, ad esempio submitted. Il successivo esito dipende dal record finale dell'attività.

Attenzione: un placeholder_id che inizia con pending: non può essere usato come song_id finale né passato a /api/music/query o agli endpoint di download. Chiamare /api/music/query solo con valori pending:* può restituire un array vuoto [], perché il brano reale non è ancora pronto o l'attività segnaposto non è ancora stata sostituita dall'ID finale.

Esempio errato:

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

Sequenza corretta:

  1. Chiama POST /api/music/generate-with-voice per inviare l'attività di generazione con voce.
  2. Salva client_request_id, items[].placeholder_id e items[].client_request_index dalla risposta.
  3. Interroga in ciclo GET /api/music/generate-with-voice/results?client_request_id=cu_xxx.
  4. Quando items[].song_id ha un valore che non inizia con pending:, chiama /api/music/query, /api/music/download-file o /api/music/download-all.

La versione attuale aggiunge un endpoint pubblico di consultazione:

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

Restituisce i risultati delle attività con lo stesso client_request_id per l'utente corrente, così il cliente può recuperare da sé il song_id finale. Nell'elenco restituito:

Se hai salvato solo il client_request_id o un ID segnaposto pending:*, chiama prima questo endpoint dei risultati; se il song_id reale continua a non comparire, invia il client_request_id al supporto tecnico per la localizzazione.

Consultare i risultati della generazione con voce

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

Fatturazione: gratuita.

Parametri query

Parametro Tipo Obbligatorio Note
client_request_id string Sì ID di tracciamento restituito da generate-with-voice

Esempio di richiesta

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"

Esempio di risposta in elaborazione

{
  "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": "Brezza di mare in una notte d'estate"
      }
    ]
  }
}

Esempio di risposta completata

{
  "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": "Brezza di mare in una notte d'estate",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Significato dello status di primo livello

Stato Note
not_found Per l'utente corrente non esiste ancora alcun record di attività con quel client_request_id
processing Almeno un risultato non è completato; continua a interrogare
completed Tutti i risultati sono completati; puoi consultare o scaricare con il song_id
partial Alcuni completati e altri falliti; gestisci prima i song_id completati
failed Tutti i risultati sono falliti; controlla items[].error_message

8. Scaricare un singolo file

Endpoint: POST /api/music/download-file

Parametri del corpo

Parametro Tipo Obbligatorio Note
song_id string Sì ID del brano
kind string Sì Tipo di download: audio, cover, wav, video

Esempio di richiesta

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

La risposta è un flusso di file; Content-Type e nome del file seguono ciò che restituisce il backend.

9. Scaricare le risorse del brano in un pacchetto

Endpoint: POST /api/music/download-all

Parametri del corpo

Parametro Tipo Obbligatorio Note
song_id string Sì ID del brano

Esempio di richiesta

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

Il pacchetto contiene di norma l'audio, la copertina e metadata.json; se un tipo di risorsa non è ancora stato generato, non entra nell'archivio.

Errori comuni

message Note
voice audio is required All'invio della voce di origine non è stato fornito né voice_url né file_base64
invalid voice task id L'ID attività voce nel percorso non è valido
voice validation is not ready Il testo di verifica non è ancora disponibile, quindi non si può inviare l'audio di verifica
selected voice is not ready La voce scelta non può ancora generare brani (non pronta, eliminata o non appartenente all'account corrente)
selected voice does not match voice task Il voice_id nella richiesta non coincide con l'attività
voice task is required Manca voice_task_id durante la generazione di un brano con voce
record not found L'attività / il brano non esiste, non appartiene all'account della chiave API corrente, oppure è già stato eliminato (interrogando questa attività dopo aver eliminato la voce si vede lo stesso)

Gli errori di questo gruppo restituiscono sempre HTTP 200: giudica l'esito dal campo success nel corpo (false indica fallimento, con il motivo in message) e non basarti solo sul codice di stato HTTP. La semantica completa dell'eliminazione di una voce (se resta utilizzabile, se è recuperabile) è nella sezione 6.

Avanti【Consigliato】 API profilo vocale

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