---
title: "Create a voice clone from an audio file upload"
method: POST
path: "/voice_clones/from_upload"
tags: ["Voice Clones"]
---

# Create a voice clone from an audio file upload

`POST /voice_clones/from_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.

## Response `201`

Voice clone created successfully from the uploaded audio.

- VoiceCloneResponse — Response envelope for a single voice clone.
  - `data` VoiceCloneData — A voice clone object.
    - `record_type` 'voice_clone' — Identifies the resource type.
    - `id` string, uuid — Unique identifier for the voice clone.
    - `source_voice_design_id` string, uuid, nullable — UUID of the source voice design. `null` for upload-based clones.
    - `source_voice_design_version` integer, nullable — Version of the source voice design used. `null` for upload-based clones.
    - `name` string — Name of the voice clone.
    - `language` string, nullable — ISO 639-1 language code of the voice clone.
    - `gender` 'male' | 'female' | 'neutral' | 'null', nullable — Gender of the voice clone.
    - `label` string, nullable — Voice style description. If not explicitly set on upload, falls back to the source design's prompt text.
    - `created_at` string, date-time — Timestamp when the voice clone was created.
    - `updated_at` string, date-time — Timestamp when the voice clone was last updated.
    - `provider` 'telnyx' | 'minimax' — Voice synthesis provider used for this clone.
    - `provider_supported_models` string[] — List of TTS model identifiers supported by this clone's provider.
    - `provider_voice_id` string, nullable — Provider-specific voice identifier used for TTS synthesis. May differ from the clone UUID depending on the provider and model.
    - `model_id` 'Qwen3TTS' | 'Ultra' | 'speech-2.8-turbo' — TTS model identifier for the voice clone.
    - `status` 'active' | 'pending' | 'failed' | 'expired' — Clone status. pending for Ultra clones while on-prem import is in progress, active once ready, failed if verification timed out, expired if not kept alive.

## Other responses

- `202` — Voice clone accepted — on-prem import in progress (Ultra model). Poll GET /voice_clones/{id} to check status.
- `400` — Bad request — the audio file is invalid, unsupported, or exceeds the size limit.
- `401` — Unauthorized — missing or invalid bearer token.
- `422` — Unprocessable entity — validation error in the request body.
- `502` — Bad gateway — upstream voice cloning service is unavailable.

---

[API](https://skmtc.net/team-telnyx/apis/telnyx-api.md) · [All operations](https://skmtc.net/team-telnyx/apis/telnyx-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/team-telnyx/telnyx-api/versions/e32d46c5945b/schema)
