API för röstkloning och generering med angiven röst (rekommenderas inte)

Uppdaterad 2026-09-18 · Suno-API-teamet

⛔ Äldre kedja, rekommenderas inte för nya integrationer. Den här sidan beskriver den tidiga persona-kedjan (voice_task_id / generate-with-voice). Den fungerar fortfarande, men rekommenderas inte längre till kunder; navigeringen till vänster märker den som "rekommenderas inte".

Använd 【Rekommenderas】 röstprofil-API:t för nya integrationer: skapa en röstprofil från ett röstprov (POST /api/music/voice-profile/create) och använd den för att göra en cover på en vald låt eller sjunga en ny låt. En röstprofil är en förstklassig resurs: den kan listas, hämtas och tas bort, och källljudet bevaras permanent.

Om din produkt behöver hela slingan "skapa en röst → återanvända länge → göra covers" bör du välja den nya kedjan.

Viktigt: en klonad röst kan upphöra att gälla.

voice_id / voice_task_id som röstkloningen skapar är inte en resurs som fungerar för evigt: den kan sluta fungera på grund av giltighetstiden, kontots status eller en ändring i röstens status. Den som integrerar får inte klona en gång och sedan återanvända ett lokalt cachelagrat röst-ID för alltid.

Rekommenderat arbetssätt:

  • Spara voice_task_id, voice_id, is_available, updated_at och tiden för den senaste lyckade genereringen.
  • Anropa GET /api/voice/clone/tasks/{voice_task_id} eller POST /api/voice/clone/tasks/{voice_task_id}/check före varje generering med en klonad röst och bekräfta is_available=true.
  • Om ändpunkten svarar att rösten inte är tillgänglig, att uppgiften inte finns eller returnerar selected voice is not ready, be användaren klona igen eller välja en annan tillgänglig röst.
  • Lova inte slutanvändare att en klonad röst är en "permanent tillgång"; visa i produktgränssnittet att "en röst kan upphöra att gälla och behöva valideras om eller klonas om".

Beskrivning av ändpunkten

Den här gruppen ändpunkter skapar en återanvändbar röst och genererar låtar med den. Anroparen behöver bara API-nyckeln som plattformen utfärdar; servern sköter uppgiftsinlämning, statussynkronisering, fakturering och nedladdningar.

Autentisering: Authorization: Bearer YOUR_API_KEY

Fakturering:

Anropsflöde

  1. Anropa POST /api/voice/clone/validate för att ladda upp källrösten och få ett voice_task_id.
  2. Vänta på eller polla GET /api/voice/clone/tasks/{voice_task_id} tills du får validate_info.
  3. Användaren läser texten högt och spelar in verifieringsljudet.
  4. Anropa POST /api/voice/clone/tasks/{voice_task_id}/generate för att skicka in verifieringsljudet.
  5. Anropa POST /api/voice/clone/tasks/{voice_task_id}/check eller fortsätt fråga uppgiften tills is_available=true.
  6. Anropa POST /api/music/generate-with-voice för att generera en låt med rösten.
  7. Genereringsändpunkten returnerar först platshållaruppgifter; när genereringen är klar och du har det riktiga song_id kan du hämta en enskild fil eller ett paket via nedladdningsändpunkterna.
  8. (Valfritt) När rösten inte behövs längre, anropa DELETE /api/voice/clone/voices/{voice_task_id} för att ta bort den; semantiken finns i avsnitt 6.

Det finns också kloning i ett steg: på arbetsytans första inspelnings-/uppladdningssida kan du välja att bli klar i ett svep; systemet gör då validering och röstskapande tillsammans, så du behöver inte spela in ett andra verifieringsljud; det kostar 5 ¥ per anrop och återbetalas vid fel.

Fält för röstuppgiften

Fält Typ Beskrivning
voice_task_id number Uppgifts-ID för rösten inom plattformen; alla senare ändpunkter använder detta ID
voice_id string Röst-ID som kan användas för att generera låtar; returneras när uppgiften är användbar
voice_name string Röstens namn
description string Röstens beskrivning
style string Röstens stil
singer_skill_level string Sångnivå; vanliga värden: beginner, intermediate, professional
language string Källröstens språk, till exempel zh, en
validate_info string Verifieringstexten som ska läsas högt
validate_status string Valideringsuppgiftens status
voice_status string Status för röstskapandet
is_available boolean Om rösten redan kan användas för att generera låtar
status string Uppgiftens status på plattformen
stage string Aktuell fas
error_code string Felkod vid misslyckande
error_message string Orsak till misslyckandet
source_duration_seconds number Källljudets längd i sekunder
created_at number Tidsstämpel för skapande
updated_at number Tidsstämpel för uppdatering
completed_at number Tidsstämpel för slutförande

