Instant Voice Cloning

Clone a voice from a single short audio sample and stream with it in minutes.

Instant Voice Cloning builds a workspace-owned AI voice from one reference recording of up to 30 seconds. Upload a sample or point Murf at a publicly reachable URL, poll until the clone is ready, then use the voice ID you get back with any Falcon 2 endpoint. There is no studio session to book and no model training to wait on.

Clones are multilingual out of the box. A sample recorded in one language can speak any locale Falcon 2 supports, so one clone per speaker is usually enough.

Instant Voice Cloning is available on the Enterprise plan only. It is enabled per workspace, so until it has been turned on for yours, the voice cloning endpoints return 403.

Instant vs. Professional Voice Cloning

Murf offers two ways to build a custom voice. This should help you pick the one that fits.

Instant Voice CloningProfessional Voice Cloning
Reference audioOne short sample, max 30 seconds and up to 40 MBUp to 90 minutes of studio-grade recordings
TurnaroundA few minutes, self-serve over the API1 to 4 weeks, managed by our team
Best forAgent personas, prototyping, cloning at scaleFlagship brand voices and long-form narration
AvailabilityEnterprise plan, API onlyEnterprise plan, Murf Studio and API
ModelsFalcon 2Falcon 2 and Gen2

What you get

Two ways to send audio

Post a file as multipart/form-data, or pass a public audioUrl as JSON. The audio requirements are the same either way.

Jobs you can poll

Create returns a requestId right away. Poll the status endpoint until it reports COMPLETED or FAILED. There are no webhooks to set up.

Falcon 2 speed

Clones stream over HTTP or WebSockets at Falcon 2 latency of roughly 100 ms, which is fast enough for live conversational agents.

Workspace-scoped control

List the clones in your workspace that are ready to use, and delete any of them for good once you are done with it.

Pricing is the same as standard Falcon 2 synthesis. Creating a clone and keeping it in your workspace costs nothing extra, so you only pay for the speech you generate with it.

Before you start

Cloning has to be switched on for your workspace before any of the endpoints below will work. Get in touch with our sales team and brief them on your exact needs and the voice profile you want to create. If you are already on Enterprise, your Customer Success Manager can do this for you.

Once it is enabled, generate your API key from the Murf API Dashboard and send it as the api-key header on every request.

Then get your reference audio ready. The same requirements apply whether you upload a file or pass a URL:

RequirementValue
FormatsWAV, MP3, FLAC, ALAW, ULAW
Maximum duration30 seconds
Minimum sample rate24 kHz
Maximum file size40 MB
ContentClear, continuous speech from a single speaker, with limited background noise

If you are passing audioUrl, the URL has to be http or https, and its path needs a supported file extension, for example https://example.com/sample.wav. Private and localhost URLs are rejected.

Clone a voice

1

Create the clone

Call Create Voice Clone with a tag (a unique identifier for the voice), an optional displayName to name it, plus either an audio file or an audioUrl. If you leave displayName empty, it falls back to the tag.

1import requests
2
3url = "https://api.murf.ai/v1/speech/voices/create"
4headers = {"api-key": "YOUR_API_KEY"}
5
6with open("/path/to/reference.wav", "rb") as audio:
7 response = requests.post(
8 url,
9 headers=headers,
10 data={"tag": "my-voice", "displayName": "My Voice"},
11 files={"audio": ("reference.wav", audio, "audio/wav")},
12 )
13
14print(response.json())
15# {
16# "responseCode": "SUCCESS",
17# "responseMessage": "Operation was successful",
18# "requestId": "req_123"
19# }

Hold on to the requestId in the response. That is how you track the job.

Response
1{
2 "requestId": "req_123",
3 "responseCode": "SUCCESS",
4 "responseMessage": "Operation was successful"
5}

