curl --request GET \
--url https://api.cekura.ai/test_framework/v1/personalities/ \
--header 'X-CEKURA-API-KEY: <api-key>'import requests
url = "https://api.cekura.ai/test_framework/v1/personalities/"
headers = {"X-CEKURA-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-CEKURA-API-KEY': '<api-key>'}};
fetch('https://api.cekura.ai/test_framework/v1/personalities/', 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.cekura.ai/test_framework/v1/personalities/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-CEKURA-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v1/personalities/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cekura.ai/test_framework/v1/personalities/")
.header("X-CEKURA-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v1/personalities/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"name": "<string>",
"background_noise": "<string>",
"voice_model": "<string>",
"id": 123,
"project": 123,
"prompt": "<string>",
"language": "af",
"accent": "<string>",
"voice_id": "<string>",
"interruption_level": "<string>",
"speed": 1,
"generation_config": {
"volume": 1.25,
"emotion": "neutral"
},
"network_simulation": {
"packet_loss": 50,
"jitter": 50,
"latency": 50
},
"message_plan": {
"idle_timeout_seconds": 2,
"idle_message_max_spoken_count": 2
},
"start_speaking_plan": 1,
"stop_speaking_plan": {
"num_words": 1,
"voice_seconds": 1,
"backoff_seconds": 1
},
"background_sound_volume": {
"base": 0.5,
"reduced": 0.5
},
"voice_volume": "<string>",
"effective_voice_volume": "<string>",
"patronus_settings": null,
"provider_agent_id": "<string>",
"end_call_enabled": true,
"provider": "11labs"
}
]List Personalities
List caller personalities
curl --request GET \
--url https://api.cekura.ai/test_framework/v1/personalities/ \
--header 'X-CEKURA-API-KEY: <api-key>'import requests
url = "https://api.cekura.ai/test_framework/v1/personalities/"
headers = {"X-CEKURA-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-CEKURA-API-KEY': '<api-key>'}};
fetch('https://api.cekura.ai/test_framework/v1/personalities/', 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.cekura.ai/test_framework/v1/personalities/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-CEKURA-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cekura.ai/test_framework/v1/personalities/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cekura.ai/test_framework/v1/personalities/")
.header("X-CEKURA-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/test_framework/v1/personalities/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"name": "<string>",
"background_noise": "<string>",
"voice_model": "<string>",
"id": 123,
"project": 123,
"prompt": "<string>",
"language": "af",
"accent": "<string>",
"voice_id": "<string>",
"interruption_level": "<string>",
"speed": 1,
"generation_config": {
"volume": 1.25,
"emotion": "neutral"
},
"network_simulation": {
"packet_loss": 50,
"jitter": 50,
"latency": 50
},
"message_plan": {
"idle_timeout_seconds": 2,
"idle_message_max_spoken_count": 2
},
"start_speaking_plan": 1,
"stop_speaking_plan": {
"num_words": 1,
"voice_seconds": 1,
"backoff_seconds": 1
},
"background_sound_volume": {
"base": 0.5,
"reduced": 0.5
},
"voice_volume": "<string>",
"effective_voice_volume": "<string>",
"patronus_settings": null,
"provider_agent_id": "<string>",
"end_call_enabled": true,
"provider": "11labs"
}
]Authorizations
API Key Authentication. It should be included in the header of each request.
Query Parameters
Filter by language code (e.g. en, es, fr).
Filter to personalities available to this project (its own plus globally available ones)
Response
Name of the personality
Example: "Customer Service"
255Background noise
Voice model name
Project that will own the personality. Optional when using a project-scoped API key
(it is inferred from the key); required otherwise.
Example: 1
Prompt of the personality
Example: "You are a friendly and helpful customer service agent who is always willing to help"
Language of the personality
af- Afrikaansar- Arabicbn- Bengalibg- Bulgarianzh- Chinese Simplifiedcs- Czechda- Danishnl- Dutchen- Englishet- Estonianfi- Finnishfr- Frenchde- Germanel- Greekgu- Gujaratihi- Hindihe- Hebrewhu- Hungarianid- Indonesianit- Italianja- Japanesekn- Kannadakk- Kazakhko- Koreanms- Malayml- Malayalammr- Marathimulti- Multilingualno- Norwegianpl- Polishpa- Punjabipt- Portuguesero- Romanianru- Russiansk- Slovakes- Spanishsv- Swedishth- Thaitr- Turkishtl- Tagalogta- Tamilte- Teluguuk- Ukrainianuz- Uzbekvi- Vietnamese
af, ar, bn, bg, zh, cs, da, nl, en, et, fi, fr, de, el, gu, hi, he, hu, id, it, ja, kn, kk, ko, ms, ml, mr, multi, no, pl, pa, pt, ro, ru, sk, es, sv, th, tr, tl, ta, te, uk, uz, vi Accent of the personality
Example: "American"
255Voice ID
Example: "TX3LPaxmHKxFdv7VOQHJ"
Interruption level
Speed of the voice
0.8 <= x <= 1.2Generation config for Cartesia Sonic-3 voice model. Only valid when provider is "cartesia" and voice_model is "sonic-3.5". Supports volume and emotion Example: {"volume": 1.5, "emotion": "happy"}
Show child attributes
Show child attributes
Network simulation configuration for testing network impairments.
Show child attributes
Show child attributes
Message plan configuration for idle timeout behavior. Supports idle_timeout_seconds (positive int) and idle_message_max_spoken_count (positive int). Example: {"idle_timeout_seconds": 15, "idle_message_max_spoken_count": 2}
Show child attributes
Show child attributes
Wait seconds before the bot starts speaking (float >= 0). Ignored if interruption_level is also set in the same request (preset takes precedence). Example: 0.7
x >= 0Stop speaking plan configuration. Controls when the bot stops speaking. Supports num_words (int >= 0), voice_seconds (float >= 0), backoff_seconds (float >= 0). Ignored if interruption_level is also set in the same request (preset takes precedence). Example: {"num_words": 3, "voice_seconds": 0.3, "backoff_seconds": 0}
Show child attributes
Show child attributes
Background sound volume levels (0.0 to 1.0). base sets both the base and normal volume; reduced sets the quieter level during bot speech. Example: {"base": 0.05, "reduced": 0.02}
Show child attributes
Show child attributes
Speech volume of the testing agent (0.01 to 2.0, default 1.0). Works on every voice provider — it is amplitude scaling applied after synthesis, so it reaches far quieter levels than generation_config.volume, which is a Cartesia-native parameter limited to Cartesia's own 0.5-2.0. Setting this clears any generation_config.volume so the ratio is never applied twice. Send null to remove it. Example: 0.05 for a barely-audible caller.
Read-only. The volume the call will actually play at: voice_volume if set, else a legacy generation_config.volume, else 1.0. Use this to populate a volume control.
Provider agent ID
Example: "assistant_123"
Whether the end call is enabled
Provider of the voice
11labs- Elevenlabscartesia- Cartesia
11labs, cartesia