curl -X POST https://api.60db.ai/voices \
-H "Authorization: Bearer your-api-key" \
-F "name=My Custom Voice" \
-F "description=Professional voice for my brand" \
-F "language=en" \
-F "gender=female" \
-F "files=@sample1.mp3" \
-F "files=@sample2.mp3" \
-F "files=@sample3.mp3"
import { SixtyDBClient } from "60db";
const client = new SixtyDBClient("your-api-key");
const files = [
document.querySelector("#file1").files[0],
document.querySelector("#file2").files[0],
document.querySelector("#file3").files[0],
];
const voice = await client.createVoice({
name: "My Custom Voice",
description: "Professional voice for my brand",
language: "en",
gender: "female",
files: files,
});
console.log("Voice ID:", voice.id);
from sixtydb import SixtyDBClient
client = SixtyDBClient('your-api-key')
files = [
open('sample1.mp3', 'rb'),
open('sample2.mp3', 'rb'),
open('sample3.mp3', 'rb')
]
voice = client.create_voice(
name='My Custom Voice',
files=files,
description='Professional voice for my brand',
language='en',
gender='female'
)
print(f"Voice ID: {voice['id']}")
# Close files
for f in files:
f.close()
{
"id": "voice-custom-123",
"name": "My Custom Voice",
"description": "Professional voice for my brand",
"language": "en",
"gender": "female",
"status": "processing",
"is_custom": true,
"created_at": "2026-01-29T11:30:00Z",
"estimated_completion": "2026-01-29T11:45:00Z"
}
Voices
Create Voice
Create a custom voice from audio samples
POST
/
voices
curl -X POST https://api.60db.ai/voices \
-H "Authorization: Bearer your-api-key" \
-F "name=My Custom Voice" \
-F "description=Professional voice for my brand" \
-F "language=en" \
-F "gender=female" \
-F "files=@sample1.mp3" \
-F "files=@sample2.mp3" \
-F "files=@sample3.mp3"
import { SixtyDBClient } from "60db";
const client = new SixtyDBClient("your-api-key");
const files = [
document.querySelector("#file1").files[0],
document.querySelector("#file2").files[0],
document.querySelector("#file3").files[0],
];
const voice = await client.createVoice({
name: "My Custom Voice",
description: "Professional voice for my brand",
language: "en",
gender: "female",
files: files,
});
console.log("Voice ID:", voice.id);
from sixtydb import SixtyDBClient
client = SixtyDBClient('your-api-key')
files = [
open('sample1.mp3', 'rb'),
open('sample2.mp3', 'rb'),
open('sample3.mp3', 'rb')
]
voice = client.create_voice(
name='My Custom Voice',
files=files,
description='Professional voice for my brand',
language='en',
gender='female'
)
print(f"Voice ID: {voice['id']}")
# Close files
for f in files:
f.close()
{
"id": "voice-custom-123",
"name": "My Custom Voice",
"description": "Professional voice for my brand",
"language": "en",
"gender": "female",
"status": "processing",
"is_custom": true,
"created_at": "2026-01-29T11:30:00Z",
"estimated_completion": "2026-01-29T11:45:00Z"
}
Request
Headers
string
required
Bearer token with your API key
string
required
multipart/form-data
Form Data
string
required
Name for the custom voice
file[]
required
Audio files for voice cloning (minimum 3, maximum 10 files). Each file should
be: - Format: MP3, WAV, or FLAC - Duration: 10-60 seconds each - Quality:
Clear speech, minimal background noise - Total duration: At least 2 minutes
combined
string
Description of the voice
string
Primary language code (e.g., “en”, “es”)
string
Voice gender: “male”, “female”, or “neutral”
Response
string
Unique identifier for the created voice
string
Voice name
string
Processing status: “processing”, “ready”, “failed”
string
ISO 8601 timestamp
string
Estimated time for voice processing to complete
curl -X POST https://api.60db.ai/voices \
-H "Authorization: Bearer your-api-key" \
-F "name=My Custom Voice" \
-F "description=Professional voice for my brand" \
-F "language=en" \
-F "gender=female" \
-F "files=@sample1.mp3" \
-F "files=@sample2.mp3" \
-F "files=@sample3.mp3"
import { SixtyDBClient } from "60db";
const client = new SixtyDBClient("your-api-key");
const files = [
document.querySelector("#file1").files[0],
document.querySelector("#file2").files[0],
document.querySelector("#file3").files[0],
];
const voice = await client.createVoice({
name: "My Custom Voice",
description: "Professional voice for my brand",
language: "en",
gender: "female",
files: files,
});
console.log("Voice ID:", voice.id);
from sixtydb import SixtyDBClient
client = SixtyDBClient('your-api-key')
files = [
open('sample1.mp3', 'rb'),
open('sample2.mp3', 'rb'),
open('sample3.mp3', 'rb')
]
voice = client.create_voice(
name='My Custom Voice',
files=files,
description='Professional voice for my brand',
language='en',
gender='female'
)
print(f"Voice ID: {voice['id']}")
# Close files
for f in files:
f.close()
{
"id": "voice-custom-123",
"name": "My Custom Voice",
"description": "Professional voice for my brand",
"language": "en",
"gender": "female",
"status": "processing",
"is_custom": true,
"created_at": "2026-01-29T11:30:00Z",
"estimated_completion": "2026-01-29T11:45:00Z"
}
Voice Cloning Best Practices
Audio Quality
Audio Quality
- Use high-quality recordings (at least 44.1kHz sample rate) - Ensure minimal background noise - Avoid music or sound effects - Use consistent recording environment
Content Guidelines
Content Guidelines
- Include varied sentence structures - Cover different emotions and tones - Include questions, statements, and exclamations - Avoid repetitive content
Technical Requirements
Technical Requirements
- Minimum 3 files, maximum 10 files - Each file: 10-60 seconds - Total duration: At least 2 minutes - Supported formats: MP3, WAV, FLAC
Voice processing typically takes 10-15 minutes. You’ll receive a webhook
notification when your voice is ready to use.