Create a voice clone from an audio file upload
Creates a new voice clone by uploading an audio file directly. Supported formats: WAV, MP3, FLAC, OGG, M4A. For best results, provide 5–10 seconds of clear speech. Maximum file size: 2MB.
import Telnyx from 'telnyx';
const client = new Telnyx({
apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});
const response = await client.voiceClones.createFromUpload({
audio_file: fs.createReadStream('path/to/file'),
language: 'lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf',
name: 'name',
});
console.log(response.data);import os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)
response = client.voice_clones.create_from_upload(
audio_file=b"Example data",
language="lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
name="name",
)
print(response.data)package main
import (
"bytes"
"context"
"fmt"
"io"
"github.com/team-telnyx/telnyx-go"
"github.com/team-telnyx/telnyx-go/option"
)
func main() {
client := telnyx.NewClient(
option.WithAPIKey("My API Key"),
)
response, err := client.VoiceClones.NewFromUpload(context.TODO(), telnyx.VoiceCloneNewFromUploadParams{
AudioFile: io.Reader(bytes.NewBuffer([]byte("Example data"))),
Language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
Name: "name",
})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.Data)
}package com.telnyx.sdk.example;
import com.telnyx.sdk.client.TelnyxClient;
import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;
import com.telnyx.sdk.models.voiceclones.VoiceCloneCreateFromUploadParams;
import com.telnyx.sdk.models.voiceclones.VoiceCloneCreateFromUploadResponse;
import java.io.ByteArrayInputStream;
public final class Main {
private Main() {}
public static void main(String[] args) {
TelnyxClient client = TelnyxOkHttpClient.fromEnv();
VoiceCloneCreateFromUploadParams params = VoiceCloneCreateFromUploadParams.builder()
.audioFile(new ByteArrayInputStream("Example data".getBytes()))
.language("lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf")
.name("name")
.build();
VoiceCloneCreateFromUploadResponse response = client.voiceClones().createFromUpload(params);
}
}require "telnyx"
telnyx = Telnyx::Client.new(api_key: "My API Key")
response = telnyx.voice_clones.create_from_upload(
audio_file: StringIO.new("Example data"),
language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
name: "name"
)
puts(response)telnyx voice-clones create-from-upload \
--api-key 'My API Key' \
--audio-file 'Example data' \
--language lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf \
--name namecurl --request POST \
--url https://api.telnyx.com/v2/voice_clones/from_upload \
--header 'Content-Type: multipart/form-data' \
--form audio_file='@example-file' \
--form 'name=<string>' \
--form 'language=<string>' \
--form 'ref_text=<string>' \
--form 'label=<string>' \
--form provider=telnyx<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.telnyx.com/v2/voice_clones/from_upload",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_text\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"label\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"provider\"\r\n\r\ntelnyx\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data; boundary=---011000010111000001101001"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"record_type": "voice_clone",
"id": "660f9511-f3ac-52e5-b827-557766551111",
"source_voice_design_id": "550e8400-e29b-41d4-a716-446655440000",
"source_voice_design_version": 1,
"name": "clone-narrator",
"language": "en",
"gender": "male",
"label": "Speak in a warm, friendly tone",
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"provider": "Telnyx",
"provider_supported_models": [
"Qwen3TTS"
],
"provider_voice_id": "660f9511-f3ac-52e5-b827-557766551111"
}
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}Body
Multipart form data for creating a voice clone from a direct audio upload.
Audio file to clone the voice from. Supported formats: WAV, MP3, FLAC, OGG, M4A. For best quality, provide 5–10 seconds of clear, uninterrupted speech. Maximum size: 5MB for Telnyx, 20MB for Minimax.
Name for the voice clone.
255ISO 639-1 language code (e.g. en, fr) or auto for automatic detection.
^([Aa]uto|[a-z]{2,3}(-[A-Za-z0-9]{2,8})*)$Gender of the voice clone.
male, female, neutral Optional transcript of the audio file. Providing this improves clone quality.
Optional custom label describing the voice style. If omitted, falls back to the source design's prompt text.
Voice synthesis provider. Case-insensitive. Defaults to telnyx.
telnyx, minimax, Telnyx, Minimax Response
Voice clone created successfully from the uploaded audio.
Response envelope for a single voice clone.
A voice clone object.
Show child attributes
Show child attributes
Was this page helpful?
import Telnyx from 'telnyx';
const client = new Telnyx({
apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});
const response = await client.voiceClones.createFromUpload({
audio_file: fs.createReadStream('path/to/file'),
language: 'lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf',
name: 'name',
});
console.log(response.data);import os
from telnyx import Telnyx
client = Telnyx(
api_key=os.environ.get("TELNYX_API_KEY"), # This is the default and can be omitted
)
response = client.voice_clones.create_from_upload(
audio_file=b"Example data",
language="lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
name="name",
)
print(response.data)package main
import (
"bytes"
"context"
"fmt"
"io"
"github.com/team-telnyx/telnyx-go"
"github.com/team-telnyx/telnyx-go/option"
)
func main() {
client := telnyx.NewClient(
option.WithAPIKey("My API Key"),
)
response, err := client.VoiceClones.NewFromUpload(context.TODO(), telnyx.VoiceCloneNewFromUploadParams{
AudioFile: io.Reader(bytes.NewBuffer([]byte("Example data"))),
Language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
Name: "name",
})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.Data)
}package com.telnyx.sdk.example;
import com.telnyx.sdk.client.TelnyxClient;
import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;
import com.telnyx.sdk.models.voiceclones.VoiceCloneCreateFromUploadParams;
import com.telnyx.sdk.models.voiceclones.VoiceCloneCreateFromUploadResponse;
import java.io.ByteArrayInputStream;
public final class Main {
private Main() {}
public static void main(String[] args) {
TelnyxClient client = TelnyxOkHttpClient.fromEnv();
VoiceCloneCreateFromUploadParams params = VoiceCloneCreateFromUploadParams.builder()
.audioFile(new ByteArrayInputStream("Example data".getBytes()))
.language("lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf")
.name("name")
.build();
VoiceCloneCreateFromUploadResponse response = client.voiceClones().createFromUpload(params);
}
}require "telnyx"
telnyx = Telnyx::Client.new(api_key: "My API Key")
response = telnyx.voice_clones.create_from_upload(
audio_file: StringIO.new("Example data"),
language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
name: "name"
)
puts(response)telnyx voice-clones create-from-upload \
--api-key 'My API Key' \
--audio-file 'Example data' \
--language lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf \
--name namecurl --request POST \
--url https://api.telnyx.com/v2/voice_clones/from_upload \
--header 'Content-Type: multipart/form-data' \
--form audio_file='@example-file' \
--form 'name=<string>' \
--form 'language=<string>' \
--form 'ref_text=<string>' \
--form 'label=<string>' \
--form provider=telnyx<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.telnyx.com/v2/voice_clones/from_upload",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"language\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_text\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"label\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"provider\"\r\n\r\ntelnyx\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data; boundary=---011000010111000001101001"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"record_type": "voice_clone",
"id": "660f9511-f3ac-52e5-b827-557766551111",
"source_voice_design_id": "550e8400-e29b-41d4-a716-446655440000",
"source_voice_design_version": 1,
"name": "clone-narrator",
"language": "en",
"gender": "male",
"label": "Speak in a warm, friendly tone",
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"provider": "Telnyx",
"provider_supported_models": [
"Qwen3TTS"
],
"provider_voice_id": "660f9511-f3ac-52e5-b827-557766551111"
}
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}{
"errors": [
{
"code": "10005",
"title": "Resource not found",
"detail": "Voice design not found"
}
]
}