If something is wrong with the request itself, you get a 400 back with an error_message. The usual causes are a missing tag or audio, an unsupported format or file extension, a file over 40 MB, or an audioUrl we cannot reach. Problems with the audio itself, such as a low sample rate, are accepted here with a 200 and show up later as a FAILED status.

2

Poll the creation status

Cloning runs in the background. Call Voice Clone Creation Status with your requestId until status comes back as COMPLETED or FAILED. Checking every couple of seconds is plenty.

1import time
2import requests
3
4request_id = "req_123"
5url = f"https://api.murf.ai/v1/speech/voice-clone-creation-status/{request_id}"
6headers = {"api-key": "YOUR_API_KEY"}
7
8while True:
9 status = requests.get(url, headers=headers).json()
10 print(status)
11 if status["status"] in ("COMPLETED", "FAILED"):
12 break
13 time.sleep(2)
14
15voice_id = status.get("voiceId")
StatusMeaning
QUEUEDJob accepted and waiting to process
PROCESSINGVoice clone is being created
COMPLETEDReady to use. voiceId is in the response, prefixed with cln_
FAILEDCreation did not go through. Check errorMessage
Response
1{
2 "requestId": "req_123",
3 "status": "COMPLETED",
4 "responseCode": "SUCCESS",
5 "responseMessage": "Operation was successful",
6 "voiceId": "cln_abcdefgh_0123456789abcdef"
7}
3

Synthesize with Falcon 2

Use the cln_ voice ID as your voiceId on any Falcon 2 endpoint. Nothing else about the request changes. The streaming response body is raw audio bytes rather than JSON, and you get WAV back unless you set format.

1import requests
2
3response = requests.post(
4 "https://api.murf.ai/v1/speech/stream",
5 headers={
6 "api-key": "YOUR_API_KEY",
7 "Content-Type": "application/json",
8 },
9 json={
10 "voiceId": "cln_abcdefgh_0123456789abcdef",
11 "text": "Hello from my cloned voice.",
12 "model": "falcon-2",
13 },
14)
15response.raise_for_status()
16
17with open("speech.wav", "wb") as f:
18 f.write(response.content)

For live agents, pass the same voice ID in the WebSockets voice_config message:

1{
2 "voice_config": {
3 "voiceId": "cln_abcdefgh_0123456789abcdef",
4 "locale": "en-US",
5 "rate": 0,
6 "pitch": 0
7 }
8}

Cloned voices only work on Falcon 2. Sending one with model: "gen2", or to the non-streaming generate endpoint, returns a 400.

Manage your cloned voices

List cloned voices

List Cloned Voices gives you every clone in your workspace that is ready to use. Each one comes with a voiceId (prefixed with cln_), its displayName, the tag you set when you created it, and a createdAt timestamp in UTC. When you did not pass a displayName at creation, it mirrors the tag.

1import requests
2
3response = requests.get(
4 "https://api.murf.ai/v1/speech/voices/cloned",
5 headers={"api-key": "YOUR_API_KEY"},
6)
7print(response.json())
Response
1[
2 {
3 "voiceId": "cln_abcdefgh_0123456789abcdef",
4 "displayName": "My Voice",
5 "tag": "my-voice",
6 "createdAt": "2026-09-02T07:50:15.296Z"
7 }
8]

Clones do not show up in GET /v1/speech/voices. That endpoint covers Murf’s standard voice library, so use the cloned voices endpoint above instead.

Delete a cloned voice

Delete Cloned Voice removes a clone from your workspace for good. There is no undo, and anything still sending that voiceId will start failing.

1import requests
2
3voice_id = "cln_abcdefgh_0123456789abcdef"
4response = requests.delete(
5 f"https://api.murf.ai/v1/speech/voices/cloned/{voice_id}",
6 headers={"api-key": "YOUR_API_KEY"},
7)
8print(response.status_code, response.text)
Response
1{
2 "responseCode": "SUCCESS",
3 "responseMessage": "Operation was successful"
4}

Endpoints

