curl --request DELETE \
--url https://api.eesi.ai/v1/voices/{voice_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.eesi.ai/v1/voices/{voice_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.eesi.ai/v1/voices/{voice_id}', 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.eesi.ai/v1/voices/{voice_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.eesi.ai/v1/voices/{voice_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.eesi.ai/v1/voices/{voice_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eesi.ai/v1/voices/{voice_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"voice_id": "<string>",
"name": "<string>",
"engine": "<string>",
"status": "processing",
"has_ref_text": true,
"created_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"ref_text": "<string>",
"is_builtin": false,
"category": "<string>",
"description": "<string>",
"language": "<string>",
"gender": "<string>",
"country": "<string>",
"accent": "<string>",
"consent_attested_at": "2023-11-07T05:31:56Z",
"used_by_count": 0,
"used_by_names": [
"<string>"
],
"isolation": {
"snr_db": 123,
"in_use": true,
"original_url": "<string>",
"isolated_url": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"param": "<string>",
"code": "<string>"
}
}Delete Voice
Erase a cloned voice: its reference clip first, then its row.
The clip is a recording of a person’s voice, so “deleted” has to mean the bytes are gone — flipping a flag and leaving the voiceprint in the bucket makes the delete button a false promise.
Audio is removed before the row, because the row holds the only pointer to it. The other order strands a voiceprint that nothing references and nothing can ever find again. If the clip fails to erase we stop and keep the row, so the voice stays visible and the delete can be retried rather than half-succeeding in silence.
curl --request DELETE \
--url https://api.eesi.ai/v1/voices/{voice_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.eesi.ai/v1/voices/{voice_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.eesi.ai/v1/voices/{voice_id}', 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.eesi.ai/v1/voices/{voice_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.eesi.ai/v1/voices/{voice_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.eesi.ai/v1/voices/{voice_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eesi.ai/v1/voices/{voice_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"voice_id": "<string>",
"name": "<string>",
"engine": "<string>",
"status": "processing",
"has_ref_text": true,
"created_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"ref_text": "<string>",
"is_builtin": false,
"category": "<string>",
"description": "<string>",
"language": "<string>",
"gender": "<string>",
"country": "<string>",
"accent": "<string>",
"consent_attested_at": "2023-11-07T05:31:56Z",
"used_by_count": 0,
"used_by_names": [
"<string>"
],
"isolation": {
"snr_db": 123,
"in_use": true,
"original_url": "<string>",
"isolated_url": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"param": "<string>",
"code": "<string>"
}
}Authorizations
An EESI API key (sk-eesi-...) or a Clerk session token.
Path Parameters
Response
Successful Response
processing, ready, failed The recording pulled apart, as the studio needs to show it.
snr_db is the voice against everything that was around it: high is a
clean take, low is a room. in_use is which clip synthesis reads — a
default the person can change, not a decision made for them.
Which model did the separating is deliberately not here. It is on the row for support to read, and this response is what the console renders — a customer-facing surface has no business naming the weights behind it, and the surest way to keep a name out of a UI is to not send it.
Show child attributes
Show child attributes