Skip to main content
For inputs that contain kanji, numbers, units, or symbols, the spoken form often diverges from the written form. The normalized_text field lets you provide a pronunciation-oriented version of your input alongside the original — the engine uses both to produce more accurate speech. The original text preserves meaning and context. The normalized_text describes how the sentence should be spoken.
normalized_text is currently used by sona_speech_2 and sona_speech_2_flash and is primarily designed for Japanese.

When normalized text helps

Pair normalized_text with text whenever your input contains:
  • Numbers with implicit pronunciation (years, prices, phone numbers)
  • Units and symbols (10%, 170cm, $50)
  • Mixed scripts (Japanese with English abbreviations, Latin words inside Korean)
  • Kanji with ambiguous readings
  • Special symbols (, , )
It is strongly recommended for audiobooks, narration, announcements, and character voice work where pronunciation accuracy matters. For casual short conversational lines, it’s usually not necessary.

Basic usage

Generating normalized Japanese text with an LLM

The most common pattern is to call an LLM once to produce the normalized version, then pass both text and normalized_text to the TTS API. The prompt below produces clean JSON output that you can map directly to the request.

Tips

  • Keep text natural. Don’t include furigana or other annotations inside text. Put all pronunciation hints in normalized_text.
  • Match word-for-word. normalized_text should match the meaning of text exactly — don’t paraphrase or rewrite, only respell.
  • Cache LLM outputs. For deterministic inputs (UI strings, recurring announcements), generate normalized_text once and store it alongside the original.
  • Skip if not needed. Casual conversational lines without numbers, units, or ambiguous kanji usually don’t benefit from normalized_text.

Models

Which models accept normalized_text.

Create speech

Full TTS request reference.