03 / Identity
Enroll a voice once. Recognise it forever.
A REST API for persistent voiceprints. Enroll from a few seconds of speech, then verify 1:1 or identify 1:N — and carry that identity straight into a live stream.
01
Three calls
from vsip import ProfilesClient
profiles = ProfilesClient(api_key="vsip_...")
# 1. Enroll — a few seconds of clean speech is enough
p = await profiles.enroll(audio, label="ada@acme.com", consent_obtained=True)
# 2. Verify — is this the same person? (1:1)
v = await profiles.verify(p["id"], audio)
print(v["match"], v["score"]) # True 0.91
# 3. Identify — who is this, out of my roster? (1:N)
who = await profiles.identify(audio)
print(who["best_match"]) # {"label": "ada@acme.com", ...}02
A voiceprint is not a recording
What gets stored is a 192-number embedding — a mathematical fingerprint of a voice. The audio you send is processed in memory and discarded. The embedding cannot be played back, and it cannot be turned back into speech.
Quality gates run before anything is stored: audio that is too short, too quiet, or classified as noise rather than speech is rejected at enrollment with a clear reason, so you never build a profile on a bad sample.
03
Built for regulated teams
Voiceprints are biometric data, and the API treats them that way. Every profile carries an explicit consent_obtained flag and an optional retention_days window, after which it is deleted automatically by a background janitor — not by you remembering to.
You can also set a per-request threshold to tune how strict a match must be, trading false accepts against false rejects for your own risk appetite.
04
What you get back
Returning-caller recognition
The caller is known before they finish their first sentence — no account number, no “can you confirm your date of birth”.
Voice as a second factor
Pair a verification score with your existing auth to raise confidence on sensitive actions, without adding a step for the user.
Household & shared devices
Identify which family member is at the kiosk or speaker, and personalise from the first word.
Agent hand-off continuity
The same voiceprint follows the customer across sessions, channels and products.
Roster matching
Identify against a list of enrolled voices (1:N) and get the best match with a score — or nothing, if no one clears the bar.
Live-stream seeding
Open a stream with ?profile_id= and the session locks to that person from the first word — no in-session enrollment.
05