Speech Recognition Dictionaries
Dictionaries are short lists of domain-specific terms — brand names, product SKUs, technical jargon, people, places — that you attach to an agent. The speech-to-text engine biases its transcription toward those terms, so the agent hears “Vocobase” instead of “Vocal base” and “SKU-4471” instead of “skew four thousand four hundred seventy one”.
Dictionaries only affect agents using the Soniox STT provider, which is the default for new agents. They have no effect on other providers.
When dictionaries help most
- Proper nouns the model has never seen (your company name, product names, internal codes)
- Ambiguous homophones where context alone does not disambiguate (e.g., “Mira” vs “Meera”)
- Alphanumeric identifiers the user speaks slowly (serial numbers, reference codes)
- Non-English-origin words embedded in an English call (e.g., Indian names, Spanish towns)
They do not help with:
- Accent adaptation (that is handled by the language model itself)
- Entire sentences or long phrases (dictionaries are a per-term bias, not a grammar)
- Replacing STT output with a canonical form (use your own post-processing for that)
Limits
| Limit | Value |
|---|
| Dictionary name | 1–100 characters, unique per partner |
| Description | 0–500 characters |
| Terms per dictionary | Unlimited |
| Combined characters across all dictionaries attached to one agent | 10,000 |
| Term length | No hard limit; short phrases (1–4 words) work best |
The 10,000-character cap is enforced at attachment time and on PATCH, so you cannot accidentally push an agent over the limit.
Create a dictionary
curl -X POST https://api.vocobase.com/api/dictionaries \
-H "Authorization: Bearer rg_live_abc123def456ghi789jkl012" \
-H "Content-Type: application/json" \
-d '{
"name": "Vocobase Product Catalog",
"description": "Product names, SKUs, and plan tiers referenced on support calls.",
"terms": [
"Vocobase",
"SKU-4471",
"Pro Annual Plan",
"Voice Sandbox",
"Meera Iyer"
]
}'
{
"id": "d1234567-abcd-1234-abcd-123456789012",
"name": "Vocobase Product Catalog",
"description": "Product names, SKUs, and plan tiers referenced on support calls.",
"terms": ["Vocobase", "SKU-4471", "Pro Annual Plan", "Voice Sandbox", "Meera Iyer"],
"termCount": 5,
"charCount": 52,
"createdAt": "2026-04-24T10:30:00Z",
"updatedAt": "2026-04-24T10:30:00Z"
}
Terms are case-insensitive and deduplicated server-side, so "vocobase" and "Vocobase" count as one. Passing the same term twice does not inflate termCount.
Attach a dictionary to an agent
An agent can have any number of dictionaries attached; all of their terms are merged at session start.
curl -X POST https://api.vocobase.com/api/agents/{agent_id}/dictionaries \
-H "Authorization: Bearer rg_live_abc123def456ghi789jkl012" \
-H "Content-Type: application/json" \
-d '{ "dictionary_id": "d1234567-abcd-1234-abcd-123456789012" }'
If attaching a dictionary would push the agent’s combined term characters past 10,000, the request fails with 400 DictionaryCharLimitExceeded. Detach a less-relevant dictionary, or split a large dictionary into smaller, more targeted ones.
Bigger is not better. A focused 200-term dictionary biases the STT engine more effectively than a 2,000-term grab-bag because the engine has fewer distractors to weigh. Keep dictionaries narrow.
Update a dictionary
PATCH any subset of name, description, or terms. Passing terms replaces the whole list — there is no incremental add/remove. Merge the lists client-side before sending.
curl -X PATCH https://api.vocobase.com/api/dictionaries/d1234567-abcd-1234-abcd-123456789012 \
-H "Authorization: Bearer rg_live_abc123def456ghi789jkl012" \
-H "Content-Type: application/json" \
-d '{
"terms": ["Vocobase", "SKU-4471", "SKU-4472", "Pro Annual Plan"]
}'
Changes take effect on the next session that starts. In-flight calls continue with the snapshot taken at session start.
Delete a dictionary
curl -X DELETE https://api.vocobase.com/api/dictionaries/d1234567-abcd-1234-abcd-123456789012 \
-H "Authorization: Bearer rg_live_abc123def456ghi789jkl012"
Returns 204 No Content. The dictionary is removed and detached from every agent it was attached to.
Tips for authoring good dictionaries
- Write terms the way they are pronounced, not the way they are written. If your product “GraphQL” is pronounced “graph Q L”, add both
GraphQL and graph Q L.
- Group by domain, not by size. One dictionary per product line, region, or use case is more useful than one mega-dictionary.
- Audit with real transcripts. Pull a week of call recordings and look for consistent mis-transcriptions — those are your dictionary candidates.
- Remove, don’t just add. Terms that never appear in your actual conversations add noise. Trim after two weeks of usage.
Troubleshooting
| Symptom | Likely cause |
|---|
| Transcripts still wrong after attaching | Dictionary not yet effective on this call — dictionaries apply at session start. Start a new call. |
400 DictionaryCharLimitExceeded on attach | This agent’s combined term characters would exceed 10,000. Detach something else or split the dictionary. |
| Dictionary has no effect on accuracy | You are likely not using the Soniox STT provider. Only Soniox supports biased transcription; other providers ignore attached dictionaries. |
| 409 on create | Dictionary names must be unique per partner. Rename or update the existing one. |