curl --request POST \
--url https://api.aurigin.ai/v1/voiceid/verify \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form audio_file='@example-file' \
--form 'voice_vector=<string>' \
--form 'user_id=<string>'import requests
url = "https://api.aurigin.ai/v1/voiceid/verify"
files = { "audio_file": ("example-file", open("example-file", "rb")) }
payload = {
"voice_vector": "<string>",
"user_id": "<string>"
}
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('audio_file', '<string>');
form.append('voice_vector', '<string>');
form.append('user_id', '<string>');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.aurigin.ai/v1/voiceid/verify', 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.aurigin.ai/v1/voiceid/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aurigin.ai/v1/voiceid/verify"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-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.post("https://api.aurigin.ai/v1/voiceid/verify")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aurigin.ai/v1/voiceid/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"is_match": false,
"similarity_score": 0.4861065447330475,
"confidence_score": 0.4861065447330475,
"processing_time": 6.249222755432129,
"model_version": "titanet-large",
"deepfake_score": null
}{
"message": {
"detail": "Audio rejected: AI-generated voice detected (deepfake confidence: 94.6%)",
"type": "forbidden_error",
"correlation_id": "e2ca498c-aad8-442a-9ef7-4ca4f74177dc",
"timestamp": "2026-01-27T17:15:21.749199Z"
},
"statusCode": 403
}{
"error": "validation_error",
"message": "Unsupported audio format",
"status": 400,
"correlation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"error": "validation_error",
"message": "Unsupported audio format",
"status": 400,
"correlation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"error": "validation_error",
"message": "Unsupported audio format",
"status": 400,
"correlation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}Verify voice identity
Verify if a new voice sample matches a previously enrolled voice embedding (belongs to the same speaker) and is not AI-generated.
This endpoint provides a dual-layer trust mechanism:
- Voice Matching - Compares the voice sample against the enrolled voiceprint
- Authenticity Detection - Verifies the voice is not AI-generated
Requirements:
- Voice sample to compare
- Previously generated voice vector from
/voiceid/enroll - Supported formats: WAV, MP3, AAC, FLAC, OGG, M4A
curl --request POST \
--url https://api.aurigin.ai/v1/voiceid/verify \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form audio_file='@example-file' \
--form 'voice_vector=<string>' \
--form 'user_id=<string>'import requests
url = "https://api.aurigin.ai/v1/voiceid/verify"
files = { "audio_file": ("example-file", open("example-file", "rb")) }
payload = {
"voice_vector": "<string>",
"user_id": "<string>"
}
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('audio_file', '<string>');
form.append('voice_vector', '<string>');
form.append('user_id', '<string>');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.aurigin.ai/v1/voiceid/verify', 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.aurigin.ai/v1/voiceid/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aurigin.ai/v1/voiceid/verify"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-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.post("https://api.aurigin.ai/v1/voiceid/verify")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aurigin.ai/v1/voiceid/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"audio_file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"voice_vector\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"is_match": false,
"similarity_score": 0.4861065447330475,
"confidence_score": 0.4861065447330475,
"processing_time": 6.249222755432129,
"model_version": "titanet-large",
"deepfake_score": null
}{
"message": {
"detail": "Audio rejected: AI-generated voice detected (deepfake confidence: 94.6%)",
"type": "forbidden_error",
"correlation_id": "e2ca498c-aad8-442a-9ef7-4ca4f74177dc",
"timestamp": "2026-01-27T17:15:21.749199Z"
},
"statusCode": 403
}{
"error": "validation_error",
"message": "Unsupported audio format",
"status": 400,
"correlation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"error": "validation_error",
"message": "Unsupported audio format",
"status": 400,
"correlation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"error": "validation_error",
"message": "Unsupported audio format",
"status": 400,
"correlation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}Authorizations
Body
Provide the voice sample to verify and the enrolled voice vector to compare against.
Response
Verification completed with voice match and authenticity results
Whether the voice sample matches the enrolled voiceprint
false
Similarity score between the voice sample and enrolled profile (0.0-1.0)
0.4861065447330475
Confidence score for the verification result (0.0-1.0)
0.4861065447330475
Time taken to process the audio and verify the voice in seconds
6.249222755432129
Model version used for voice verification
"titanet-large"
Deepfake detection score (0.0-1.0). null if deepfake detection was not performed or voice is authentic
null