1. Skicka in källrösten för validering

Ändpunkt: POST /api/voice/clone/validate

Brödtextparametrar

Parameter Typ Obligatorisk Standard Beskrivning
voice_url string Nej - URL till källröstens ljud. Antingen denna eller file_base64
file_base64 string Nej - Ljud i base64. Antingen denna eller voice_url
file_name string Nej - Filnamn; rekommenderas med file_base64
voice_name string Nej skapas automatiskt Röstens namn
description string Nej - Röstens beskrivning
style string Nej - Röstens stil
singer_skill_level string Nej beginner Sångnivå
language string Nej zh Källröstens språk
vocal_start_s number Ja - Startsekund för användbar sång
vocal_end_s number Ja - Slutsekund för användbar sång
source_duration_seconds number Nej - Källljudets totala längd i sekunder

vocal_end_s - vocal_start_s måste uppfylla minimikravet för sångsegmentet. Ladda upp en tydlig sånginspelning utan tydligt ackompanjemang eller brus.

Exempelbegäran

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": "Min kinesiska kvinnoröst",
    "description": "Klar och naturlig kinesisk kvinnoröst",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Exempelsvar

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Min kinesiska kvinnoröst",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Fråga en röstuppgift

Ändpunkt: GET /api/voice/clone/tasks/{voice_task_id}

Exempelbegäran

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

Exempelsvar

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Min kinesiska kvinnoröst",
      "validate_info": "Läs högt verifieringstexten som returneras här",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Skapa verifieringstexten igen

Ändpunkt: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

Anropa när verifieringstexten inte lämpar sig för högläsning eller när valideringen måste göras om.

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. Skicka in verifieringsljudet och skapa rösten

Ändpunkt: POST /api/voice/clone/tasks/{voice_task_id}/generate

Brödtextparametrar

Parameter Typ Obligatorisk Standard Beskrivning
verify_url string Nej - URL till ljudet som lästs från verifieringstexten. Antingen denna eller file_base64
file_base64 string Nej - Verifieringsljud i base64. Antingen denna eller verify_url
file_name string Nej - Filnamn; rekommenderas med file_base64
voice_name string Nej uppgiftens namn Röstens namn
description string Nej uppgiftens beskrivning Röstens beskrivning
style string Nej uppgiftens stil Röstens stil
singer_skill_level string Nej uppgiftens inställning Sångnivå

Exempelbegäran

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": "Min kinesiska kvinnoröst"
  }'

5. Kontrollera om rösten är användbar

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

När uppgiften är användbar är is_available i svaret true och ett voice_id returneras.

6. Ta bort en röst

Ändpunkt: DELETE /api/voice/clone/voices/{voice_task_id}

Fakturering: gratis.

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

Exempelsvar

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Fält Typ Beskrivning
voice_task_id number ID för den borttagna röstuppgiften
deleted boolean Alltid true; begäran om borttagning har tagits emot

Vad som händer efter borttagningen

7. Generera en låt med en klonad röst

Ändpunkt: POST /api/music/generate-with-voice

Fakturering: 1,2 ¥ per anrop.

Brödtextparametrar

