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: 5MB for Telnyx, 20MB for Minimax.
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({
params: {
audio_file: fs.createReadStream('path/to/file'),
gender: 'male',
language: 'lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf',
name: 'name',
provider: 'telnyx',
},
});
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(
params={
"audio_file": b"Example data",
"gender": "male",
"language": "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
"name": "name",
"provider": "telnyx",
},
)
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{
OfTelnyxQwen3TtsClone: &telnyx.VoiceCloneNewFromUploadParamsParamsTelnyxQwen3TtsClone{
AudioFile: io.Reader(bytes.NewBuffer([]byte("Example data"))),
Gender: "male",
Language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
Name: "name",
Provider: "telnyx",
},
})
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.TelnyxQwen3TtsClone params = VoiceCloneCreateFromUploadParams.Params.TelnyxQwen3TtsClone.builder()
.audioFile(new ByteArrayInputStream("Example data".getBytes()))
.gender(VoiceCloneCreateFromUploadParams.Params.TelnyxQwen3TtsClone.Gender.MALE)
.language("lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf")
.name("name")
.provider(VoiceCloneCreateFromUploadParams.Params.TelnyxQwen3TtsClone.Provider.TELNYX)
.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(
params: {
audio_file: StringIO.new("Example data"),
gender: :male,
language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
name: "name",
provider: :telnyx
}
)
puts(response)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Telnyx\Client;
use Telnyx\Core\FileParam;
use Telnyx\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');
try {
$response = $client->voiceClones->createFromUpload(
params: [
'audioFile' => FileParam::fromString('Example data', filename: uniqid('file-upload-', true)),
'gender' => 'male',
'language' => 'lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf',
'name' => 'name',
'provider' => 'telnyx',
'label' => 'label',
'modelID' => 'Qwen3TTS',
'refText' => 'ref_text',
],
);
var_dump($response);
} catch (APIException $e) {
echo $e->getMessage();
}telnyx voice-clones create-from-upload \
--api-key 'My API Key' \
--params '{audio_file: Example data, gender: male, language: lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf, name: name, provider: telnyx}'curl --request POST \
--url https://api.telnyx.com/v2/voice_clones/from_upload \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'audio_file=<string>' \
--form 'name=<string>' \
--form 'language=<string>' \
--form 'ref_text=<string>' \
--form 'label=<string>' \
--form 0.audio_file='@example-file' \
--form 1.audio_file='@example-file' \
--form 2.audio_file='@example-file'{
"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",
"model_id": "Qwen3TTS",
"status": "active"
}
}{
"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",
"model_id": "Qwen3TTS",
"status": "active"
}
}{
"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"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
- Option 1
- Option 2
- Option 3
Multipart form data for creating a voice clone from a direct audio upload. Maximum file size: 5MB for Telnyx, 20MB for Minimax.
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.
Name for the voice clone.
255ISO 639-1 language code from the Qwen language set.
^([Aa]uto|[a-z]{2,3}(-[A-Za-z0-9]{2,8})*)$Gender of the voice clone.
male, female, neutral Voice synthesis provider. Must be telnyx.
telnyx, Telnyx Optional transcript of the audio file. Providing this improves clone quality.
Optional custom label describing the voice style.
TTS model identifier. Nullable/omittable — defaults to Qwen3TTS.
Qwen3TTS, null 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({
params: {
audio_file: fs.createReadStream('path/to/file'),
gender: 'male',
language: 'lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf',
name: 'name',
provider: 'telnyx',
},
});
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(
params={
"audio_file": b"Example data",
"gender": "male",
"language": "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
"name": "name",
"provider": "telnyx",
},
)
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{
OfTelnyxQwen3TtsClone: &telnyx.VoiceCloneNewFromUploadParamsParamsTelnyxQwen3TtsClone{
AudioFile: io.Reader(bytes.NewBuffer([]byte("Example data"))),
Gender: "male",
Language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
Name: "name",
Provider: "telnyx",
},
})
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.TelnyxQwen3TtsClone params = VoiceCloneCreateFromUploadParams.Params.TelnyxQwen3TtsClone.builder()
.audioFile(new ByteArrayInputStream("Example data".getBytes()))
.gender(VoiceCloneCreateFromUploadParams.Params.TelnyxQwen3TtsClone.Gender.MALE)
.language("lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf")
.name("name")
.provider(VoiceCloneCreateFromUploadParams.Params.TelnyxQwen3TtsClone.Provider.TELNYX)
.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(
params: {
audio_file: StringIO.new("Example data"),
gender: :male,
language: "lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf",
name: "name",
provider: :telnyx
}
)
puts(response)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Telnyx\Client;
use Telnyx\Core\FileParam;
use Telnyx\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API Key');
try {
$response = $client->voiceClones->createFromUpload(
params: [
'audioFile' => FileParam::fromString('Example data', filename: uniqid('file-upload-', true)),
'gender' => 'male',
'language' => 'lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf',
'name' => 'name',
'provider' => 'telnyx',
'label' => 'label',
'modelID' => 'Qwen3TTS',
'refText' => 'ref_text',
],
);
var_dump($response);
} catch (APIException $e) {
echo $e->getMessage();
}telnyx voice-clones create-from-upload \
--api-key 'My API Key' \
--params '{audio_file: Example data, gender: male, language: lkf-Lz1vLbBu-9uDh-9AHaOS2D-Cbf, name: name, provider: telnyx}'curl --request POST \
--url https://api.telnyx.com/v2/voice_clones/from_upload \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'audio_file=<string>' \
--form 'name=<string>' \
--form 'language=<string>' \
--form 'ref_text=<string>' \
--form 'label=<string>' \
--form 0.audio_file='@example-file' \
--form 1.audio_file='@example-file' \
--form 2.audio_file='@example-file'{
"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",
"model_id": "Qwen3TTS",
"status": "active"
}
}{
"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",
"model_id": "Qwen3TTS",
"status": "active"
}
}{
"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"
}
]
}