Attaching an 11labs pronunciationDictionary to a v2 voice (provider: vapi, version 2 — tested on Godfrey and Layla) is accepted by both the API and dashboard without error, but pronunciation dictionaries are only documented for v1 voices.
At runtime the first LLM-generated turn fails TTS with invalid_input_message (WebSocket close 1006). Vapi then automatically falls back to a different voice for the rest of the call, with no visible indicator anywhere on the call page — the only way to detect it is digging into the call log for assistant.voice.requestFailed → assistant.voice.fallbackTriggered.
The fixed firstMessage plays fine with the configured voice; the failure only affects LLM-generated speech.
Repro: create a v2 vapi voice assistant, attach pronunciationDictionary: [{ provider: "11labs", pronunciationDictId: "<id>" }], place a call — greeting is fine, first caller turn → bot replies in a different voice.
Requested: reject pronunciationDictionary on v2 voices at save time (or ignore it gracefully), and surface voice-fallback events somewhere visible (call page / event log) so a mid-call voice change isn't silent.
Evidence: A/B across 8+ calls — every assistant with the dict fails on every call (invalid_input_message → fallbackTriggered, close 1006); identical assistants without it never fail. Example failing: 01a01676, 01a0167a; clean (no dict): 01a0166d, 15aafa9c calls.