Create TTS voice
curl --request POST \
--url https://api.tryhamsa.com/v2/tts/voices \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Support Assistant Female",
"audioUrl": "https://cdn.tryhamsa.com/uploads/voice.wav",
"audioTranscription": "مرحباً، أنا مساعدك الصوتي.",
"projectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b",
"language": "ar",
"tags": [
"female",
"conversational"
],
"description": "Friendly female assistant voice",
"imageUrl": "https://cdn.tryhamsa.com/voices/avatar.png",
"dialectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b"
}
'import requests
url = "https://api.tryhamsa.com/v2/tts/voices"
payload = {
"name": "Support Assistant Female",
"audioUrl": "https://cdn.tryhamsa.com/uploads/voice.wav",
"audioTranscription": "مرحباً، أنا مساعدك الصوتي.",
"projectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b",
"language": "ar",
"tags": ["female", "conversational"],
"description": "Friendly female assistant voice",
"imageUrl": "https://cdn.tryhamsa.com/voices/avatar.png",
"dialectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Support Assistant Female',
audioUrl: 'https://cdn.tryhamsa.com/uploads/voice.wav',
audioTranscription: 'مرحباً، أنا مساعدك الصوتي.',
projectId: 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b',
language: 'ar',
tags: ['female', 'conversational'],
description: 'Friendly female assistant voice',
imageUrl: 'https://cdn.tryhamsa.com/voices/avatar.png',
dialectId: 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b'
})
};
fetch('https://api.tryhamsa.com/v2/tts/voices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tryhamsa.com/v2/tts/voices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Support Assistant Female',
'audioUrl' => 'https://cdn.tryhamsa.com/uploads/voice.wav',
'audioTranscription' => 'مرحباً، أنا مساعدك الصوتي.',
'projectId' => 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b',
'language' => 'ar',
'tags' => [
'female',
'conversational'
],
'description' => 'Friendly female assistant voice',
'imageUrl' => 'https://cdn.tryhamsa.com/voices/avatar.png',
'dialectId' => 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tryhamsa.com/v2/tts/voices"
payload := strings.NewReader("{\n \"name\": \"Support Assistant Female\",\n \"audioUrl\": \"https://cdn.tryhamsa.com/uploads/voice.wav\",\n \"audioTranscription\": \"مرحباً، أنا مساعدك الصوتي.\",\n \"projectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\",\n \"language\": \"ar\",\n \"tags\": [\n \"female\",\n \"conversational\"\n ],\n \"description\": \"Friendly female assistant voice\",\n \"imageUrl\": \"https://cdn.tryhamsa.com/voices/avatar.png\",\n \"dialectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tryhamsa.com/v2/tts/voices")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Support Assistant Female\",\n \"audioUrl\": \"https://cdn.tryhamsa.com/uploads/voice.wav\",\n \"audioTranscription\": \"مرحباً، أنا مساعدك الصوتي.\",\n \"projectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\",\n \"language\": \"ar\",\n \"tags\": [\n \"female\",\n \"conversational\"\n ],\n \"description\": \"Friendly female assistant voice\",\n \"imageUrl\": \"https://cdn.tryhamsa.com/voices/avatar.png\",\n \"dialectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tryhamsa.com/v2/tts/voices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Support Assistant Female\",\n \"audioUrl\": \"https://cdn.tryhamsa.com/uploads/voice.wav\",\n \"audioTranscription\": \"مرحباً، أنا مساعدك الصوتي.\",\n \"projectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\",\n \"language\": \"ar\",\n \"tags\": [\n \"female\",\n \"conversational\"\n ],\n \"description\": \"Friendly female assistant voice\",\n \"imageUrl\": \"https://cdn.tryhamsa.com/voices/avatar.png\",\n \"dialectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Operation completed successfully",
"messageKey": "OPERATION_SUCCESSFUL",
"data": {
"id": "48f7656f-098b-4c43-b165-7cfd2cc8ac30",
"voiceRecord": "test.wav"
}
}{
"code": 9400,
"message": "Field must be a string!",
"messageKey": "FieldMustBeString"
}{
"success": false,
"code": 500,
"message": "Internal server error"
}Voice Cloning
Create TTS voice
Create a new TTS voice under the current project.
POST
/
v2
/
tts
/
voices
Create TTS voice
curl --request POST \
--url https://api.tryhamsa.com/v2/tts/voices \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Support Assistant Female",
"audioUrl": "https://cdn.tryhamsa.com/uploads/voice.wav",
"audioTranscription": "مرحباً، أنا مساعدك الصوتي.",
"projectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b",
"language": "ar",
"tags": [
"female",
"conversational"
],
"description": "Friendly female assistant voice",
"imageUrl": "https://cdn.tryhamsa.com/voices/avatar.png",
"dialectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b"
}
'import requests
url = "https://api.tryhamsa.com/v2/tts/voices"
payload = {
"name": "Support Assistant Female",
"audioUrl": "https://cdn.tryhamsa.com/uploads/voice.wav",
"audioTranscription": "مرحباً، أنا مساعدك الصوتي.",
"projectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b",
"language": "ar",
"tags": ["female", "conversational"],
"description": "Friendly female assistant voice",
"imageUrl": "https://cdn.tryhamsa.com/voices/avatar.png",
"dialectId": "ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Support Assistant Female',
audioUrl: 'https://cdn.tryhamsa.com/uploads/voice.wav',
audioTranscription: 'مرحباً، أنا مساعدك الصوتي.',
projectId: 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b',
language: 'ar',
tags: ['female', 'conversational'],
description: 'Friendly female assistant voice',
imageUrl: 'https://cdn.tryhamsa.com/voices/avatar.png',
dialectId: 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b'
})
};
fetch('https://api.tryhamsa.com/v2/tts/voices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tryhamsa.com/v2/tts/voices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Support Assistant Female',
'audioUrl' => 'https://cdn.tryhamsa.com/uploads/voice.wav',
'audioTranscription' => 'مرحباً، أنا مساعدك الصوتي.',
'projectId' => 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b',
'language' => 'ar',
'tags' => [
'female',
'conversational'
],
'description' => 'Friendly female assistant voice',
'imageUrl' => 'https://cdn.tryhamsa.com/voices/avatar.png',
'dialectId' => 'ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tryhamsa.com/v2/tts/voices"
payload := strings.NewReader("{\n \"name\": \"Support Assistant Female\",\n \"audioUrl\": \"https://cdn.tryhamsa.com/uploads/voice.wav\",\n \"audioTranscription\": \"مرحباً، أنا مساعدك الصوتي.\",\n \"projectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\",\n \"language\": \"ar\",\n \"tags\": [\n \"female\",\n \"conversational\"\n ],\n \"description\": \"Friendly female assistant voice\",\n \"imageUrl\": \"https://cdn.tryhamsa.com/voices/avatar.png\",\n \"dialectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tryhamsa.com/v2/tts/voices")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Support Assistant Female\",\n \"audioUrl\": \"https://cdn.tryhamsa.com/uploads/voice.wav\",\n \"audioTranscription\": \"مرحباً، أنا مساعدك الصوتي.\",\n \"projectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\",\n \"language\": \"ar\",\n \"tags\": [\n \"female\",\n \"conversational\"\n ],\n \"description\": \"Friendly female assistant voice\",\n \"imageUrl\": \"https://cdn.tryhamsa.com/voices/avatar.png\",\n \"dialectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tryhamsa.com/v2/tts/voices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Support Assistant Female\",\n \"audioUrl\": \"https://cdn.tryhamsa.com/uploads/voice.wav\",\n \"audioTranscription\": \"مرحباً، أنا مساعدك الصوتي.\",\n \"projectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\",\n \"language\": \"ar\",\n \"tags\": [\n \"female\",\n \"conversational\"\n ],\n \"description\": \"Friendly female assistant voice\",\n \"imageUrl\": \"https://cdn.tryhamsa.com/voices/avatar.png\",\n \"dialectId\": \"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Operation completed successfully",
"messageKey": "OPERATION_SUCCESSFUL",
"data": {
"id": "48f7656f-098b-4c43-b165-7cfd2cc8ac30",
"voiceRecord": "test.wav"
}
}{
"code": 9400,
"message": "Field must be a string!",
"messageKey": "FieldMustBeString"
}{
"success": false,
"code": 500,
"message": "Internal server error"
}Authorizations
Pass the API key in the Authorization header, You need to put Token keyword before the API key. e.g. 'Authorization: Token '
Body
application/json
Voice name (Arabic & English letters and numbers only)
Required string length:
1 - 190Example:
"Support Assistant Female"
URL of the uploaded voice sample
Example:
"https://cdn.tryhamsa.com/uploads/voice.wav"
Exact transcription of the uploaded audio sample
Required string length:
1 - 5000Example:
"مرحباً، أنا مساعدك الصوتي."
Example:
"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b"
Voice language
Available options:
en, ar Example:
"ar"
Exactly 2 tags: one gender + one voice style
Required array length:
2 elementsAvailable options:
male, female, conversational, narrator Example:
["female", "conversational"]
Required string length:
1 - 1000Example:
"Friendly female assistant voice"
Optional avatar image for the voice
Example:
"https://cdn.tryhamsa.com/voices/avatar.png"
Required when language is 'ar'. Must be omitted when language is 'en'.
Example:
"ae6d58c6-c6bd-4ae0-ad74-b8b39c29928b"
Was this page helpful?
⌘I