Speech Synthesis Markup Language (SSML) is an XML-based markup language that wraps text in tags to tell a text to speech model how to speak it, including where to pause, how to pronounce a word, and which phrase to stress.
That control layer sits behind a lot of the AI speech you already hear. An interactive voice response (IVR) system reading back a confirmation number and an AI audiobook narrator pausing at the end of a chapter both rely on some version of it. If you've spent time customizing AI-generated speech, you've probably come across SSML.
SSML has been part of TTS technology for over two decades and is still a major part of how many providers deliver TTS. This guide explains what SSML is and exactly where it applies across ElevenLabs' model lineup, along with the improved Audio Tag system that Eleven v3 and Eleven v4 use to deliver leading natural-sounding text to speech.
Summary
- SSML is a W3C-rooted markup language used to control vocal pauses, emphasis, pronunciation, and pacing found in synthesized speech.
- ElevenLabs models, except for Eleven v3 and Eleven v4, support the SSML <break> tag for pauses up to 3 seconds.
- Eleven Flash v2 and Eleven Turbo v2 support the <phoneme> tag for custom English pronunciation.
- Eleven v3 and Eleven v4 do not support SSML at all. Instead, they use Audio Tags for bracketed, natural-language instruction such as [whispering] and [sighs] to control the flow of synthesized speech.
- WebSocket API controls SSML parsing through the enable_ssml_parsing parameter and sends SSML tags as complete messages to avoid added latency.
- Tags such as <prosody>, <say-as>, <sub>, <lang>, <voice> and <audio> aren't supported by ElevenLabs models, but each one has an equivalent: voice settings, text normalization, pronunciation dictionaries, multilingual models, separate voices and sound effects.
What is SSML?
SSML is a markup language that allows you to annotate written text with instructions for how a synthesis engine should speak it. The World Wide Web Consortium (W3C) developed it as a standard to extend beyond plain text to speech models. SSML offers explicit, machine-readable directions for how a passage should be pronounced, rather than relying on plain-text interpretation models.
SSML is not a unique markup that is siloed to any single provider. Amazon Polly and Microsoft Azure Speech both use SSML tags, such as <break> and <emphasis>, as their primary control mechanism. Most cloud text to speech platforms accept some version of the standard. SSML has been the default way to annotate speech long before generative voice models existed.
SSML remains a fundamental standard, while newer, model-specific controls develop alongside modern generative voice technologies. This vendor-neutral specification behind SSML lets providers implement common core tags. Providers can then layer their own extensions and restrictions on top of those core tags.
Common SSML tags to improve intonation and what they do
SSML implementations share a core set of tags that most people will search for when trying to control synthesized speech.
These common SSML tags are:
- <speak>: This is the root tag that wraps the full passage together. Most implementations require it to recognize the enclosed content as SSML.
- <break>: Inserts a pause for a specified duration of time, which proves to be useful for natural phrasing between clauses or sentences or when building tension in a piece of writing.
- <phoneme>: Specifies the exact pronunciation of a word using a phonetic alphabet such as IPA or CMU Arpabet, which is useful for acronyms, names, or technical terms.
- <emphasis>: Stresses a word or phrase, mimicking how a speaker would naturally raise or lower the weight of meaning behind it.
Each of these four tags will behave differently depending on the TTS model reading it. Some providers will support additional tags for prosody or speaking rate. A script written for one TTS provider won't behave the same as another, even if both claim SSML support, because coverage of the full tag set varies.
What varies most is which tags a given text to speech model actually processes, which is where ElevenLabs' implementation becomes specific.
Using SSML with ElevenLabs
SSML support through ElevenLabs isn't fully uniform. It depends on which model you select to generate the audio. The <break> tag is the most broadly supported element, and <phoneme> is available on a narrower set of models.
Older ElevenLabs TTS models, like Multilingual v2, support the <break> tag for pauses up to three seconds. For example, an AI agent might say, "Hold on, let me think," then use <break time="2.0s" /> to create an audible pause before continuing with "Alright, I know how to help." It’s the most common tag in many workflows, as it helps to simulate a more natural style of conversation.
When using SSML tags, it’s best to stick to a small handful at once. Using many in one sentence or paragraph can cause a model to change speed unexpectedly or pick up a range of audio artifacts. Different voices also handle pauses differently, especially voices trained on samples that include filler phrases like "uh" or "um."
SSML in practice with ElevenLabs
ElevenLabs models Flash v2 and Turbo v2 take it a step further and also support the <phoneme> tag for custom pronunciations, limited to English only. This makes the phoneme tag useful for correcting how a model pronounces a name, acronym, technical term, or other business-related verbiage. This applies as long as the script runs on one of those two models.
Conversely, Eleven v3 and Eleven v4 break from this pattern entirely. They use Audio Tags for delivery control. Additionally, Eleven v4 introduces native inline IPA support, allowing IPA symbols wrapped in forward slashes to be read directly within your text. We'll cover what replaces the break tag and delivery controls below.
For the full breakdown of ElevenLabs' text to speech controls, including pronunciation dictionaries and text normalization, see the best practices guide.
SSML code examples with ElevenLabs
The examples below show SSML in a script and in an API call. Remember that <break> works on every model except Eleven v4 and Eleven v3, and <phoneme> works only on Flash v2 and Turbo v2 (English only).
Implementing SSML for voice control to add a pause
Wrap the text and the tag in a <speak> block, and keep the quotation marks around the attribute value:
Find more information about pauses and SSML phoneme tags via ElevenAPI.
Fix a pronunciation with <phoneme>
Use IPA or the CMU Arpabet to spell out exactly how a word should sound. Here the name "Siobhan" is guided with IPA, while "Madison" is outlined with the CMU Arpabet:
Generate speech with SSML in Python
This call sends a script containing a break tag to a model that supports it:
Generate speech with SSML in JavaScript
Below is a similar example for generating speech with SSML but written in JavaScript.
SSML and the WebSocket API
Streaming audio through ElevenLabs' WebSocket API instead of a standard HTTP request requires explicitly enabling SSML parsing. This is off by default and can be controlled with the enable_ssml_parsing parameter.
Sending each SSML tag as a fully self-contained message versus splitting it across multiple streamed chunks is recommended for best results. Splitting a tag partway through a message adds latency, given that the parser needs the complete tag before it can act on it.
Uploading a phoneme-based pronunciation dictionary automatically enables SSML parsing for the request, even when the enable_ssml_parsing parameter was not specifically set. For full parameter details and message formatting available for the WebSocket API, visit this docs guide about generating audio in real-time.
The example below turns SSML parsing on in the connection URL and sends the full break tag inside a single message:
SSML tags ElevenLabs doesn't support, and what to use instead
By moving to the Audio Tags system, ElevenLabs Text to Speech models give users more flexibility and granular control over their audio outputs. Audio Tags are also written completely in natural language, making them extremely easy to write into your scripts.
If you’re working with an earlier ElevenLabs model, it can be useful to know which SSML tags are supported. Due to the host of preferred alternatives, early ElevenLabs models now only process <break> and <phoneme>, with the other SSML tags being covered by other methods.
Other SSML tags you may know from the W3C specification aren't read as markup, so each needs a different approach. Here’s what to replace other SSML tags with on ElevenLabs:
SSML tag
What it does
What to use instead
<prosody>
Sets pitch, speaking rate and volume
The speed and stability voice settings. On Eleven v3 and Eleven v4, delivery audio tags such as [slowly] or [rushed]
<emphasis>
Stresses a word or phrase
Capitalization or punctuation for emphasis. On Eleven v3 and Eleven v4, tags such as [shouts]
<say-as>
Controls how numbers, dates and acronyms are read
Text normalization, spelling the value out in words, or a pronunciation dictionary rule
<sub>
Substitutes the spoken form of a written word
A pronunciation dictionary alias rule
<lang>
Switches the language for a phrase
A multilingual model, with the phrase written in the target language
<voice>
Switches the speaker mid-script
A separate generation per voice, or multi-speaker dialogue on Eleven v3 and Eleven v4
<audio>
Inserts a recorded audio file or sound
Sound effect audio tags on Eleven v3 and v4, ElevenLabs' sound effects tool, or mixing audio after generation
Prosody: Pitch, speaking rate and volume with SSML
SSML's <prosody> tag adjusts pitch, speaking rate and volume for a stretch of text. On earlier ElevenLabs models, you control pacing through the speed voice setting and expressiveness through the stability setting, both of which apply to the whole generation rather than to a single phrase.
To change pacing within a script, split the text into separate generations or add <break> tags between sentences. On Eleven v3 and v4, use the Audio Tags in the table above, such as [slowly], [rushed] and [whispers], placed directly in the line.
Pronunciation: <phoneme>, <say-as> and <sub> with SSML
ElevenLabs gives you three routes when wanting to control pronunciation in your TTS outputs.
Here are the main methods you can turn to:
- Use <phoneme> for a one-off fix on Flash v2 or Turbo v2, as in the example above.
- Use a pronunciation dictionary for terms that recur across many scripts. A dictionary can hold phoneme rules, and alias rules that behave like <sub>, for example mapping "UN" to "United Nations".
- For what <say-as> handles, such as numbers, dates, currencies and phone numbers, rely on text normalization, which converts written values into spoken words. When a value must be read exactly one way, such as a confirmation number, spell it out or space out the digits in the script.
Language and locale
SSML's <lang> tag marks a phrase as belonging to another language. ElevenLabs TTS models don’t read this tag. Instead, choose a multilingual model and write the phrase in the language it should be spoken in.
Flash v2 and Turbo v2 are English-only, so scripts that mix languages need a multilingual model such as Multilingual v2, Flash v2.5, Eleven v3, or Eleven v4. Eleven v4 and v3 also support accent tags such as [French accent] and IPA transcription across 70+ languages.
Audio and sound effects
SSML's <audio> tag plays a recorded clip inside a spoken response. This is an SSML tag that ElevenLabs doesn’t support, as our TTS models can generate novel sound effects from your natural-language prompts.
To add sound inside the speech itself, simply write the sound effect tag, such as [applause] or [door slamming], and watch as Eleven v4 and Eleven v3 bring it to life. For longer or more granular sound design, generate the sound effect separately and mix it with the voice track in your editor or production workflow.
SSML best practices with ElevenLabs
If you’re working with one of the older ElevenLabs TTS models, then SSML tags are still partially supported. Remember, you can switch over to Eleven v4 at any time to take full advantage of using Audio Tags, which means you’ll never have to look up the exact phrasing of an SSML tag again.
But when working with SSML in ElevenLabs, here are a few tips to get you started:
- Check which model you’re using: <break> works on every model except Eleven v3, <phoneme> works only on Flash v2 and Turbo v2, and audio tags work only on more recent models, such as Eleven v4 and Eleven v3.
- Only use breaks sparingly: Place one at each natural boundary rather than stacking several in a row.
- Write SSML tags as expected: Keep quotation marks around attribute values, for example <break time="2.0s" />, and close every tag you open.
- Stream tags in one piece: Send each SSML tag inside a single WebSocket message.
- Test with the voice you will ship: Voices handle pauses differently, so listen to short generations before running a full script. ElevenLabs has over 17,500 total voices in our Voice Library.
Beyond these best practices for SSML, it’s a good idea to use a pronunciation dictionary for any terms that are going to come up frequently. For one-off fixes, <phoneme> is the best option.
What are the main use cases of SSML?
Speech Synthesis Markup Language is mainly used to control or fine-tune how a TTS engine produces an audio clip. It’s a useful tool to insert pauses or refine the pronunciation of a certain word, as well as embed a sense of prosody into AI-generated speech.
Here are some SSML use cases where the standard proves useful:
- Interactive voice response (IVR) systems: Useful when an IVR system wants to pause between a prompt and a menu or read numbers clearly.
- Conversational agents: Adding a short pause before a response so the exchange sounds natural.
- Audiobooks and long-form narration: Pausing at chapter ends and between scenes to show a clear demarcation of before-and-after the moment ends.
- E-learning and training: Correcting the pronunciation of product names, technical terms, acronyms, and business-specific terms.
- Notifications and alerts: Controlling how dates, times and reference codes are read.
While SSML does offer a range of use cases, all of these can be achieved without the need to memorize and insert often complex SSML tags into your scripts by using Audio Tags. Eleven v4 and Eleven v3 created the Audio Tag system to give users complete control over their AI-generated speech outputs without the hassle of SSML.
Why Eleven v4 uses audio tags instead of SSML
Eleven v4 runs on Audio Tags as a different mechanism for controlling delivery and refining pronunciation. It reads inline bracketed instructions that come directly from scripted text, letting you write in natural language to create a certain output. These audio tags cover a wide range of directions, including:
- Emotions or feelings, such as [sad] or [excited]
- Delivery and pacing, like [whispers] or [rushed]
- Human reactions, such as [sighs] or [laughs]
- Accents and character voices, like [French accent]
- Sound effects, including [applause] or [door shutting]
The reason for this design is based on how this model reads context in a conversation. Eleven v4 architecture reads context more deeply than earlier models, allowing it to follow emotional cues, tonal shifts, speaker transitions, and contextual clues without separate parameters or settings.
SSML gives specific instructions at a fixed point in the text, making delivery feel rigid and stunted. SSML is one of the main reasons that AI text sounds robotic, despite high-quality underlying models.
A cue such as [whisper] gives Eleven v4 an interpretive brief that is applied across the surrounding line, shaped by the prosody of everything that surrounds it.
Most SSML elements have a direct v4 equivalent:
SSML tag
What it does
Eleven v4 equivalents
<break time="1s">
Inserts a pause
[pause], an ellipsis, or a line break
<prosody rate="slow">
Slows down speech
[drawn out] or [slowly]
<prosody rate="fast">
Speeds speech up
[rushed]
<emphasis>
Stresses a particular word
[shouts] or capitalizing a word
<prosody pitch="high">
Shifts pitch higher
Emotional tags such as [excited]
<prosody pitch="low">
Shifts pitch lower
Emotional tags such as [sorrowful]
Pronunciation follows the same replacement pattern. IPA is included as native support for Eleven v4, with transcription across 90+ languages. This lets teams control pronunciation without the XML tags required by adding transcription in forward slashes directly in the text.
Get started with natural-sounding speech on ElevenCreative
Audio Tags give scripts the pauses, emotion, pacing, and vocal style a voice actor would read directly into the text. Eleven v4 brings that expressiveness into a full production workflow, pairing ElevenLabs' voice models with image and video models so a script becomes a finished piece of audio or video in one workspace.
See how Audio Tags translate into finished audio with Eleven v4 or create a free account to experiment with SSML and audio tags on your own scripts today.









