Skip to main content
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). decision gives 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).