curl --request POST \
--url https://audimee.com/api/v1/voice-models \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My band lead",
"trainingAudioUrls": [
"https://example.com/audio/take-1.wav",
"https://example.com/audio/take-2.wav"
]
}
'import requests
url = "https://audimee.com/api/v1/voice-models"
payload = {
"name": "My band lead",
"trainingAudioUrls": ["https://example.com/audio/take-1.wav", "https://example.com/audio/take-2.wav"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'My band lead',
trainingAudioUrls: ['https://example.com/audio/take-1.wav', 'https://example.com/audio/take-2.wav']
})
};
fetch('https://audimee.com/api/v1/voice-models', 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://audimee.com/api/v1/voice-models",
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' => 'My band lead',
'trainingAudioUrls' => [
'https://example.com/audio/take-1.wav',
'https://example.com/audio/take-2.wav'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://audimee.com/api/v1/voice-models"
payload := strings.NewReader("{\n \"name\": \"My band lead\",\n \"trainingAudioUrls\": [\n \"https://example.com/audio/take-1.wav\",\n \"https://example.com/audio/take-2.wav\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://audimee.com/api/v1/voice-models")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My band lead\",\n \"trainingAudioUrls\": [\n \"https://example.com/audio/take-1.wav\",\n \"https://example.com/audio/take-2.wav\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://audimee.com/api/v1/voice-models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My band lead\",\n \"trainingAudioUrls\": [\n \"https://example.com/audio/take-1.wav\",\n \"https://example.com/audio/take-2.wav\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "8f1c2a7e-3d0b-4b2a-9f6a-1f4d6c3e9b21",
"type": "custom"
}Create a custom voice model
Starts training a new custom voice model from the supplied audio URLs. Training runs asynchronously — the response returns immediately with the new model’s id; poll GET /voice-models/{id} and watch percentageDone and confirmedDone to know when the model is usable for conversions.
The combined duration of trainingAudioUrls must not exceed your plan’s maximum (default 30 minutes). The number of custom models you may hold concurrently may also be capped by your plan.
curl --request POST \
--url https://audimee.com/api/v1/voice-models \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My band lead",
"trainingAudioUrls": [
"https://example.com/audio/take-1.wav",
"https://example.com/audio/take-2.wav"
]
}
'import requests
url = "https://audimee.com/api/v1/voice-models"
payload = {
"name": "My band lead",
"trainingAudioUrls": ["https://example.com/audio/take-1.wav", "https://example.com/audio/take-2.wav"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'My band lead',
trainingAudioUrls: ['https://example.com/audio/take-1.wav', 'https://example.com/audio/take-2.wav']
})
};
fetch('https://audimee.com/api/v1/voice-models', 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://audimee.com/api/v1/voice-models",
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' => 'My band lead',
'trainingAudioUrls' => [
'https://example.com/audio/take-1.wav',
'https://example.com/audio/take-2.wav'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://audimee.com/api/v1/voice-models"
payload := strings.NewReader("{\n \"name\": \"My band lead\",\n \"trainingAudioUrls\": [\n \"https://example.com/audio/take-1.wav\",\n \"https://example.com/audio/take-2.wav\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://audimee.com/api/v1/voice-models")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My band lead\",\n \"trainingAudioUrls\": [\n \"https://example.com/audio/take-1.wav\",\n \"https://example.com/audio/take-2.wav\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://audimee.com/api/v1/voice-models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My band lead\",\n \"trainingAudioUrls\": [\n \"https://example.com/audio/take-1.wav\",\n \"https://example.com/audio/take-2.wav\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "8f1c2a7e-3d0b-4b2a-9f6a-1f4d6c3e9b21",
"type": "custom"
}Authorizations
Static API key issued by Audimee, passed as Authorization: Bearer {token}.
Body
Display name for the new custom voice model.
1Publicly accessible URLs to the training audio files. The server downloads each URL server-side, so the URLs must be reachable from the public internet for the duration of the request. Combined audio length must not exceed your plan's per-model maximum (default 30 minutes).
1