EndpointWhat it does
POST /v1/speech/voices/createSend reference audio and start a clone job
GET /v1/speech/voice-clone-creation-status/{requestId}Check on a job and pick up the voiceId
GET /v1/speech/voices/clonedList the clones in your workspace
DELETE /v1/speech/voices/cloned/{voiceId}Delete a clone permanently

Responsible use

Only clone a voice you own or have clear, documented consent to clone. Murf’s Enterprise commitments apply to Instant Voice Cloning as well. Your audio and text are never used to train Murf models, data is encrypted in transit and at rest, and clones stay private to the workspace that created them.

FAQ

You are charged the same rates as standard Falcon 2 synthesis. Creating a clone and keeping it in your workspace carries no additional charge, so the only thing you pay for is the speech you generate with it, exactly as you would with a library voice. See Pricing for Falcon 2 rates, or the rates set out in your Enterprise agreement.

Most clones are ready within a few minutes. Creation is asynchronous, so poll the status endpoint until it reports COMPLETED rather than building a fixed wait into your code.

No. A clone can speak any locale Falcon 2 supports, whatever language the sample was recorded in. Set locale on the synthesis request to pick the output language.

Not directly. Only WAV, MP3, FLAC, ALAW, and ULAW are accepted. If your source is a video or some other container, extract the audio track and export it at 24 kHz or higher before you upload it.

tag is a mandatory, unique identifier for the clone. Use it to reference the voice or for any bookkeeping of your own, such as grouping clones by speaker or project. It comes back on list responses, so pick something you will still recognize later, such as the speaker name plus a version.

displayName is optional and sets the human-readable name of the cloned voice. If you leave it empty, displayName falls back to the tag.

No. A clone is fixed once it has been created, and there is no update endpoint. If you want a different result, create a new clone from a better sample, point your integration at the new voiceId, and delete the old one once you have switched over. Deletion is permanent, so do it in that order.

Yes. Clones belong to the workspace rather than to the API key that created them, so any key in the same workspace can synthesize with them and your whole team sees them in the cloned voices list. A voiceId from another workspace returns a 404.

No. Your reference audio and the text you synthesize are never used to train Murf models, and clones stay private to the workspace that created them. See Enterprise for the full set of data commitments.

Yes. Clones take the same Falcon 2 controls as library voices, including rate, pitch, locale, format, sampleRate, and pauses. See Speech Customization for the full list. Styles are not available on cloned voices, since the clone already carries the delivery of your reference sample.

When status comes back as FAILED, errorMessage tells you why:

errorMessageLikely causeWhat to try
Audio File should have sample rate greater than 24KHzReference audio is below 24 kHzRe-export or re-record at 24 kHz or higher
No valid audio chunks could be extracted from the uploadNot enough clear speech in the file, usually too much silence or noise, or very short utterancesUse a cleaner sample with continuous speech and less background noise
Audio processing failed.Audio could not be processed after uploadRetry with a different file. If it keeps happening, send support the full status response

Other messages can show up for unexpected failures. Try once more with a different reference file, and if the job still fails, contact support with the full status response.

Error responses look like { "error_code": <httpStatus>, "error_message": "..." }. These are failures on the request itself, not the FAILED status you get from polling.

CaseStatus
Instant Voice Cloning is not enabled for the workspace403
Invalid or expired api-key or token403
Missing tag or audio, unsupported format or extension, a file over 40 MB, or an unreachable audioUrl on create400
A model other than Falcon 2 used with a cln_* voice400
Malformed voiceId on delete, which has to use the cln_ prefix400
Unknown requestId on the status poll404
Unknown voiceId on delete, or one that belongs to another workspace404

Low sample rates and poor audio quality usually pass the create call with a 200, then show up as status: "FAILED" when you poll.

Clone volume and concurrency are part of your Enterprise agreement. Rate Limits covers Falcon 2 synthesis, and your Customer Success Manager can confirm the cloning limits on your contract.