curl -X GET "https://dubsmart.ai/api/v1/upload?region=EU&fileExtension=mp3" \
-H "Authorization: Bearer YOUR_API_KEY"
# Response:
{
"url": "https://storage.dubsmart.ai/voice-cloning/...",
"key": "voice-cloning/user_id/filename.mp3"
}
# Upload file
curl -X PUT -T your_audio_file.mp3 "https://storage.dubsmart.ai/voice-cloning/..."curl -X POST "https://dubsmart.ai/api/v1/custom-voices/create" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Custom Voice",
"examplePath": "voice-cloning/user_id/filename.mp3"
}'
# Response:
{
"id": "67c123...",
"name": "My Custom Voice",
"examplePath": "https://...",
"createdAt": "2024-01-15T10:30:00Z"
}'curl -X POST "https://dubsmart.ai/api/v1/projects/tts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "My TTS Project",
"segments": [
{
"text": "Hello world!",
"voice": "67c123...",
"language": "en"
}
]
}'/uploadQuery Parameters:
- region: string (default: "EU")
- fileExtension: string (mp3, wav, aac, m4a, flac){
"url": "https://storage.dubsmart.ai/voice-cloning/...",
"key": "voice-cloning/user_id/filename.mp3"
}/custom-voices/create{
"name": "My Custom Voice",
"examplePath": "voice-cloning/user_id/filename.mp3"
}{
"id": "67c123...",
"name": "My Custom Voice",
"examplePath": "https://...",
"createdAt": "2024-01-15T10:30:00Z"
}/custom-voices/list{
"limit": 10,
"cursor": "cursor_value"
}{
"items": [
{
"id": "custom_voice_id",
"name": "My Custom Voice",
"examplePath": "https://...",
"createdAt": "2024-01-15T10:30:00Z"
}
],
"nextCursor": "next_cursor_value"
}/custom-voices/{id}Path Parameters:
- id: string (voice ID){
"id": "custom_voice_id",
"success": true
}// JavaScript/Node.js Example
const axios = require('axios');
const API_KEY = 'your_api_key_here';
const BASE_URL = 'https://dubsmart.ai/api/v1';
async function createCustomVoice() {
try {
// Step 1: Get upload URL
const uploadResponse = await axios.get(`${BASE_URL}/upload`, {
params: {
region: 'EU',
fileExtension: 'mp3'
},
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
console.log('Upload URL:', uploadResponse.data.url);
// Step 2: Upload audio file (you would use the presigned URL here)
// This is typically done with a PUT request to the presigned URL
// Step 3: Create custom voice
const voiceResponse = await axios.post(`${BASE_URL}/custom-voices/create`, {
name: 'My Custom Voice',
examplePath: uploadResponse.data.key
}, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
console.log('Custom voice created:', voiceResponse.data);
// Step 4: List custom voices
const voicesResponse = await axios.post(`${BASE_URL}/custom-voices/list`, {
limit: 10
}, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
console.log('Custom voices:', voicesResponse.data.items);
return voiceResponse.data;
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
// Usage
createCustomVoice();# Python Example
import requests
import json
API_KEY = 'your_api_key_here'
BASE_URL = 'https://dubsmart.ai/api/v1'
def create_custom_voice():
headers = {'Authorization': f'Bearer {API_KEY}'}
try:
# Step 1: Get upload URL
upload_response = requests.get(f'{BASE_URL}/upload',
params={'region': 'EU', 'fileExtension': 'mp3'},
headers=headers
)
upload_data = upload_response.json()
print(f"Upload URL: {upload_data['url']}")
# Step 2: Upload audio file (you would use the presigned URL here)
# This is typically done with a PUT request to the presigned URL
# Step 3: Create custom voice
voice_data = {
'name': 'My Custom Voice',
'examplePath': upload_data['key']
}
voice_response = requests.post(f'{BASE_URL}/custom-voices/create',
json=voice_data,
headers=headers
)
voice_result = voice_response.json()
print(f"Custom voice created: {voice_result}")
# Step 4: List custom voices
list_data = {'limit': 10}
voices_response = requests.post(f'{BASE_URL}/custom-voices/list',
json=list_data,
headers=headers
)
voices_result = voices_response.json()
print(f"Custom voices: {voices_result['items']}")
return voice_result
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# Usage
create_custom_voice()# cURL Examples
# Step 1: Get upload URL
curl -X GET "https://dubsmart.ai/api/v1/upload?region=EU&fileExtension=mp3" \
-H "Authorization: Bearer YOUR_API_KEY"
# Response:
# {
# "url": "https://storage.dubsmart.ai/voice-cloning/...",
# "key": "voice-cloning/user_id/filename.mp3"
# }
# Step 2: Upload audio file
curl -X PUT -T your_audio_file.mp3 "https://storage.dubsmart.ai/voice-cloning/..."
# Step 3: Create custom voice
curl -X POST "https://dubsmart.ai/api/v1/custom-voices/create" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Custom Voice",
"examplePath": "voice-cloning/user_id/filename.mp3"
}'
# Response:
# {
# "id": "67c123...",
# "name": "My Custom Voice",
# "examplePath": "https://...",
# "createdAt": "2024-01-15T10:30:00Z"
# }
# Step 4: List custom voices
curl -X POST "https://dubsmart.ai/api/v1/custom-voices/list" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"limit": 10}'
# Step 5: Delete custom voice
curl -X DELETE "https://dubsmart.ai/api/v1/custom-voices/VOICE_ID" \
-H "Authorization: Bearer YOUR_API_KEY"<?php
// PHP Example
$apiKey = 'your_api_key_here';
$baseUrl = 'https://dubsmart.ai/api/v1';
function createCustomVoice($apiKey, $baseUrl) {
$headers = [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
];
try {
// Step 1: Get upload URL
$uploadUrl = $baseUrl . '/upload?region=EU&fileExtension=mp3';
$uploadResponse = file_get_contents($uploadUrl, false, stream_context_create([
'http' => [
'method' => 'GET',
'header' => $headers
]
]));
$uploadData = json_decode($uploadResponse, true);
echo "Upload URL: " . $uploadData['url'] . "\n";
// Step 2: Upload audio file (you would use the presigned URL here)
// This is typically done with a PUT request to the presigned URL
// Step 3: Create custom voice
$voiceData = [
'name' => 'My Custom Voice',
'examplePath' => $uploadData['key']
];
$voiceContext = stream_context_create([
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => json_encode($voiceData)
]
]);
$voiceResponse = file_get_contents($baseUrl . '/custom-voices/create', false, $voiceContext);
$voiceResult = json_decode($voiceResponse, true);
echo "Custom voice created: " . json_encode($voiceResult) . "\n";
// Step 4: List custom voices
$listData = ['limit' => 10];
$listContext = stream_context_create([
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => json_encode($listData)
]
]);
$voicesResponse = file_get_contents($baseUrl . '/custom-voices/list', false, $listContext);
$voicesResult = json_decode($voicesResponse, true);
echo "Custom voices: " . json_encode($voicesResult['items']) . "\n";
return $voiceResult;
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
}
}
// Usage
createCustomVoice($apiKey, $baseUrl);
?>