Get started
To use Unmixr AI API service, you need to be in the eligible plan.
The API use token based authentication to authorize the API requests. Before calling API, you need to create API token
from https://app.unmixr.com/manage-api-keys/
For any support, please contact us at support@unmixr.com .
Voice List
GET https://unmixr.com/api/v1/voice-list/
Request Headers
Field
Description
Authorization
The API Key in the format: Bearer <YOUR API KEY>
Content-Type
application/json
QUERY PARAMETERS
Field
Type
Description
c
String
(Optional) `c` refers to the Voice Category.
You can specify: prebuilt-voices, openai-voices, multilingual-voices, community-shared-voices, animation-voices, child-voices, clones, narration-voices,
assistant-voices, audiobook-voices, announcer-voices, gaming-voices, documentary-voices,
podcast-voices, advertisement-voices, news-voices, elearning-voices, meditation-voices, chat-voices
If you don't specify `c` by default API returns prebuilt-voices
q
String
(optional) search query to find voice by name.
lang
String
(optional) Language code. Example: en, en-US, it etc
gender
String
(optional) Filter by gender. Supported values: any, male, female, child
capabilities
String
(optional) filter voice list by voice capabilities. Supported values: `pause`, `speech`, `speech:volume`, `speech:rate`, `speech:pitch`, `emphasize`, `abbr`, `custom_pause`
styles
String
(optional) Filter voices by styles: `chat`, `customerservice`, `narration-professional`, `newscast-casual`, `newscast-formal`, `cheerful`, `empathetic`, `angry`, `sad`, `excited`, `friendly`, `terrified`, `shouting`, `unfriendly`, `whispering`, `hopeful`
uc
String
(optional) Filter by use cases. Supported values: `audiobook-voices`, `podcast-voices`, `advertisement-voices`, `news-voices`, `elearning-voices`, `chat-voices`, `narration-voices`, `assistant-voices`, `announcer-voices`, `documentary-voices`, `gaming-voices`, `meditation-voices`
page
Integer
(optional - default: 1) Returns voice list in the specified page number
page_size
Integer
(optional - default: 12) Returns number of items in a page specified in page_size param
fields
String
(optional) Comma seperated fields to return in the API response. See the Response Fields section below.
cURL
Python
Javascript - Fetch
Copy
curl --location 'https://unmixr.com/api/v1/voice-list/' \
--header 'Authorization: Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e' \
--header 'Content-Type: application/json' \
--data ''
Copy
import requests
import json
url = "https://unmixr.com/api/v1/voice-list/"
payload = ""
headers = {
'Authorization': 'Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e',
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Copy
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e");
myHeaders.append("Content-Type", "application/json");
const raw = "";
const requestOptions = {
method: "GET",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://unmixr.com/api/v1/voice-list/", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Example Response:
Get https://unmixr.com/api/v1/voice-list/?page_size=2
Output:
{
"count": 1133,
"results": [
{
"uuid": "1283979c-87a5-44d5-a8de-4082ba20cc5b",
"character": "Brian",
"gender": "Male",
"language": "en-US",
"quality": "Premium",
"sample_voice_url": "https://resource.unmixr.com/sample_audio/19282e7a-c77c-4432-aead-11ba634754bd.mp3",
"emotions": [],
"capabilities": [
"speech",
"speech:volume",
"speech:rate",
"speech:pitch",
"custom_pause",
"intensity"
],
"roles": [],
"use_cases": [
"Podcast",
"Chat"
],
"other_languages": [
"af-ZA",
"am-ET",
"ar-EG",
"ar-SA",
"az-AZ",
"bg-BG",
"bn-BD",
"bn-IN",
...
...
],
"supported_locales": {
"en-AU": "https://unmixr.s3.amazonaws.com/sample_audio/e5481cdb-2d49-4654-b901-8f3c32d638b1.mp3",
"en-CA": "https://unmixr.s3.amazonaws.com/sample_audio/6fc0c7d5-72e9-4353-b4b5-8aa2b1213c20.mp3",
"en-GB": "https://unmixr.s3.amazonaws.com/sample_audio/6a4b940c-7c38-47ec-bf92-47529d4891e7.mp3",
"en-IE": "https://unmixr.s3.amazonaws.com/sample_audio/003789c9-1a47-4457-865d-59d31cef478f.mp3",
"en-IN": "https://unmixr.s3.amazonaws.com/sample_audio/5108a64f-7d19-470c-b7cb-6fbfea77e976.mp3",
"en-US": "https://unmixr.s3.amazonaws.com/sample_audio/19282e7a-c77c-4432-aead-11ba634754bd.mp3"
},
"is_available": true,
"date_created": "2024-04-22T14:32:56.201895Z",
"is_multilingual": true,
"wpm": 188,
"is_new": true,
"description": "A youthful, cheerful, and versatile voice that can handle any task you throw its way, well-suited to a wide variety of contexts.",
"age": "YoungAdult",
"personality": [
"Sincere",
"Calm",
"Approachable"
],
"avatar_url": "https://resource.unmixr.com/avatar/ec18fc06-f46b-4ff9-af55-c953ff47a2ef-0.png"
},
{
"uuid": "57f0ec2e-bbb7-460f-92d5-e7277669b985",
"character": "Steffan (Express)",
"gender": "Male",
"language": "en-US",
"quality": "Premium",
"sample_voice_url": "https://resource.unmixr.com/sample_audio/90ebe603-6de5-44d6-bca7-f2cb0232ba85.mp3",
"emotions": [],
"capabilities": [
"abbr",
"intensity"
],
"roles": [],
"use_cases": [
"Assistant",
"Narration"
],
"other_languages": [
"af-ZA",
"am-ET",
"ar-EG",
"ar-SA",
"az-AZ",
"bg-BG",
"bn-BD",
"bn-IN",
"bs-BA",
"ca-ES",
"cs-CZ",
"cy-GB",
"da-DK",
"de-AT",
...
...
],
"supported_locales": {
"en-AU": "https://unmixr.s3.amazonaws.com/sample_audio/eb0cce7b-2720-4293-9605-2dd10136d624.mp3",
"en-CA": "https://unmixr.s3.amazonaws.com/sample_audio/bc4cacde-b99e-4564-a015-5f05cccc8866.mp3",
"en-GB": "https://unmixr.s3.amazonaws.com/sample_audio/6133a613-b317-4c24-8748-6600099872ad.mp3",
"en-IE": "https://unmixr.s3.amazonaws.com/sample_audio/fecf1b90-1c1e-4d36-a524-c38bc49b471d.mp3",
"en-IN": "https://unmixr.s3.amazonaws.com/sample_audio/3e113141-9b00-49f4-a7ff-206bd52d771a.mp3",
"en-US": "https://unmixr.s3.amazonaws.com/sample_audio/90ebe603-6de5-44d6-bca7-f2cb0232ba85.mp3"
},
"is_available": true,
"date_created": "2024-10-28T18:51:25.275300Z",
"is_multilingual": true,
"wpm": 178,
"is_new": true,
"description": "HD versions of Steffan with a wider range of styles, perfectly suited for audiobook narration and storytelling.",
"age": "Adult",
"personality": [
"Mature",
"Authentic",
"Warm"
],
"avatar_url": "https://resource.unmixr.com/avatar/fb1ba17d-c176-4622-adc5-e9192347c09d-0.png"
}
],
"current_page": 1,
"page_start": 1,
"page_end": 2,
"next_page": 2,
"prev_page": null,
"total_page": 567
}
Response Fields
You can specify which fields should be in API response. To specify use `fields`. See example below:
https://unmixr.com/api/v1/voice-list/?fields=uuid,character,language
https://unmixr.com/api/v1/voice-list/?fields=uuid,character,gender,capabilities
Voice Details
GET https://unmixr.com/api/v1/voice/:uuid/
Request Headers
Field
Description
Authorization
The API Key in the format: Bearer <YOUR API KEY>
Content-Type
application/json
Query Parameters
Field
Type
Description
fields
String
(optional) Comma seperated fields to return in the API response. See the Response Fields section below.
cURL
Python
Javascript - Fetch
Copy
curl --location 'https://unmixr.com/api/v1/voice/1283979c-87a5-44d5-a8de-4082ba20cc5b/' \
--header 'Authorization: Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e' \
--header 'Content-Type: application/json' \
--data ''
Copy
import requests
import json
url = "https://unmixr.com/api/v1/voice/1283979c-87a5-44d5-a8de-4082ba20cc5b/"
payload = ""
headers = {
'Authorization': 'Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e',
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Copy
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e");
myHeaders.append("Content-Type", "application/json");
const raw = "";
const requestOptions = {
method: "GET",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://unmixr.com/api/v1/voice/1283979c-87a5-44d5-a8de-4082ba20cc5b/", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Example Response:
Get https://unmixr.com/api/v1/voice/1283979c-87a5-44d5-a8de-4082ba20cc5b/
Output:
{
"uuid": "1283979c-87a5-44d5-a8de-4082ba20cc5b",
"character": "Brian",
"gender": "Male",
"language": "en-US",
"quality": "Premium",
"sample_voice_url": "https://resource.unmixr.com/sample_audio/19282e7a-c77c-4432-aead-11ba634754bd.mp3",
"emotions": [],
"capabilities": [
"speech",
"speech:volume",
"speech:rate",
"speech:pitch",
"custom_pause",
"intensity"
],
"roles": [],
"use_cases": [
"Podcast",
"Chat"
],
"other_languages": [
"af-ZA",
"am-ET",
"ar-EG",
"ar-SA",
"az-AZ",
...
...
],
"supported_locales": {
"en-AU": "https://unmixr.s3.amazonaws.com/sample_audio/e5481cdb-2d49-4654-b901-8f3c32d638b1.mp3",
"en-CA": "https://unmixr.s3.amazonaws.com/sample_audio/6fc0c7d5-72e9-4353-b4b5-8aa2b1213c20.mp3",
"en-GB": "https://unmixr.s3.amazonaws.com/sample_audio/6a4b940c-7c38-47ec-bf92-47529d4891e7.mp3",
"en-IE": "https://unmixr.s3.amazonaws.com/sample_audio/003789c9-1a47-4457-865d-59d31cef478f.mp3",
"en-IN": "https://unmixr.s3.amazonaws.com/sample_audio/5108a64f-7d19-470c-b7cb-6fbfea77e976.mp3",
"en-US": "https://unmixr.s3.amazonaws.com/sample_audio/19282e7a-c77c-4432-aead-11ba634754bd.mp3"
},
"is_available": true,
"date_created": "2024-04-22T14:32:56.201895Z",
"is_multilingual": true,
"wpm": 188,
"is_new": true,
"description": "A youthful, cheerful, and versatile voice that can handle any task you throw its way, well-suited to a wide variety of contexts.",
"age": "YoungAdult",
"personality": [
"Sincere",
"Calm",
"Approachable"
],
"avatar_url": "https://resource.unmixr.com/avatar/ec18fc06-f46b-4ff9-af55-c953ff47a2ef-0.png"
}
Response Fields
You can specify which fields should be in API response. To specify use `fields`. See example below:
https://unmixr.com/api/v1/voice/1283979c-87a5-44d5-a8de-4082ba20cc5b/?fields=uuid,character,language
https://unmixr.com/api/v1/voice/1283979c-87a5-44d5-a8de-4082ba20cc5b/?fields=uuid,character,gender,capabilities
Create TTS
POST https://unmixr.com/api/v1/short-tts/
Request Headers
Field
Description
Authorization
The API Key in the format: Bearer <YOUR API KEY>
Content-Type
application/json
Request Fields
Field
Type
Description
text
String
(Required) The text you want to convert into audio. Max length 2000 characters.
voice_id
String
(Required) Voice ID to use to generate audio.
speaking_rate
String
(optional - Default: 0% or default) supported values: -100% to +100%, default, x-slow, slow, medium, fast, x-fast
speaking_pitch
String
(optional - Default: 0% or default) supported values: -50% to +50%, default, x-low, low, medium, high, x-high
speaking_volume
String
(optional - Default: 0% or default) supported values: -100% to +100%, default, silent, x-soft, soft, medium, loud, x-loud
intensity
Integer
(optional) -100 to +100. Note: Not all voices support intensity. Check supported capabilities for the selected vocie to use intensity.
output_type
String
(optional - Default: mp3). Supported values: mp3, wav
language
String
(optional) Specify language or locale to speak in that language and accent. Example: en, en-IN etc. Check the supported languages by the selected voice before using it in language field.
pronunciation_dict
Dictionary
(optional) A pronunciation dictionary to pronounce words in a different way. Example: {"SME": "Small and Medium Enterprise"}
response_type
String
(optional - Default: url) Supported values: url, base64, bytes
cURL
Python
Javascript - Fetch
Copy
curl --location 'https://unmixr.com/api/v1/short-tts/' \
--header 'Authorization: Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e' \
--header 'Content-Type: application/json' \
--data '{
"text": "Recent political developments have intensified global scrutiny over the Taiwan Strait, as China ramps up military drills near the island, prompting strong responses from the United States and its allies.",
"voice_id": "1283979c-87a5-44d5-a8de-4082ba20cc5b",
"language": "en-US",
"response_type": "url",
"speaking_volume": 200
}'
Copy
import requests
import json
url = "https://unmixr.com/api/v1/short-tts/"
payload = json.dumps({
"text": "Recent political developments have intensified global scrutiny over the Taiwan Strait, as China ramps up military drills near the island, prompting strong responses from the United States and its allies.",
"voice_id": "1283979c-87a5-44d5-a8de-4082ba20cc5b",
"language": "en-US",
"response_type": "url",
"speaking_volume": 200
})
headers = {
'Authorization': 'Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Copy
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e");
myHeaders.append("Content-Type", "application/json");
const raw = JSON.stringify({
"text": "Recent political developments have intensified global scrutiny over the Taiwan Strait, as China ramps up military drills near the island, prompting strong responses from the United States and its allies.",
"voice_id": "1283979c-87a5-44d5-a8de-4082ba20cc5b",
"language": "en-US",
"response_type": "url",
"speaking_volume": 200
});
const requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://unmixr.com/api/v1/short-tts/", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Example Response:
POST https://unmixr.com/api/v1/short-tts/
{
"text": "Recent political developments have intensified global scrutiny over the Taiwan Strait, as China ramps up military drills near the island, prompting strong responses from the United States and its allies.",
"voice_id": "1283979c-87a5-44d5-a8de-4082ba20cc5b",
"language": "en-US",
"response_type": "url",
"speaking_volume": 200
}
Output:
{
"success": true,
"code": 200,
"duration": 12.024,
"credit_usage": {
"prebuilt": 204,
"voice_cloning": 0
},
"audio_url": "https://unmixr.s3.amazonaws.com/a/e8c5b838-f78f-4f5c-b597-5070248db3a4.mp3"
}
Create Voice Cloning
POST https://unmixr.com/api/v1/clone-voice/
Request Headers
Field
Description
Authorization
The API Key in the format: Bearer <YOUR API KEY>
Content-Type
application/json
Request Fields
Field
Type
Description
audio
Bytes
(Required) The audio bytes for which you want to create clone. Max size: 120MB, Between 30 and 80 seconds.
name
String
(Required) Name of the new cloned voice.
description
String
(optional) Description of the cloned voice.
cURL
Python
Javascript - Fetch
Copy
curl --location 'https://unmixr.com/api/v1/clone-voice/' \
--header 'Authorization: Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e' \
--form 'audio=@"/file_path/speech3.mp3"' \
--form 'name="Jack Sparrow"' \
--form 'description="The clone of Jack Sparrow voice"'
Copy
import requests
url = "https://unmixr.com/api/v1/clone-voice/"
payload = {'name': 'Jack Sparrow',
'description': 'The clone of Jack Sparrow voice'}
files=[
('audio',('speech3.mp3',open('/file_path/speech3.mp3','rb'),'audio/mpeg'))
]
headers = {
'Authorization': 'Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e'
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
Copy
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e");
const formdata = new FormData();
formdata.append("audio", fileInput.files[0], "/file_path/speech3.mp3");
formdata.append("name", "Jack Sparrow");
formdata.append("description", "The clone of Jack Sparrow voice");
const requestOptions = {
method: "POST",
headers: myHeaders,
body: formdata,
redirect: "follow"
};
fetch("https://unmixr.com/api/v1/clone-voice/", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Example Response:
POST https://unmixr.com/api/v1/clone-voice/
payload = {'name': 'Jack Sparrow',
'description': 'The clone of Jack Sparrow voice'}
files=[
('audio',('speech3.mp3',open('/D:/WSL/Projects/SVE/test/speech3.mp3','rb'),'audio/mpeg'))
]
Output:
{
"status": "SUCCESS",
"voice_id": "b8c9a2e7-3159-4e39-a5d1-c87b9a229eb4",
"code": 200
}
Cloned Voice List
GET https://unmixr.com/api/v1/cloned-voice-list/
Request Headers
Field
Description
Authorization
The API Key in the format: Bearer <YOUR API KEY>
Content-Type
application/json
QUERY PARAMETERS
Field
Type
Description
q
String
(optional) search query to find voice by name.
page_size
Integer
(optional - default: 12) Returns number of items in a page specified in page_size param
fields
String
(optional) Comma seperated fields to return in the API response. See the Response Fields section below.
cURL
Python
Javascript - Fetch
Copy
curl --location 'https://unmixr.com/api/v1/cloned-voice-list/?page_size=2' \
--header 'Authorization: Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e' \
--header 'Content-Type: application/json' \
--data ''
Copy
import requests
import json
url = "https://unmixr.com/api/v1/cloned-voice-list/?page_size=2"
payload = ""
headers = {
'Authorization': 'Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e',
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Copy
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e");
myHeaders.append("Content-Type", "application/json");
const raw = "";
const requestOptions = {
method: "GET",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://unmixr.com/api/v1/cloned-voice-list/?page_size=2", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Example Response:
Get https://unmixr.com/api/v1/cloned-voice-list/?page_size=2
Output:
{
"count": 9,
"results": [
{
"uuid": "7dfd1b64-9841-4229-89dc-65383bb35571",
"character": "Test-Cloned",
"gender": "",
"language": "en",
"quality": "",
"sample_voice_url": "https://resource.unmixr.com/voiceprofile/7b1479af-6672-4426-a92f-c5313b7955e4-Test-Cloned.wav",
"emotions": [],
"capabilities": [],
"roles": [],
"use_cases": [],
"other_languages": [
"en",
"zh",
"de",
"ja",
"fr",
"es",
"ko",
"ar",
"ru",
"nl",
"it",
"pl",
"pt"
],
"supported_locales": {},
"is_available": true,
"date_created": "2024-11-09T16:34:44.843450Z",
"is_multilingual": true,
"wpm": null,
"is_new": true,
"description": "This is test cloned voice",
"age": null,
"personality": [],
"avatar_url": null
}
],
"current_page": 1,
"page_start": 1,
"page_end": 1,
"next_page": 2,
"prev_page": null,
"total_page": 9
}
Response Fields
You can specify which fields should be in API response. To specify use `fields`. See example below:
https://unmixr.com/api/v1/cloned-voice-list/?fields=uuid,character,language
https://unmixr.com/api/v1/cloned-voice-list/?fields=uuid,character,gender,capabilities
API Credit Balance
GET https://unmixr.com/api/v1/credit-balance/
Request Headers
Field
Description
Authorization
The API Key in the format: Bearer <YOUR API KEY>
Content-Type
application/json
cURL
Python
Javascript - Fetch
Copy
curl --location 'https://unmixr.com/api/v1/credit-balance/' \
--header 'Authorization: Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e' \
--header 'Content-Type: application/json' \
--data ''
Copy
import requests
import json
url = "https://unmixr.com/api/v1/credit-balance/"
payload = ""
headers = {
'Authorization': 'Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e',
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Copy
const myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer 7f3d5c8e-91a2-4c1b-9f5b-3d66fc823b8e");
myHeaders.append("Content-Type", "application/json");
const raw = "";
const requestOptions = {
method: "GET",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://unmixr.com/api/v1/credit-balance/", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Example Response:
Get https://unmixr.com/api/v1/credit-balance/
Output:
{
"status": "SUCCESS",
"code": 200,
"credits": {
"prebuilt_chars": 99388,
"cloned_chars": 0
}
}
API Logs
API logs can be found at https://app.unmixr.com/api-logs/
API Response Codes
The Unmixr AI API uses the following error codes:
API Endpoint
Code
Description
All
200
Successful Response
All
404
Not Found
/short-tts/
400
Invalid response_type. Supported values are: 'url', 'bytes', and 'base64'.
/short-tts/
401
Input too long. Please limit your input to under 2000 characters.
/short-tts/
500
Internal Server Error
/short-tts/
501
Specify OpenAI API key in the header with key `OpenAI-API-Key`
/short-tts/
502
Input too long. Please limit your input to under 2000 characters.
/short-tts/
503
Multiple voices are not supported on this endpoint.
/short-tts/
504
Insufficient API balance (cloned characters) to full-fill the request.
/short-tts/
505
Insufficient API balance (prebuilt characters) to full-fill the request
/short-tts/
508
Server Error - Something went wrong
/short-tts/
509
Audio Generation Failed
/clone-voice/
400
Audio is required
/clone-voice/
401
Name is required
/clone-voice/
402
You've reached the limit
/clone-voice/
500
Internal Server Error
/clone-voice/
501
Failed to create clone