Parameter Typ Obligatorisk Standard Beskrivning
voice_task_id number Ja - ID för en redan användbar röstuppgift
voice_id string Nej - Valfritt verifieringsfält; skickas det måste det matcha uppgiftens voice_id
customMode boolean Nej false false är inspirationsläge, true är avancerat läge
prompt string Ja - I inspirationsläge låtens beskrivning, i avancerat läge låttexten. Ingen av dem får vara tom
style string Ja i avancerat läge - Stiltaggar; får inte vara tomt när customMode=true
title string Ja i avancerat läge - Låtens titel; får inte vara tom när customMode=true
negativeTags string Nej - Stil som ska uteslutas
instrumental boolean Nej false Kompatibilitetsfält; generering med klonad röst behandlas alltid som en sånglåt
waitAudio boolean Nej false Kompatibilitetsfält; ändpunkten returnerar alltid platshållaruppgifter asynkront och väntar inte på ljudet
model string Nej suno-v6 Modell för vanlig låtgenerering; suno-v6, suno-v6-wild eller suno-v6-mini
vocalGender string Nej - Preferens för sångröstens kön
lyricsMode string Nej - Kompatibilitetsfält; den nuvarande inlämningskedjan för klonad röst ändrar inte låttextläget i sig
weirdnessConstraint number Nej - Kreativ styrka
styleWeight number Nej - Stilvikt
audioWeight number Nej plattformens standard Audio Influence (hur mycket referensljudet väger), intervall 0.0-1.0. Skickas det inte gäller plattformens standard (motsvarar 25 % i det officiella gränssnittet); 0 är ett giltigt värde och betyder att inte närma sig referensen alls. Det hänger starkt samman med sourceClipId i nästa rad: med en källa pekar det på referensljudet, utan källa på den klonade rösten; plattformen har bara denna enda reglage för båda fallen, så dela inte upp det i två parametrar per användningsfall
sourceClipId string Nej - Det riktiga clip-ID:t i arbetsytan för käll-låten. Skickas det går man in i cover med klonad röst; annars är det vanlig generering med klonad röst
sourceAudioUrl string Nej - Visningsfält för källan; det påverkar inte ägande eller kontobeslut, servern utgår från sin databaspost
sourceTitle string Nej - Visningsfält för källan; det påverkar inte ägande eller kontobeslut
clientSubmissionId string Nej - Kompatibilitetsfält för Create UI; för tillförlitlig deduplicering i kundens API måste headern Idempotency-Key användas

suno-v6, suno-v6-wild och suno-v6-mini stöds; en tom modell behandlas som suno-v6. De gamla modellerna V5/V5.5 är avvecklade, men historiska uppgifter kan fortfarande visa de gamla modellnamnen.

Den delade begäransstrukturen tolkar också Create UI-kompatibilitetsfält som task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId och voiceId, men de är inte giltiga kundparametrar för denna ändpunkt: en röstuppgift måste skickas som voice_task_id, en valfri röstverifiering som voice_id, och musikgenerering med röst läser aldrig sound-fälten.

Så fyller du i genereringsparametrarna

Rubrikparametrar

Rubrik Obligatorisk Beskrivning
Authorization: Bearer ... Ja Kundens API-token
Content-Type: application/json Ja JSON-brödtext
Idempotency-Key Nej, rekommenderas starkt Upp till 128 tecken. Med samma användare, token, ändpunkt, nyckel och brödtext faktureras och skapas uppgiften bara en gång

Idempotency-Key-beteende:

Villkor för cover med sourceClipId

Cover från en källa i kundens API hanteras helt på serversidan: åtkomsten till käll-låten löses av servern och kunden skickar ingen kontoinformation. Om det är möjligt avgörs av ändpunktens faktiska svar.

Källan måste tillhöra den aktuella API-användaren, vara en avslutad låt i arbetsytan som inte är pending: och ha användbart ljud. Vanlig generering, källor från vanlig uppladdning och slutet av en förstärkt uppladdning stöds; mellanposter från förstärkt uppladdning avvisas före faktureringen. Servern accepterar bara det käll-låt-ID som kunden skickar och aldrig ett konto-ID; en otillgänglig eller oavslutad källa ger fel före faktureringen.

Exempelbegäran

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": "Skriv en kinesisk poplåt om en havskant en sommarnatt",
    "style": "Mandopop, warm piano, emotional",
    "title": "Havsbris en sommarnatt",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Exempelsvar

