Skip to main content
Custom dictionaries are per-project pronunciation and replacement lists. Each entry maps a written word to the text or IPA the TTS pipeline should pronounce instead. Use them for brand names, product names, acronyms, and domain vocabulary that should sound consistent across requests. Dictionaries apply to a synthesis request only when it carries the dictionary’s projectId; see Generate With Dictionaries. Changes are available to synthesis after the dictionary mutation finishes. For the full HTTP contract, field limits, master-key project_id rules, and error codes, see the Dictionaries API reference.

Create a Dictionary

Manage Dictionaries

Every dictionaries.* and dictionaries.entries.* method accepts an optional final { projectId } argument. It is required only for master-key callers acting on a specific project; with a normal API key, omit it.

Add and Manage Entries

Use replacement for normal spelling-based fixes. Use ipa when you need an exact phonetic pronunciation; IPA takes precedence over replacement.

Atomic Bulk Sync

replaceAll upserts every entry in one transaction and deletes entries currently in the dictionary whose word is not in the payload. Use it to sync from a CMS, PIM, or internal glossary.
replaceAll is intentionally destructive for omitted words. Only call it with the complete desired contents of that dictionary.

Generate With Dictionaries

Pass the dictionary’s projectId on client.tts.generate() or client.tts.stream(). Without projectId, no dictionary applies and a non-empty dictionaryIds is rejected. With projectId, omit dictionaryIds to apply all active dictionaries of the project, or pass a list to select exact IDs. Keep normalize enabled unless you have a specific reason to bypass text normalization.
Streaming and multi-context sessions take the same two fields in their config and send them with the session configuration; they apply to every turn or context on that connection:

Dictionary types

Clean up

Next steps

Last modified on September 23, 2026