# List all voices
curl "https://api.vibepeak.ai/v1/voices" \
-H "Authorization: Bearer vpk_live_xxxxx"
# List public female voices in English
curl "https://api.vibepeak.ai/v1/voices?type=public&gender=female&language=en" \
-H "Authorization: Bearer vpk_live_xxxxx"
# List cloned voices with pagination
curl "https://api.vibepeak.ai/v1/voices?type=cloned&limit=10&offset=0" \
-H "Authorization: Bearer vpk_live_xxxxx"
// List all voices
const response = await fetch('https://api.vibepeak.ai/v1/voices', {
headers: {
'Authorization': 'Bearer vpk_live_xxxxx'
}
});
const data = await response.json();
console.log(`Found ${data.pagination.total} voices`);
for (const voice of data.voices) {
console.log(`${voice.name} (${voice.voice_id}) - ${voice.language}`);
}
// Filter by gender and language
const filteredResponse = await fetch(
'https://api.vibepeak.ai/v1/voices?type=public&gender=female&language=en',
{ headers: { 'Authorization': 'Bearer vpk_live_xxxxx' } }
);
const filteredData = await filteredResponse.json();
console.log(`Found ${filteredData.pagination.total} female English voices`);
// Paginate through all voices
async function getAllVoices(type = 'all') {
const voices = [];
let offset = 0;
const limit = 50;
while (true) {
const res = await fetch(
`https://api.vibepeak.ai/v1/voices?type=${type}&limit=${limit}&offset=${offset}`,
{ headers: { 'Authorization': 'Bearer vpk_live_xxxxx' } }
);
const data = await res.json();
voices.push(...data.voices);
if (!data.pagination.has_more) break;
offset += limit;
}
return voices;
}
import requests
# List all voices
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
data = response.json()
print(f"Found {data['pagination']['total']} voices")
for voice in data['voices']:
print(f"{voice['name']} ({voice['voice_id']}) - {voice['language']}")
# Filter by gender and language
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
params={'type': 'public', 'gender': 'female', 'language': 'en'},
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
filtered_data = response.json()
print(f"Found {filtered_data['pagination']['total']} female English voices")
# Paginate through all cloned voices
def get_all_voices(voice_type='all'):
voices = []
offset = 0
limit = 50
while True:
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
params={'type': voice_type, 'limit': limit, 'offset': offset},
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
data = response.json()
voices.extend(data['voices'])
if not data['pagination']['has_more']:
break
offset += limit
return voices
{
"voices": [
{
"voice_id": "TpuSXADBOG1Nx1grSvue",
"name": "MimiMoses",
"type": "public",
"language": "en",
"accent": "american",
"age": "middle_aged",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/preview.mp3"
},
{
"voice_id": "EXAVITQu4vr4xnSDxMaL",
"name": "Sarah",
"type": "public",
"language": "en",
"accent": "american",
"age": "young",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/sarah-preview.mp3"
}
],
"pagination": {
"total": 150,
"limit": 20,
"offset": 0,
"has_more": true
}
}
{
"voices": [
{
"voice_id": "abc123-def456-ghi789",
"name": "My Custom Voice",
"type": "cloned",
"language": "en",
"accent": null,
"age": null,
"gender": "female",
"preview_url": null
}
],
"pagination": {
"total": 2,
"limit": 20,
"offset": 0,
"has_more": false
}
}
{
"voices": [
{
"voice_id": "abc123-def456-ghi789",
"name": "My Custom Voice",
"type": "cloned",
"language": "en",
"accent": null,
"age": null,
"gender": "female",
"preview_url": null
},
{
"voice_id": "TpuSXADBOG1Nx1grSvue",
"name": "MimiMoses",
"type": "public",
"language": "en",
"accent": "american",
"age": "middle_aged",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/preview.mp3"
}
],
"pagination": {
"total": 152,
"limit": 20,
"offset": 0,
"has_more": true
}
}
{
"voices": [],
"pagination": {
"total": 0,
"limit": 20,
"offset": 0,
"has_more": false
}
}
{
"error": {
"code": "INVALID_PARAMETER",
"message": "Invalid value for 'type'. Must be 'public', 'cloned', or 'all'.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid or missing API key.",
"request_id": "req_xyz123"
}
}
Voices
List Voices
Retrieve a paginated list of voices available for video narration
GET
/
v1
/
voices
# List all voices
curl "https://api.vibepeak.ai/v1/voices" \
-H "Authorization: Bearer vpk_live_xxxxx"
# List public female voices in English
curl "https://api.vibepeak.ai/v1/voices?type=public&gender=female&language=en" \
-H "Authorization: Bearer vpk_live_xxxxx"
# List cloned voices with pagination
curl "https://api.vibepeak.ai/v1/voices?type=cloned&limit=10&offset=0" \
-H "Authorization: Bearer vpk_live_xxxxx"
// List all voices
const response = await fetch('https://api.vibepeak.ai/v1/voices', {
headers: {
'Authorization': 'Bearer vpk_live_xxxxx'
}
});
const data = await response.json();
console.log(`Found ${data.pagination.total} voices`);
for (const voice of data.voices) {
console.log(`${voice.name} (${voice.voice_id}) - ${voice.language}`);
}
// Filter by gender and language
const filteredResponse = await fetch(
'https://api.vibepeak.ai/v1/voices?type=public&gender=female&language=en',
{ headers: { 'Authorization': 'Bearer vpk_live_xxxxx' } }
);
const filteredData = await filteredResponse.json();
console.log(`Found ${filteredData.pagination.total} female English voices`);
// Paginate through all voices
async function getAllVoices(type = 'all') {
const voices = [];
let offset = 0;
const limit = 50;
while (true) {
const res = await fetch(
`https://api.vibepeak.ai/v1/voices?type=${type}&limit=${limit}&offset=${offset}`,
{ headers: { 'Authorization': 'Bearer vpk_live_xxxxx' } }
);
const data = await res.json();
voices.push(...data.voices);
if (!data.pagination.has_more) break;
offset += limit;
}
return voices;
}
import requests
# List all voices
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
data = response.json()
print(f"Found {data['pagination']['total']} voices")
for voice in data['voices']:
print(f"{voice['name']} ({voice['voice_id']}) - {voice['language']}")
# Filter by gender and language
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
params={'type': 'public', 'gender': 'female', 'language': 'en'},
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
filtered_data = response.json()
print(f"Found {filtered_data['pagination']['total']} female English voices")
# Paginate through all cloned voices
def get_all_voices(voice_type='all'):
voices = []
offset = 0
limit = 50
while True:
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
params={'type': voice_type, 'limit': limit, 'offset': offset},
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
data = response.json()
voices.extend(data['voices'])
if not data['pagination']['has_more']:
break
offset += limit
return voices
{
"voices": [
{
"voice_id": "TpuSXADBOG1Nx1grSvue",
"name": "MimiMoses",
"type": "public",
"language": "en",
"accent": "american",
"age": "middle_aged",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/preview.mp3"
},
{
"voice_id": "EXAVITQu4vr4xnSDxMaL",
"name": "Sarah",
"type": "public",
"language": "en",
"accent": "american",
"age": "young",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/sarah-preview.mp3"
}
],
"pagination": {
"total": 150,
"limit": 20,
"offset": 0,
"has_more": true
}
}
{
"voices": [
{
"voice_id": "abc123-def456-ghi789",
"name": "My Custom Voice",
"type": "cloned",
"language": "en",
"accent": null,
"age": null,
"gender": "female",
"preview_url": null
}
],
"pagination": {
"total": 2,
"limit": 20,
"offset": 0,
"has_more": false
}
}
{
"voices": [
{
"voice_id": "abc123-def456-ghi789",
"name": "My Custom Voice",
"type": "cloned",
"language": "en",
"accent": null,
"age": null,
"gender": "female",
"preview_url": null
},
{
"voice_id": "TpuSXADBOG1Nx1grSvue",
"name": "MimiMoses",
"type": "public",
"language": "en",
"accent": "american",
"age": "middle_aged",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/preview.mp3"
}
],
"pagination": {
"total": 152,
"limit": 20,
"offset": 0,
"has_more": true
}
}
{
"voices": [],
"pagination": {
"total": 0,
"limit": 20,
"offset": 0,
"has_more": false
}
}
{
"error": {
"code": "INVALID_PARAMETER",
"message": "Invalid value for 'type'. Must be 'public', 'cloned', or 'all'.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid or missing API key.",
"request_id": "req_xyz123"
}
}
Retrieves a paginated list of voices. You can request public voices from our voice library, your custom cloned voices, or both.
See Error Handling for more details.
Query Parameters
string
default:"all"
The type of voices to retrieve.Allowed values:
public, cloned, allpublic: Public library voices available to all userscloned: Your custom cloned voicesall: Both public and cloned voices (default)
string
Filter voices by gender.Allowed values:
male, femalestring
Filter voices by age group.Allowed values:
young, middle_aged, oldstring
Filter voices by language (ISO 639-1 code).Allowed values:
en, es, pt, de, fr, it, cainteger
default:"20"
Maximum number of voices to return per page.Range: 1-100
integer
default:"0"
Number of voices to skip (for pagination).Minimum: 0
Response
array
required
List of voice objects.
Show Voice properties
Show Voice properties
string
Unique identifier for the voice. Use this ID when creating videos with narration.
string
Display name of the voice.
string
Voice type:
public or cloned.string
Primary language of the voice (ISO 639-1 code).
string | null
Accent of the voice (e.g., “american”, “british”). May be
null if not specified.string | null
Age group of the voice:
young, middle_aged, or old. May be null if not specified.string | null
Gender of the voice:
male or female. May be null if not specified.string | null
URL to a sample audio clip of the voice. May be
null for cloned voices.object
required
# List all voices
curl "https://api.vibepeak.ai/v1/voices" \
-H "Authorization: Bearer vpk_live_xxxxx"
# List public female voices in English
curl "https://api.vibepeak.ai/v1/voices?type=public&gender=female&language=en" \
-H "Authorization: Bearer vpk_live_xxxxx"
# List cloned voices with pagination
curl "https://api.vibepeak.ai/v1/voices?type=cloned&limit=10&offset=0" \
-H "Authorization: Bearer vpk_live_xxxxx"
// List all voices
const response = await fetch('https://api.vibepeak.ai/v1/voices', {
headers: {
'Authorization': 'Bearer vpk_live_xxxxx'
}
});
const data = await response.json();
console.log(`Found ${data.pagination.total} voices`);
for (const voice of data.voices) {
console.log(`${voice.name} (${voice.voice_id}) - ${voice.language}`);
}
// Filter by gender and language
const filteredResponse = await fetch(
'https://api.vibepeak.ai/v1/voices?type=public&gender=female&language=en',
{ headers: { 'Authorization': 'Bearer vpk_live_xxxxx' } }
);
const filteredData = await filteredResponse.json();
console.log(`Found ${filteredData.pagination.total} female English voices`);
// Paginate through all voices
async function getAllVoices(type = 'all') {
const voices = [];
let offset = 0;
const limit = 50;
while (true) {
const res = await fetch(
`https://api.vibepeak.ai/v1/voices?type=${type}&limit=${limit}&offset=${offset}`,
{ headers: { 'Authorization': 'Bearer vpk_live_xxxxx' } }
);
const data = await res.json();
voices.push(...data.voices);
if (!data.pagination.has_more) break;
offset += limit;
}
return voices;
}
import requests
# List all voices
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
data = response.json()
print(f"Found {data['pagination']['total']} voices")
for voice in data['voices']:
print(f"{voice['name']} ({voice['voice_id']}) - {voice['language']}")
# Filter by gender and language
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
params={'type': 'public', 'gender': 'female', 'language': 'en'},
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
filtered_data = response.json()
print(f"Found {filtered_data['pagination']['total']} female English voices")
# Paginate through all cloned voices
def get_all_voices(voice_type='all'):
voices = []
offset = 0
limit = 50
while True:
response = requests.get(
'https://api.vibepeak.ai/v1/voices',
params={'type': voice_type, 'limit': limit, 'offset': offset},
headers={'Authorization': 'Bearer vpk_live_xxxxx'}
)
data = response.json()
voices.extend(data['voices'])
if not data['pagination']['has_more']:
break
offset += limit
return voices
{
"voices": [
{
"voice_id": "TpuSXADBOG1Nx1grSvue",
"name": "MimiMoses",
"type": "public",
"language": "en",
"accent": "american",
"age": "middle_aged",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/preview.mp3"
},
{
"voice_id": "EXAVITQu4vr4xnSDxMaL",
"name": "Sarah",
"type": "public",
"language": "en",
"accent": "american",
"age": "young",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/sarah-preview.mp3"
}
],
"pagination": {
"total": 150,
"limit": 20,
"offset": 0,
"has_more": true
}
}
{
"voices": [
{
"voice_id": "abc123-def456-ghi789",
"name": "My Custom Voice",
"type": "cloned",
"language": "en",
"accent": null,
"age": null,
"gender": "female",
"preview_url": null
}
],
"pagination": {
"total": 2,
"limit": 20,
"offset": 0,
"has_more": false
}
}
{
"voices": [
{
"voice_id": "abc123-def456-ghi789",
"name": "My Custom Voice",
"type": "cloned",
"language": "en",
"accent": null,
"age": null,
"gender": "female",
"preview_url": null
},
{
"voice_id": "TpuSXADBOG1Nx1grSvue",
"name": "MimiMoses",
"type": "public",
"language": "en",
"accent": "american",
"age": "middle_aged",
"gender": "female",
"preview_url": "https://storage.googleapis.com/eleven-public-prod/database/user/voices/preview.mp3"
}
],
"pagination": {
"total": 152,
"limit": 20,
"offset": 0,
"has_more": true
}
}
{
"voices": [],
"pagination": {
"total": 0,
"limit": 20,
"offset": 0,
"has_more": false
}
}
{
"error": {
"code": "INVALID_PARAMETER",
"message": "Invalid value for 'type'. Must be 'public', 'cloned', or 'all'.",
"request_id": "req_xyz123"
}
}
{
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid or missing API key.",
"request_id": "req_xyz123"
}
}
Usage with Video Creation
Once you’ve retrieved the voice list, use the voicevoice_id when creating videos:
// 1. List available voices
const voicesResponse = await fetch(
'https://api.vibepeak.ai/v1/voices?type=public&gender=female&language=en',
{ headers: { 'Authorization': 'Bearer vpk_live_xxxxx' } }
);
const { voices } = await voicesResponse.json();
// 2. Select a voice and create a video
const selectedVoice = voices[0];
const videoResponse = await fetch('https://api.vibepeak.ai/v1/real-estate/narrated-slideshow', {
method: 'POST',
headers: {
'Authorization': 'Bearer vpk_live_xxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
images: ['https://example.com/image1.jpg', /* ... */],
script: 'Welcome to this beautiful property...',
voice: { voice_id: selectedVoice.voice_id }, // Use the voice_id here
style: 'do-not-modify'
})
});
Error Codes
| Code | Status | Description |
|---|---|---|
INVALID_PARAMETER | 400 | Invalid value for type, gender, age, language, limit, or offset |
VALIDATION_ERROR | 400 | Query parameter validation failed |
INVALID_API_KEY | 401 | Invalid or missing API key |
⌘I

