Custom Voice Cloning
Create a custom voice model by submitting verified voice audio. Clones the vocal characteristics, timbre, and singing articulation from the sample to generate a reusable voice ID for music generation tasks.
Custom Voice Creation Workflow
Obtain a security validation phrase from /doc/suno-voice-validate to confirm ownership of the vocal sample.
Submit your task_id and verify_url to extract vocal resonance, formant curves, and singing style.
Receive a permanent voiceId. Use it with persona_model: "voice_persona" in any Suno music generation.
Validation Rules & Constraints
Audio Quality Best Practices
- Provide dry, acapella singing recordings without background instrumentals or heavy reverb.
- Supported audio formats include high-fidelity WAV and MP3 files.
- Ensure the audio URL is publicly accessible over HTTPS without token redirects.
Validation & Pipeline Rules
task_idis required and links to your voice validation phrase task.- Use the returned
voiceIdaspersona_idwithpersona_model: "voice_persona". - Using Webhooks (
callBackUrl) is strongly recommended due to async model training latency.
Authentication & Headers
| Header | Requirement | Description |
|---|---|---|
| Authorization | required | Bearer YOUR_API_KEY Secret API Key obtained from your Suno API dashboard. |
| Content-Type | required | application/json Request payload format. |
Request Body Schema
8 fieldstask_idstringrequiredUnique validation task identifier obtained from the verification phrase step (/doc/suno-voice-validate).
verify_urlstringoptionalPublicly accessible URL to the user recording reciting the validation phrase (MP3 or WAV).
voice_namestringoptionalDisplay name for the custom voice model (e.g. "Aria - Pop Vocalist").
descriptionstringoptionalDetailed description of the vocal characteristics, dynamic range, and vocal timbre.
stylestringoptionalMusical genre, style tags, or vocal delivery cues (e.g. "Pop, Modern, Crisp Highs").
singer_skill_levelstringoptionalSkill level benchmark for the custom voice model (e.g. "professional", "standard").
taskTypestringoptionalTask routing identifier. Explicitly set to "suno_voice_generate".
callBackUrlstringoptionalPublic HTTPS webhook URL to receive asynchronous completion notifications when custom voice generation finishes.
When Callbacks Are Sent
The SongMesh API automatically triggers an HTTP POST request to your designated callBackUrl under these events:
- Verification phrase audio downloaded and validated
- Voice timbre training and pitch curve extraction started
- Voice model generated successfully with voiceId (code: 200)
- Task failed due to invalid phrase recording or background noise (code: 400, 500, 501)
Webhook Payload Format
{
"code": 200,
"msg": "success",
"data": {
"taskId": "voice_task_8f9a0b1c2d3e4f5a6b7c",
"voiceId": "voice_4a5b6c7d8e9f0123456789ab",
"voice_name": "Aria - Pop Vocalist",
"status": "success"
}
}Callback Payload Fields
| Field | Type | Description |
|---|---|---|
code | integer | Status code (200: Success, 400: Validation error, 408: Timeout, 500: Server error, 501: Voice training failed). |
msg | string | Execution message ("success" or specific error reason). |
data.taskId | string | Unique task identifier corresponding to the taskId returned when submitting the creation task. |
data.voiceId | string | The created custom Voice ID. Use this with persona_model: "voice_persona" in music generation. |
data.voice_name | string | The assigned display name for the custom voice. |
data.status | string | Task execution state: "success", "failed", or "processing". |
Receiver Implementation Example
// Next.js App Router Webhook Receiver (/api/webhook/suno/route.ts)
import { NextRequest, NextResponse } from 'next/server';
export async function POST(req: NextRequest) {
const payload = await req.json();
const { code, msg, data } = payload;
if (code === 200 && (data?.voiceId || data?.voice_id)) {
const voiceId = data.voiceId || data.voice_id;
console.log(`Custom voice "${data.voice_name}" generated! Voice ID: ${voiceId}`);
// Save voiceId to your user profile or database.
// In future generation requests, pass this ID as persona_id with persona_model: "voice_persona":
// { "persona_id": voiceId, "persona_model": "voice_persona", ... }
} else {
console.error(`Voice generation failed (${code}): ${msg}`);
}
return NextResponse.json({ received: true });
}Webhook Security Recommendation
Always verify incoming webhook payloads on your server. Respond with a 200 OK immediately after parsing the payload to prevent redundant delivery retries from the webhook dispatcher.
curl -X POST "https://api.sunoapi.top/api/v1/createTask" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"taskType": "suno_voice_generate",
"task_id": "val_7a8b9c1d2e3f4a5b6c7d",
"verify_url": "https://example.com/audio/user_voice_sample.wav",
"voice_name": "Aria - Pop Vocalist",
"description": "Bright, crystal clear female soprano singing voice with smooth articulation and modern pop timbre",
"style": "Pop, Modern, Crisp Highs",
"singer_skill_level": "professional",
"callBackUrl": "https://api.yourdomain.com/webhook/suno"
}'{
"code": 200,
"msg": "success",
"data": {
"taskId": "voice_task_8f9a0b1c2d3e4f5a6b7c"
}
}Ready to clone custom voices?
Create your account, obtain your API key, and begin building custom singing voices with Suno AI.