Skip to main content
A pronunciation entry tells the voice how to say a term. You write the term as it should sound, in the spelling of the language being spoken: Lokutor said as Lokútor, Stranger Things in Spanish as Estrénjer Zings. Entries apply before numbers and symbols are read, so 4K, C++ or COVID-19 can be overridden too. Entries live in pronunciation dictionaries on your account, and apply:
  1. to every synthesis your account makes, from its default dictionary;
  2. to an agent’s calls, from the dictionaries the agent uses (dashboard: the agent’s settings);
  3. to one request, from the dictionaries it names and the entries it carries.
When several layers have the same term, the higher one wins: a request’s own entries, then the dictionaries it names, then the agent’s, then the default.

Writing a good respelling

  • Write it as it sounds in the language being spoken, with that language’s letters: Spanish Guatsáp for WhatsApp, Catalan or French spellings for those languages.
  • Mark the stressed syllable with an accent where the language uses one: Lokútor.
  • Lowercase. A short word in capitals (NASA) is read letter by letter, so it is rejected.
  • No digits: they are read as numbers. Write them as words.
  • Give a respelling per language you need. A term with no respelling for the language being spoken is said as written.

Entry

Matching. Longest term first, left to right, one pass (a respelling is never matched again). A term matches only as a whole word: Teams matches in Teams. and Teams's, not in TeamsPro or Teams-like. In French, Catalan, Italian and Portuguese a term also matches after an elided article or preposition: l'iPhone, d'Amazon, dell'App, qu'Uber keep their l', d'… and respell only the term.

Dictionaries

Authenticate as for any API call (Authorization: Bearer or X-API-Key). An account has at most 50 dictionaries of at most 2,000 entries each, and at most one default.

GET /v1/pronunciation-dictionaries

POST /v1/pronunciation-dictionaries

Creates a dictionary. Body: name (1–100 characters), is_default (making one the default clears the previous one), entries. Returns 201 with the dictionary.

GET, PUT, DELETE /v1/pronunciation-dictionaries/{id}

PUT replaces the dictionary’s name, is_default and entries with the body’s. DELETE removes it; agents that used it simply stop using it.

Validation

Every save is checked by the same text processing the voice uses. A respelling the voice cannot say as written is refused with 400 and the problems found:
index is the entry’s position. level is error (not saved) or warning (saved: digits, which are read as numbers). A save with warnings and no errors succeeds (201 or 200) and returns the dictionary with its warnings under problems, in the same shape.

Per request

POST /tts/synthesize and WS /ws/tts take:

Markup

The text of any request may carry: Anything else that looks like a tag is read as written.