{
  "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": "Havsbris en sommarnatt",
        "prompt": "Skriv en kinesisk poplåt om en havskant en sommarnatt"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Havsbris en sommarnatt",
        "prompt": "Skriv en kinesisk poplåt om en havskant en sommarnatt"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Om platshållaruppgifter och det slutliga song_id

generate-with-voice är en asynkron genereringsändpunkt. Ett lyckat svar betyder bara att genereringsuppgiften har skickats in, inte att låten är klar.

Betydelsen av svarets viktigaste fält:

Fält Beskrivning
client_request_id Spårnings-ID för denna genereringsbegäran. En begäran skapar oftast 2 låtar och båda resultaten använder samma client_request_id.
items[].placeholder_id Plattformens lokala platshållar-ID, oftast i formen pending:{client_request_id}:{index}. Det är inte låtens slutliga ID.
items[].client_request_index Resultatets index inom samma begäran, oftast 0 och 1.
items[].status Startstatus efter inlämning, till exempel submitted. Senare framgång eller misslyckande följer uppgiftens slutliga post.

Obs: ett placeholder_id som börjar med pending: kan inte användas som slutligt song_id och inte heller skickas till /api/music/query eller nedladdningsändpunkterna. Att anropa /api/music/query enbart med pending:* kan ge en tom array [], eftersom den riktiga låten inte är klar än eller platshållaruppgiften ännu inte ersatts av det slutliga låt-ID:t.

Felaktigt exempel:

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

Rätt flöde:

  1. Anropa POST /api/music/generate-with-voice för att skicka in röstgenereringsuppgiften.
  2. Spara client_request_id, items[].placeholder_id och items[].client_request_index från svaret.
  3. Polla GET /api/music/generate-with-voice/results?client_request_id=cu_xxx.
  4. När items[].song_id har ett värde som inte börjar med pending:, anropa /api/music/query, /api/music/download-file eller /api/music/download-all.

Den aktuella versionen lägger till en publik frågeändpunkt:

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

Den returnerar uppgiftsresultaten för samma client_request_id under den aktuella användaren, så att kunden själv kan slå upp det slutliga song_id. I den returnerade listan:

Om du bara sparade client_request_id eller ett pending:*-platshållar-ID, anropa först denna resultatändpunkt; om det riktiga song_id fortfarande inte hittas, skicka client_request_id till teknisk support för lokalisering.

Fråga resultaten av röstgenereringen

Ändpunkt: GET /api/music/generate-with-voice/results

Fakturering: gratis.

Frågeparametrar

Parameter Typ Obligatorisk Beskrivning
client_request_id string Ja Spårnings-ID som generate-with-voice returnerade

Exempelbegäran

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"

Exempelsvar medan genereringen pågår

{
  "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": "Havsbris en sommarnatt"
      }
    ]
  }
}

Exempelsvar när genereringen är klar

{
  "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": "Havsbris en sommarnatt",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Betydelsen av status på översta nivån

Status Beskrivning
not_found För den aktuella användaren finns ännu ingen uppgiftspost med det client_request_id:t
processing Minst ett resultat är inte klart; fortsätt polla
completed Alla resultat är klara; song_id kan frågas eller laddas ner
partial Vissa klara, vissa misslyckade; hantera de klara song_id-värdena först
failed Alla resultat misslyckades; se items[].error_message

8. Ladda ner en enskild fil

Ändpunkt: POST /api/music/download-file

Brödtextparametrar

Parameter Typ Obligatorisk Beskrivning
song_id string Ja Låtens ID
kind string Ja Nedladdningstyp: audio, cover, wav, video

Exempelbegäran

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

Svaret är en filström; Content-Type och filnamn följer vad backend returnerar.

9. Ladda ner låtens resurser som ett paket

Ändpunkt: POST /api/music/download-all

Brödtextparametrar

Parameter Typ Obligatorisk Beskrivning
song_id string Ja Låtens ID

Exempelbegäran

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

Paketet innehåller oftast ljudet, omslaget och metadata.json; om en resurstyp ännu inte skapats tas den inte med i arkivet.

Vanliga fel

message Beskrivning
voice audio is required Vid inlämning av källrösten angavs varken voice_url eller file_base64
invalid voice task id Röstuppgiftens ID i sökvägen är ogiltigt
voice validation is not ready Verifieringstexten finns ännu inte, så verifieringsljudet kan inte skickas in
selected voice is not ready Den valda rösten kan ännu inte generera låtar (inte redo, borttagen eller tillhör inte det aktuella kontot)
selected voice does not match voice task voice_id i begäran matchar inte uppgiften
voice task is required voice_task_id saknas när en röstlåt genereras
record not found Uppgiften / låten finns inte, tillhör inte kontot för den aktuella API-nyckeln eller har redan tagits bort (frågar du uppgiften efter att rösten tagits bort ser du samma sak)

Fel i den här gruppen returnerar alltid HTTP 200: bedöm resultatet med fältet success i svaret (false betyder misslyckande, orsaken finns i message) och titta inte bara på HTTP-statuskoden. Den fullständiga semantiken för att ta bort en röst (om den fortfarande är användbar, om den kan återställas) finns i avsnitt 6.

Nästa【Rekommenderas】 röstprofil-API

Skaffa en API-nyckel

Skapa en API-nyckel i konsolen efter registreringen. Varje generering kostar 0,6 ¥ och returnerar 2 spår, nedladdningar är obegränsade och inget telefonnummer krävs.

Hämta API-nyckel Tillbaka till översikten