POST /v1/voiceprints/verify compares a recording with a voiceprint (stored id or token).
score: similarity of the two voices (about −1 to 1, higher = more alike);match=score ≥ threshold(0.55).decisiongives three levels:match(≥ 0.60),uncertain(0.50–0.60: ask for more speech or another check),no_match(< 0.50).- Measured (Common Voice Turkish, 171 speakers, 20 s enrolment, 5 s test, threshold 0.55): wrongly accepted / wrongly rejected 0.3 % / 1.7 % on wideband audio, 0.8 % / 3.9 % on telephone audio, 0.7 % / 11 % on telephone audio with noise. With 3 s of speech the errors are about 2–3× higher. Real calls (other codecs, packet loss) can be worse.
- A helper signal, not a login. Verification is not protected against recorded or synthetic (cloned) voices. Use it together with other checks (caller number, knowledge questions, OTP), never as the only way into an account.
- Personal data: verifying a person by voice processes biometric data; your consent text must cover this purpose.
- Calls are not billed.
Signed result: signed
signed is a JWT (JWS compact, alg: EdDSA — Ed25519) of the result, so a backend can trust a result that passed
through an app or another service. Claims: iss "umay", aud (your account), sub (voiceprint id or "token"),
jti (verification id), iat, exp (5 minutes later), score, match, decision, threshold, speech_seconds, nonce. The
public key is a JWK set at GET /v1/voiceprints/jwks (cache it; kid names the key).