AssemblyAI has released AssemblyAI-TTS-1, its first text-to-speech model, now generally available. The AssemblyAI-TTS-1 text-to-speech API targets voice agents running on live phone calls. In that setting, latency and pronunciation decide whether a caller stays on the line. Pricing is $15 per 1M characters, with no annual contract and no concurrency tier to buy. For developers already using AssemblyAI speech-to-text, it closes the voice loop with one vendor.
AssemblyAI-TTS-1 is a streaming text-to-speech model from AssemblyAI that turns agent replies into speech for live calls. It was trained on millions of hours of audio, including real conversational data. Most TTS models represent audio as discrete tokens. AssemblyAI says TTS-1 operates on continuous audio representations instead. The AssemblyAI claims this improves realism and cuts time to first spoken audio.
The launch includes a library of 4,000+ voices and instant voice cloning. A clone needs a short recording and a confirmation of the speaker’s permission. The clone in the launch post used 24 seconds of audio. Six languages are supported at launch: English, Spanish, French, German, Italian and Portuguese.
There are 3 interfaces: an HTTP API, a WebSocket API and an OpenAI-compatible route. The WebSocket session keeps one connection per conversation and accepts a cancel message for barge-in. Output is mono PCM, mu-law or A-law, at 8 kHz to 48 kHz. 24 kHz PCM is the native format; telephony stacks can request 8 kHz mu-law directly. Word timestamps are included. AssemblyAI also published LiveKit and Pipecat reference agents.
AssemblyAI tested TTS-1 against 5 models on 4 English sets, using 50 matched cloned voices. All figures below are self-reported, from an eval dated October 28, 2026.
Independent results are more mixed. On Cekura’s benchmark of 27 models, TTS-1 scored 81.5% reading accuracy and 4.50 naturalness. Its median streaming latency, timed from the last word sent, was 159 ms. Inworld TTS-2 Flash posted 45 ms and 93.2% accuracy there, at the same $15 price. AssemblyAI also cites a 1.7% word error rate on Coval’s leaderboard. It reports a top-10 debut in Artificial Analysis’ controlled-voice arena.
<iframe id="mtp-aai-tts1-frame" title="AssemblyAI-TTS-1 interactive explainer" loading="lazy" style="width:100%;height:600px;border:0;display:block;background:transparent;" scrolling="no" srcdoc="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>AssemblyAI-TTS-1 Explainer</title><style>html,body{margin:0;padding:0;background:transparent}</style></head><body><style>
#mtp-aai-tts1{–cob:#3923c7;–cob3:#887bdd;–cob2:#b0a7e9;–ink:#1d1b16;–ink2:#2a2721;–line:#4a4945;–cream:#fdfcf8;–muted:#a5a4a2;–blush:#e39389;–mtp:#76B900;
max-width:880px!important;margin:0 auto!important;background:var(–ink)!important;color:var(–cream)!important;border:1px solid #3a3730!important;border-radius:16px!important;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif!important;overflow:hidden;box-sizing:border-box;line-height:1.5}
#mtp-aai-tts1 *{box-sizing:border-box}
#mtp-aai-tts1 hr,#mtp-aai-tts1 p:empty,#mtp-aai-tts1 del,#mtp-aai-tts1 s{display:none!important}
#mtp-aai-tts1 .hd{padding:22px 26px 14px;background:radial-gradient(ellipse at 90% -20%,rgba(57,35,199,.55),transparent 60%)!important}
#mtp-aai-tts1 .eyebrow{font:600 11px/1 ui-monospace,Menlo,monospace;letter-spacing:.14em;text-transform:uppercase;color:var(–cob2)!important}
#mtp-aai-tts1 h3{margin:8px 0 4px!important;font-size:24px!important;font-weight:700!important;color:var(–cream)!important;border:0!important;padding:0!important}
#mtp-aai-tts1 .sub{color:var(–muted)!important;font-size:14px;margin:0!important}
#mtp-aai-tts1 .tabs{display:flex;gap:6px;padding:0 26px;border-bottom:1px solid #3a3730!important;overflow-x:auto}
#mtp-aai-tts1 .tab{background:transparent!important;border:0!important;border-bottom:2px solid transparent!important;color:var(–muted)!important;font:600 13px Inter,system-ui,sans-serif;padding:12px 10px;cursor:pointer;white-space:nowrap;transition:color .2s}
#mtp-aai-tts1 .tab.on{color:var(–cream)!important;border-bottom-color:var(–cob3)!important}
#mtp-aai-tts1 .pane{display:none;padding:22px 26px 10px;animation:mtpfade .35s ease}
#mtp-aai-tts1 .pane.on{display:block}
@keyframes mtpfade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
#mtp-aai-tts1 .flow{display:flex;align-items:stretch;gap:8px;margin:4px 0 14px}
#mtp-aai-tts1 .node{flex:1;background:var(–ink2)!important;border:1px solid #3a3730!important;border-radius:12px;padding:12px 10px;text-align:center;font-size:12.5px;color:var(–muted)!important;transition:all .35s;position:relative}
#mtp-aai-tts1 .node b{display:block;color:var(–cream)!important;font-size:13.5px;margin-bottom:3px}
#mtp-aai-tts1 .node.act{border-color:var(–cob3)!important;background:rgba(57,35,199,.28)!important;color:var(–cob2)!important;transform:translateY(-3px);box-shadow:0 8px 24px rgba(57,35,199,.35)}
#mtp-aai-tts1 .arrow{align-self:center;color:#4a4945!important;font-size:18px}
#mtp-aai-tts1 .wave{display:flex;align-items:center;gap:3px;height:34px;justify-content:center;margin-top:6px}
#mtp-aai-tts1 .wave i{display:block;width:4px;border-radius:2px;background:var(–cob3)!important;height:6px;opacity:.35}
#mtp-aai-tts1 .playing .wave i{animation:mtpwave 1s ease-in-out infinite;opacity:1}
@keyframes mtpwave{0%,100%{height:6px}50%{height:30px}}
#mtp-aai-tts1 .detail{background:#24211b!important;border-left:3px solid var(–cob3)!important;border-radius:8px;padding:12px 14px;font-size:14px;min-height:66px;color:var(–cream)!important}
#mtp-aai-tts1 .ctrl{display:flex;gap:8px;margin:12px 0 4px;flex-wrap:wrap}
#mtp-aai-tts1 .btn{background:var(–cob)!important;color:#fff!important;border:0!important;border-radius:999px;padding:8px 16px;font:600 13px Inter,system-ui,sans-serif;cursor:pointer;transition:background .2s}
#mtp-aai-tts1 .btn:hover{background:#614fd2!important}
#mtp-aai-tts1 .btn.ghost{background:transparent!important;border:1px solid #4a4945!important;color:var(–cream)!important}
#mtp-aai-tts1 .pills{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
#mtp-aai-tts1 .pill{background:transparent!important;border:1px solid #4a4945!important;color:var(–muted)!important;border-radius:999px;padding:6px 12px;font:600 12px Inter,system-ui,sans-serif;cursor:pointer}
#mtp-aai-tts1 .pill.on{background:var(–cob)!important;border-color:var(–cob)!important;color:#fff!important}
#mtp-aai-tts1 .bars{display:flex;flex-direction:column;gap:9px}
#mtp-aai-tts1 .row{display:grid;grid-template-columns:150px 1fr 70px;gap:10px;align-items:center;font-size:13px}
#mtp-aai-tts1 .row .nm{color:var(–cream)!important}
#mtp-aai-tts1 .track{display:block;height:14px;background:#2a2721!important;border-radius:7px;overflow:hidden}
#mtp-aai-tts1 .fill{display:block;height:100%;width:0;border-radius:7px;background:#5a574f!important;transition:width .9s cubic-bezier(.2,.8,.2,1)}
#mtp-aai-tts1 .row.me .fill{background:linear-gradient(90deg,#3923c7,#887bdd)!important}
#mtp-aai-tts1 .row.me .nm{color:var(–cob2)!important;font-weight:700}
#mtp-aai-tts1 .val{text-align:right;font-variant-numeric:tabular-nums;color:var(–cream)!important}
#mtp-aai-tts1 .note{font-size:12px;color:var(–muted)!important;margin:12px 0 0!important}
#mtp-aai-tts1 .calc label{font-size:13px;color:var(–muted)!important}
#mtp-aai-tts1 input[type=range]{width:100%;accent-color:#887bdd;margin:8px 0 4px}
#mtp-aai-tts1 .big{font-size:26px;font-weight:700;color:var(–cream)!important}
#mtp-aai-tts1 .grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px;align-items:start}
#mtp-aai-tts1 .card{background:var(–ink2)!important;border:1px solid #3a3730!important;border-radius:12px;padding:12px 14px;cursor:pointer;transition:border-color .2s}
#mtp-aai-tts1 .card:hover{border-color:var(–cob3)!important}
#mtp-aai-tts1 .card h4{margin:0!important;font-size:14px!important;color:var(–cream)!important;display:flex;justify-content:space-between}
#mtp-aai-tts1 .card p{margin:8px 0 0!important;font-size:13px;color:var(–muted)!important;display:none}
#mtp-aai-tts1 .card.open p{display:block;animation:mtpfade .3s ease}
#mtp-aai-tts1 .card .tag{font:600 10px ui-monospace,monospace;color:var(–blush)!important;letter-spacing:.08em}
#mtp-aai-tts1 .cost{display:grid;grid-template-columns:1fr auto;gap:6px 12px;font-size:14px;margin-top:10px}
#mtp-aai-tts1 .cost .me{color:var(–cob2)!important;font-weight:700}
#mtp-aai-tts1 .ft{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:14px 26px 18px;font-size:11.5px;color:var(–muted)!important;border-top:1px solid #3a3730!important;margin-top:14px}
#mtp-aai-tts1 .ft .mtp{color:var(–mtp)!important;font-weight:700}
#mtp-aai-tts1 a{color:var(–cob2)!important}
@media (max-width:640px){
#mtp-aai-tts1 .hd,#mtp-aai-tts1 .pane{padding-left:16px;padding-right:16px}
#mtp-aai-tts1 .tabs{padding:0 12px}
#mtp-aai-tts1 .flow{flex-direction:column}
#mtp-aai-tts1 .arrow{transform:rotate(90deg)}
#mtp-aai-tts1 .row{grid-template-columns:110px 1fr 58px;font-size:12px}
#mtp-aai-tts1 .grid{grid-template-columns:1fr}
#mtp-aai-tts1 h3{font-size:20px!important}
}
</style>
<div id="mtp-aai-tts1">
<div class="hd">
<div class="eyebrow">AssemblyAI · Text-to-Speech · Oct 2026</div>
<h3>AssemblyAI-TTS-1, explained</h3>
<p class="sub">A streaming voice for phone agents: $15 per 1M characters, 4,000+ voices, 6 languages.</p>
</div>
<div class="tabs" role="tablist">
<button class="tab on" data-t="flow">How it works</button>
<button class="tab" data-t="bench">Benchmarks</button>
<button class="tab" data-t="cost">Cost calculator</button>
<button class="tab" data-t="limits">Limits</button>
</div>
<div class="pane on" data-p="flow">
<div class="flow" id="aai-flow">
<div class="node" data-i="0"><b>Agent LLM</b>writes the reply</div><div class="arrow">›</div>
<div class="node" data-i="1"><b>WebSocket</b>1 session per call</div><div class="arrow">›</div>
<div class="node" data-i="2"><b>TTS-1</b>continuous audio</div><div class="arrow">›</div>
<div class="node" data-i="3"><b>Audio out</b>8 to 48 kHz<div class="wave"><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div><div class="arrow">›</div>
<div class="node" data-i="4"><b>Barge-in</b>cancel message</div>
</div>
<div class="detail" id="aai-detail">Press Play or Next to step through a live call turn.</div>
<div class="ctrl">
<button class="btn" id="aai-play"> Play</button>
<button class="btn ghost" id="aai-prev">‹ Back</button>
<button class="btn ghost" id="aai-next">Next ›</button>
</div>
</div>
<div class="pane" data-p="bench">
<div class="pills" id="aai-pills">
<button class="pill on" data-m="ent">Entity accuracy</button>
<button class="pill" data-m="ttfb">Median TTFB (AssemblyAI test)</button>
<button class="pill" data-m="cstream">Streaming latency (Cekura)</button>
<button class="pill" data-m="cacc">Reading accuracy (Cekura)</button>
</div>
<div class="bars" id="aai-bars"></div>
<p class="note" id="aai-bnote"></p>
</div>
<div class="pane" data-p="cost">
<div class="calc">
<label for="aai-min">Spoken minutes per month: <b id="aai-minv" style="color:#fdfcf8">10,000</b></label>
<input type="range" id="aai-min" min="1000" max="200000" step="1000" value="10000">
<div class="cost" id="aai-cost"></div>
<p class="note">Assumes 600 characters per minute of phone speech, the figure AssemblyAI cites as typical. List prices per 1M characters: AssemblyAI-TTS-1 $15, Inworld TTS-2 Flash $15 on demand, ElevenLabs Flash v2.5 $40, ElevenLabs v4 $80. Concurrency limits are not priced in.</p>
</div>
</div>
<div class="pane" data-p="limits">
<div class="grid" id="aai-cards">
<div class="card"><h4>No SSML or speed control <span class="tag">LAUNCH GAP</span></h4><p>The WebSocket API has no speed, pitch, emotion or style parameter, and neither API accepts SSML. Punctuation and written fillers like "um" still shape delivery.</p></div>
<div class="card"><h4>No pronunciation dictionaries <span class="tag">COMING SOON</span></h4><p>Custom pronunciation dictionaries and emotion tags are announced but not shipped. Cartesia Sonic 3.6 already offers custom pronunciations.</p></div>
<div class="card"><h4>6 languages <span class="tag">COVERAGE</span></h4><p>English, Spanish, French, German, Italian and Portuguese. ElevenLabs Flash v2.5 lists 32 and Cartesia Sonic 3.6 lists 44.</p></div>
<div class="card"><h4>Latency depends on method <span class="tag">CHECK IT</span></h4><p>About 90 ms advertised, 47 ms median in AssemblyAI’s own test, 159 ms median streaming latency on Cekura (timed from the last word sent).</p></div>
<div class="card"><h4>Instant cloning only <span class="tag">LAUNCH GAP</span></h4><p>Pro (fine-tuned) voice cloning is not available yet. Instant clones need a short clip and speaker permission.</p></div>
<div class="card"><h4>Cloud only <span class="tag">DEPLOYMENT</span></h4><p>US (us-east-1) and EU (eu-north-1) hosts at the same price. No on-prem option is announced.</p></div>
</div>
<p class="note">Tap a card to expand it.</p>
</div>
<div class="ft"><span>Sources: AssemblyAI launch post, docs and pricing; Cekura TTS benchmark; vendor pricing pages. Checked Oct 29, 2026.</span><span class="mtp">Built by Marktechpost</span></div>
</div>
<script>
(function(){
var R=document.getElementById(‘mtp-aai-tts1′);if(!R)return;
function resize(){try{parent.postMessage({mtpEmbed:’aai-tts1′,h:R.offsetHeight+40},’*’)}catch(e){}}
R.querySelectorAll(‘.tab’).forEach(function(t){t.addEventListener(‘click’,function(){
R.querySelectorAll(‘.tab’).forEach(function(x){x.classList.remove(‘on’)});t.classList.add(‘on’);
R.querySelectorAll(‘.pane’).forEach(function(p){p.classList.toggle(‘on’,p.getAttribute(‘data-p’)===t.getAttribute(‘data-t’))});
if(t.getAttribute(‘data-t’)===’bench’)draw(cur);setTimeout(resize,60);});});
var steps=[‘Your agent LLM writes a reply. Text can be sent word by word as it is generated.’,
‘One WebSocket session per conversation. Voice, language, sample rate and encoding are fixed at connect time.’,
‘TTS-1 models speech on continuous audio representations, not discrete tokens. AssemblyAI says this improves realism and speed.’,
‘Audio streams back as raw mono PCM, mu-law or A-law. 24 kHz PCM is native; 8 kHz mu-law suits phone lines.’,
‘If the caller interrupts, a cancel message stops speech. Word timestamps show what was actually said.’];
var nodes=R.querySelectorAll(‘#aai-flow .node’),det=R.querySelector(‘#aai-detail’),si=-1,timer=null;
function show(i){si=(i+nodes.length)%nodes.length;nodes.forEach(function(n,k){n.classList.toggle(‘act’,k===si);n.classList.toggle(‘playing’,k===3&&si>=3)});det.textContent=(si+1)+’/5 · ‘+steps[si];resize();}
R.querySelector(‘#aai-next’).onclick=function(){stop();show(si+1)};
R.querySelector(‘#aai-prev’).onclick=function(){stop();show(si<=0?4:si-1)};
var pb=R.querySelector(‘#aai-play’);
function stop(){if(timer){clearInterval(timer);timer=null;pb.textContent=”
Play”}}
pb.onclick=function(){if(timer){stop();return}pb.textContent=”❚❚ Pause”;show(si+1);timer=setInterval(function(){show(si+1)},2200)};
var D={
ent:{u:’%’,max:100,hi:true,note:’AssemblyAI pronunciation set: 580 hard targets (phone numbers, dates, URLs, codes). Self-reported, eval dated Oct 28, 2026.’,
r:[[‘AssemblyAI-TTS-1’,93.7,1],[‘ElevenLabs v4’,93.6],[‘Cartesia Sonic 3.6’,82.5],[‘ElevenLabs Flash v2.5′,68.0]]},
ttfb:{u:’ ms’,max:650,hi:false,note:’Median time to first byte over each API from one client, one request at a time. Self-reported by AssemblyAI. Lower is better.’,
r:[[‘AssemblyAI-TTS-1’,47,1],[‘ElevenLabs Flash v2.5’,119],[‘Cartesia Sonic 3.6’,143],[‘Inworld TTS-2 Flash’,244],[‘Inworld TTS-2’,280],[‘ElevenLabs v4′,612]]},
cstream:{u:’ ms’,max:600,hi:false,note:’Cekura: median from the last word sent to first audible sound, US East, 104 sentences x 3 reads. Independent. Lower is better.’,
r:[[‘Inworld TTS-2 Flash’,45],[‘AssemblyAI-TTS-1’,159,1],[‘ElevenLabs Flash v2.5’,177],[‘Cartesia Sonic 3.6’,270],[‘ElevenLabs v4′,561]]},
cacc:{u:’%’,max:100,hi:true,note:’Cekura: hard parts read correctly, scored by speech-to-text transcribers (an estimate, not human-rated). Independent.’,
r:[[‘Inworld TTS-2 Flash’,93.2],[‘AssemblyAI-TTS-1’,81.5,1],[‘ElevenLabs v4’,80.4],[‘Cartesia Sonic 3.6’,74.9],[‘ElevenLabs Flash v2.5’,64.4]]}};
var cur=”ent”,bars=R.querySelector(‘#aai-bars’),bn=R.querySelector(‘#aai-bnote’);
function draw(m){cur=m;var d=D[m];bars.innerHTML=”;d.r.forEach(function(x){
var row=document.createElement(‘div’);row.className=”row”+(x[2]?’ me’:”);
row.innerHTML='<span class="nm">’+x[0]+'</span><span class="track"><span class="fill"></span></span><span class="val">’+(d.u===’%’?x[1].toFixed(1):x[1])+d.u+'</span>’;
bars.appendChild(row);var f=row.querySelector(‘.fill’);setTimeout(function(){f.style.width=Math.max(2,x[1]/d.max*100)+’%’},40);});
bn.textContent=d.note;setTimeout(resize,60);}
R.querySelectorAll(‘#aai-pills .pill’).forEach(function(p){p.addEventListener(‘click’,function(){
R.querySelectorAll(‘#aai-pills .pill’).forEach(function(x){x.classList.remove(‘on’)});p.classList.add(‘on’);draw(p.getAttribute(‘data-m’))})});
var rng=R.querySelector(‘#aai-min’),mv=R.querySelector(‘#aai-minv’),co=R.querySelector(‘#aai-cost’);
var P=[[‘AssemblyAI-TTS-1’,15,1],[‘Inworld TTS-2 Flash (on demand)’,15],[‘ElevenLabs Flash v2.5’,40],[‘ElevenLabs v4’,80]];
function calc(){var m=+rng.value,ch=m*600;mv.textContent=m.toLocaleString(‘en-US’);var h=””;
P.forEach(function(p){var c=ch/1e6*p[1];h+='<span class="’+(p[2]?’me’:”)+’">’+p[0]+'</span><span class="’+(p[2]?’me’:”)+’">$’+c.toLocaleString(‘en-US’,{maximumFractionDigits:0})+’/mo</span>’});
co.innerHTML=h+'<span style="color:#a5a4a2">Characters per month</span><span style="color:#a5a4a2">’+(ch/1e6).toLocaleString(‘en-US’,{maximumFractionDigits:1})+’M</span>’;}
rng.addEventListener(‘input’,calc);calc();
R.querySelectorAll(‘#aai-cards .card’).forEach(function(c){c.addEventListener(‘click’,function(){c.classList.toggle(‘open’);setTimeout(resize,40)})});
draw(‘ent’);show(0);
window.addEventListener(‘load’,resize);window.addEventListener(‘resize’,resize);setTimeout(resize,300);
})();
</script>
</body></html>”>
(function(){var f=document.getElementById(“mtp-aai-tts1-frame”);window.addEventListener(“message”,function(e){if(e.data&&e.data.mtpEmbed===”aai-tts1″&&e.data.h){f.style.height=e.data.h+”px”;}});})();
Pricing is per input character, including spaces and punctuation, at $15 per 1M. Every voice, cloning, word timestamps and EU processing come at that same rate. There are no per-voice fees, concurrency fees or minimums. AssemblyAI calls it the lowest-priced frontier TTS model for voice agents. However, Inworld TTS-2 Flash also lists $15 per 1M on demand, falling to $7 on paid plans. The sharper difference is concurrency: Inworld’s on-demand tier allows 5 concurrent requests.
Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.? Connect with us
The post AssemblyAI Ships AssemblyAI-TTS-1: A $15 per 1M Character Text-to-Speech API for Voice Agents appeared first on MarkTechPost.