AirCaps Speaker ID-v1 is enabled per account. If
GET /v1/account shows "enabled": false for aircaps-speaker-id-v1, requests return 403 model_access_denied. To get access, talk to sales.How it works
- A speaker is a name plus optional metadata that you create.
- Each enrollment is one clip of that speaker. The model turns it into a voice embedding, which is stored; the audio is not. A speaker’s profile combines all of its enrollments.
- Identify compares a clip with every profile and returns a similarity
scorefor each speaker, from -1 to 1. Higher means more alike. - You decide. There is no threshold and no “unknown” verdict: your application chooses what score to accept. Scores and thresholds gives measured starting points.
1. Create a speaker
id (spk_…) and no enrollments yet. name and metadata (any JSON object up to 16 KB) are optional; use pseudonymous labels if you prefer.
2. Enroll clips
Send each clip’s raw audio bytes as the request body (not multipart form data). Any common audio or video format works; channels are mixed down and audio is resampled to 16 kHz.consistency shows how well this enrollment matches the speaker’s other enrollments (null for the first one). If one enrollment scores much lower than the others, it may be someone else’s voice or a poor recording: delete it.
Enrollment audio: what works best
A single clean 5–10 s clip is enough to get started. A speaker can have up to 20 enrollments.
3. Identify a clip
resultslists every compared speaker, best first.scorecompares the clip with the speaker’s profile (all of their enrollments together);enrollment_scorescompares it with each enrollment on its own.marginis the best score minus the second best (nullwhen only one speaker was compared).- By default the clip is compared with every enrolled speaker in your account. Limit it with
speaker_ids(comma-separated, or the parameter repeated), for example the people invited to a meeting. Return fewer results withtop_k. - To verify one person, pass just their ID:
?speaker_ids=spk_01k73a9x8w7v6u5t4s3r2q1p0n, and compare thescorewith your threshold. - Clips are 0.5 s to 2 minutes long. Identification results are not stored.
Scores and thresholds
A score is a similarity, not a probability. What counts as “the same person” depends on your audio, so treat the numbers below as a starting point and check them on your own recordings. We measured them on meeting recordings from a single far-field microphone. Each person was enrolled from one meeting with about 15 s of speech and identified in other meetings among the people present. Clips were cropped to one person’s speech.
Longer clips are the biggest lever. Clips of 3 s or more are much more reliable than 1 s clips; if your segments are short, combine several from the same speaker before identifying.
How common decision rules behaved in the same test:
- A good default: accept the top speaker when
score ≥ 0.5andmargin ≥ 0.2; otherwise treat the clip as unknown. - If everyone who might speak is enrolled (a closed group), a lower score such as 0.4 names more clips with few mistakes.
- If unenrolled people may speak, or a wrong name is costly, require a higher score (0.6) and a margin. The last column is the rate at which someone who isn’t enrolled gets named as somebody else.
- Enrolling more speech per person (20–30 s) and comparing only against the people who could be present (
speaker_ids) both reduce mistakes.
Python example
Managing speakers
- List and get speakers with their enrollments; rename or change metadata.
- Delete an enrollment to drop a bad clip; the profile is recomputed from the rest.
- Delete a speaker to remove the person and all their voice data, immediately and permanently.
- Speakers are kept until you delete them; there is no automatic expiry. You can always read and delete them, even if your account loses access to the model.
Limits and usage
- Each clip that is processed (enrollment or identification) counts its duration toward your usage limit, shared by all models. Rejected clips don’t count.
- Clips: 0.5 s to 2 minutes (enrollments at least 1 s), up to 100 MB, one per request.
- 1,000 speakers per account, 20 enrollments per speaker, 600 requests per minute (enrollments and identifications together). To raise them, talk to sales.
- Errors:
invalid_audio,audio_too_short,audio_too_long,file_too_large,no_enrolled_speakers,speaker_not_enrolled,speaker_not_found. See Errors.

