SpaceXAI has released Grok Voice Transcribe 2.0, its newest speech-to-text (STT) model. The development team claims it to be twice as accurate as Grok Voice Transcribe 1.0 at the same price. The model targets hard audio: noisy phone lines, competing voices, local accents, and spoken credentials. It runs in batch and real-time streaming modes through the Speech to Text API.
Is it deployable? Yes, as a hosted API. It is live today under the model ID grok-voice-transcribe-2.0. SpaceXAI has not announced open weights, so self-hosting is not an option.
What is Grok Voice Transcribe 2.0?
Grok Voice Transcribe 2.0 is built on the audio foundation model behind Grok Voice. SpaceXAI team states that Grok Voice already handles tens of thousands of customer-support calls a day. It also transcribes millions of hours of video narration and runs the Grok assistant in Tesla vehicles.
The training data is live, noisy, multilingual audio recorded across diverse environments. SpaceXAI then refined the model with post-training.
Benchmarks: What SpaceXAI Reports
SpaceXAI reports a first-place accuracy rank among 32 streaming models on the public Artificial Analysis leaderboard. That benchmark, AA-WER Streaming, uses about 8 hours of audio. It weights AA-AgentTalk at 50%, VoxPopuli at 25%, and Earnings22 at 25%. See the methodology for details.
SpaceXAI also measures word error rate (WER) on 4 internal sets drawn from production traffic:
- Telephony (8 kHz): English customer support calls
- Conversational: English conversations with Grok
- Credentials: phone numbers, emails, and addresses in English
- Short phrases: voice-assistant utterances in 19 languages
Version 2.0 improves on 1.0 across all 4 sets. On telephony, SpaceXAI says it leads every model the company tested. These internal results are vendor-reported and not independently reproduced.
Multilingual Transcription and Language Switching
The model transcribes dozens of languages and detects the language automatically. It also follows mid-recording language switches in a single pass. SpaceXAI team calls multilingual accuracy the largest improvement over 1.0.
Short phrases, such as in-car commands, give a model little context to identify the language. On that set, WER drops from 20.6% to 6.8%. That works out to roughly 67% fewer word errors.
The docs list 25 languages for written-form formatting of numbers, currencies, and units.
<section class="slide" data-s="1">
<h3>Smart Turn: knowing when a speaker is done</h3>
<p class="lede">A caller pauses while reading a phone number. A silence timer ends the turn too early. Smart Turn scores each pause instead.</p>
<div class="row">
<div class="seg" id="stMode" role="group" aria-label="Turn detection mode">
<button data-m="off" aria-pressed="true">Silence timer only</button>
<button data-m="on" aria-pressed="false">Smart Turn on</button>
</div>
<div class="seg" id="stThr" role="group" aria-label="Smart Turn threshold">
<button data-t="0.5" aria-pressed="false">0.5</button>
<button data-t="0.7" aria-pressed="true">0.7</button>
<button data-t="0.9" aria-pressed="false">0.9</button>
</div>
<button class="go" id="stPlay">Play the call</button>
</div>
<div class="trk">
<div class="track" id="track">
<div class="sp" style="flex:1.6">"My number is 415"</div>
<div class="pa" style="flex:.7">pause</div>
<div class="sp" style="flex:1.3">"555 0142"</div>
<div class="pa" style="flex:.9">silence</div>
<span class="cur" id="cur"></span>
</div>
<div id="marks"></div>
</div>
<div class="log" id="log"></div>
<p class="verdict" id="verdict"></p>
<p class="note">Illustrative timeline. Defaults and confidence values come from the docs: <code>endpointing=400</code> ms, about 0.005 on mid-sentence pauses, 0.983 in the sample event.</p>
</section>
<section class="slide" data-s="2">
<h3>The one hard number SpaceXAI published</h3>
<p class="lede">Short multilingual voice commands across 19 languages. Word error rate, lower is better.</p>
<div class="card">
<div class="bars">
<div class="br"><span>Transcribe 1.0</span><span class="t"><i data-w="100"></i></span><span class="v" data-v="20.6">0%</span></div>
<div class="br lead"><span>Transcribe 2.0</span><span class="t"><i data-w="33"></i></span><span class="v" data-v="6.8">0%</span></div>
</div>
<label for="wr" style="display:block;font-size:13px;color:#ddd;margin-top:18px">Words spoken: <strong id="wrN">1,000</strong></label>
<input type="range" id="wr" min="100" max="10000" step="100" value="1000">
<div class="duo">
<div class="stat"><small>Expected word errors, 1.0</small><strong id="e1">206</strong></div>
<div class="stat hot"><small>Expected word errors, 2.0</small><strong id="e2">68</strong></div>
</div>
</div>
<p class="lede" style="margin:16px 0 0">The 4 internal test sets. Tap one for detail.</p>
<div class="grid2" id="sets">
<button class="set" aria-pressed="false"><b>Telephony, 8 kHz</b><span>Customer support calls, English</span><u>2.0 leads every model SpaceXAI tested on this set.</u></button>
<button class="set" aria-pressed="false"><b>Conversational</b><span>Conversations with Grok, English</span><u>2.0 improves on 1.0. SpaceXAI does not state the figure in text.</u></button>
<button class="set" aria-pressed="false"><b>Credentials</b><span>Phone numbers, emails, addresses, English</span><u>2.0 improves on 1.0. These strings break most transcription systems.</u></button>
<button class="set" aria-pressed="false"><b>Short phrases</b><span>Voice-assistant utterances, 19 languages</span><u>WER falls from 20.6% to 6.8%, about 67% fewer errors (derived).</u></button>
</div>
<p class="note">Internal sets are vendor-reported. SpaceXAI also reports rank 1 for accuracy among 32 streaming models on the Artificial Analysis leaderboard.</p>
</section>
<section class="slide" data-s="3">
<h3>What it costs</h3>
<p class="lede">Pricing is unchanged from 1.0. Diarization, timestamps, and key terms are included.</p>
<div class="seg" id="cMode" role="group" aria-label="Transcription mode">
<button data-r="0.10" aria-pressed="true">Batch, $0.10 / hr</button>
<button data-r="0.20" aria-pressed="false">Streaming, $0.20 / hr</button>
</div>
<div class="card" style="margin-top:12px">
<label for="hrs" style="font-size:13px;color:#ddd">Audio per month: <strong id="hrsN">1,000</strong> hours</label>
<input type="range" id="hrs" min="0" max="9" step="1" value="6">
<div class="duo">
<div class="stat hot"><small>Monthly cost</small><strong id="cost">$100.00</strong></div>
<div class="stat"><small>Per 1,000 minutes (derived)</small><strong id="per">$1.67</strong></div>
</div>
</div>
<p class="note">Per-1,000-minute figures are derived from the hourly list price. Check the SpaceXAI pricing page before budgeting.</p>
</section>
<section class="slide" data-s="4">
<h3>Build the request</h3>
<p class="lede">Toggle options and copy the call. Requests that omit <code>model</code> still resolve to 1.0 today, so set it explicitly.</p>
<div class="row">
<div class="seg" id="rMode" role="group" aria-label="API mode">
<button data-m="rest" aria-pressed="true">Batch, REST</button>
<button data-m="ws" aria-pressed="false">Streaming, WebSocket</button>
</div>
</div>
<div class="row" style="margin-top:10px">
<label class="sw"><input type="checkbox" id="rFmt" checked><b></b>Text formatting</label>
<label class="sw"><input type="checkbox" id="rDia"><b></b>Diarization</label>
<label class="sw"><input type="checkbox" id="rMc"><b></b>Multichannel</label>
<label class="sw"><input type="checkbox" id="rKey" checked><b></b>Key term</label>
<label class="sw"><input type="checkbox" id="rFil"><b></b>Keep fillers</label>
<label class="sw" id="rStW"><input type="checkbox" id="rSt"><b></b>Smart Turn</label>
</div>
<pre id="code" tabindex="0"></pre>
<div class="row" style="margin-top:10px"><button class="go ghost" id="copy">Copy request</button><span class="state" id="rNote" style="margin:0"></span></div>
<p class="note">Limits from the docs: 500 MB max file, up to 8 channels, up to 100 key terms of 50 characters each, 12 audio formats.</p>
</section>
<div class="nav">
<button class="go ghost" id="prev">Back</button>
<span class="state" id="pos" style="margin:0">1 of 5</span>
<button class="go" id="next">Next</button>
</div>
<div class="deploy"><span class="dot"></span><span><strong>Deployable today:</strong> yes, as a hosted API (<code>grok-voice-transcribe-2.0</code>). No open weights announced, so no self-hosting.</span></div>
<div class="foot">
<span class="mtp">Built by Marktechpost</span>
<span>Sources: <a href="https://x.ai/news/grok-voice-transcribe-2" target="_blank" rel="noopener">SpaceXAI blog</a> and <a href="https://docs.x.ai/developers/model-capabilities/audio/speech-to-text" target="_blank" rel="noopener">API docs</a>, verified Sept 18, 2026</span>
</div>
</div>
<script>
(function(){
var $=function(s,r){return (r||document).querySelector(s)},$$=function(s,r){return [].slice.call((r||document).querySelectorAll(s))};
var root=$(‘#gvt2’),RM=window.matchMedia&&matchMedia(‘(prefers-reduced-motion:reduce)’).matches;
function postH(){try{parent.postMessage({mtpGvt2:root.offsetHeight+40},’*’)}catch(e){}}
if(window.ResizeObserver){new ResizeObserver(postH).observe(root)}
window.addEventListener(‘load’,postH);window.addEventListener(‘resize’,postH);
function fmtN(n){return n.toLocaleString(‘en-US’)}
function segInit(el,cb){$$(‘button’,el).forEach(function(b){b.addEventListener(‘click’,function(){$$(‘button’,el).forEach(function(x){x.setAttribute(‘aria-pressed’,x===b?’true’:’false’)});cb(b)})})}
/* ———- slides ———- */
var cur=0,N=5,entered={};
function go(i){cur=(i+N)%N;
$$(‘.slide’).forEach(function(s,k){s.classList.toggle(‘on’,k===cur)});
$$(‘.tab’).forEach(function(t,k){t.setAttribute(‘aria-selected’,k===cur?’true’:’false’)});
var at=$$(‘.tab’)[cur],tb=$(‘.tabs’);tb.scrollLeft=Math.max(0,at.offsetLeft-tb.offsetLeft-40);$(‘#prog’).style.width=((cur+1)/N*100)+’%’;$(‘#pos’).textContent=(cur+1)+’ of ‘+N;
$(‘#prev’).style.visibility=cur===0?’hidden’:’visible’;$(‘#next’).textContent=cur===N-1?’Start over’:’Next’;
if(cur===0){sizeWave();drawWave()} if(cur===2)enterAcc(); postH();}
$$(‘.tab’).forEach(function(t){t.addEventListener(‘click’,function(){go(+t.dataset.i)})});
$(‘#prev’).addEventListener(‘click’,function(){go(cur-1)});$(‘#next’).addEventListener(‘click’,function(){go(cur+1)});
/* ———- 1. transcript demo ———- */
var SC={
call:{cap:’Narrowband phone audio, 2 speakers, line noise’,noise:.34,segs:[
{sp:0,t:[‘Hi,’,{r:’um,’,fill:1},"I’m",’calling’,’about’,’my’,’order,’,{r:’uh,’,fill:1},’it’,"hasn’t",’arrived.’]},
{sp:1,t:[‘Sorry’,’about’,’that.’,’Can’,’I’,’get’,’the’,’order’,’number?’]},
{sp:0,t:[‘Yes,’,"it’s",{r:’seven four two nine one.’,f:’74291.’}]}]},
cred:{cap:’Digits and an email address read aloud’,noise:.1,segs:[
{sp:0,t:[‘My’,’number’,’is’,{r:’four one five, five five five, zero one four two,’,f:’415-555-0142,’},’and’,’my’,’email’,’is’,{r:’sam at example dot com.’,f:’sam@example.com.’}]},
{sp:0,t:[‘The’,’balance’,’is’,{r:’one hundred sixty seven thousand nine hundred eighty three dollars and fifteen cents.’,f:’$167,983.15.’}]}]},
multi:{cap:’English, then Spanish, then English. One pass, no language hint’,noise:.14,segs:[
{sp:0,t:[‘Navigate’,’to’,’the’,’office.’]},
{sp:0,t:[‘Pon’,’mu00fasica’,’tranquila,’,’por’,’favor.’]},
{sp:0,t:[‘And’,’set’,’the’,’budget’,’to’,{r:’fifty dollars.’,f:’$50.’}]}]}
};
var st={sc:’call’,n:0,playing:false,t:0},flat=[],total=0,raf=0;
function build(){flat=[];var t=.24;SC[st.sc].segs.forEach(function(s,si){s.t.forEach(function(k){var o=typeof k===’string’?{r:k}:k;var d=.14+.055*o.r.length;flat.push({si:si,sp:s.sp,r:o.r,f:o.f,fill:o.fill,a:t,b:t+d});t+=d+.07});t+=.55});total=t}
function seeded(i){var x=Math.sin(i*127.1+st.sc.length*311.7)*43758.5453;return x-Math.floor(x)}
var cv=$(‘#wave’),cx=cv.getContext(‘2d’),W=0,H=0;
function sizeWave(){var r=cv.getBoundingClientRect(),d=window.devicePixelRatio||1;if(!r.width)return;W=r.width;H=r.height;cv.width=W*d;cv.height=H*d;cx.setTransform(d,0,0,d,0,0)}
function amp(tb){for(var i=0;i<flat.length;i++){if(tb>=flat[i].a&&tb<=flat[i].b)return 1}return 0}
function drawWave(now){if(!W)return;cx.clearRect(0,0,W,H);var n=Math.floor(W/6),ph=st.t/total,nz=SC[st.sc].noise;
for(var i=0;i<n;i++){var tb=i/n*total,a=amp(tb),h=(a?(.35+.6*seeded(i)):0)+nz*(.25+.75*seeded(i+999));h=Math.min(h,1);
var live=st.playing&&Math.abs(i/n-ph)<.04;if(live&&!RM)h*=1+.35*Math.sin((now||0)/60+i);
var bh=Math.max(2,h*(H-34)),x=i*6+1,y=H/2+8-bh/2;
cx.fillStyle=(i/n<=ph&&st.t>0)?’#ff6a1f’:(a?’#565656′:’#2f2f2f’);cx.fillRect(x,y,3,bh)}
if(st.t>0&&st.t<total){cx.fillStyle=’#fff’;cx.fillRect(ph*W,22,1.5,H-26)}}
function esc(s){return s.replace(/&/g,’&’).replace(/</g,’<’)}
function render(){var o={fmt:$(‘#oFmt’).checked,fill:$(‘#oFill’).checked,spk:$(‘#oSpk’).checked,ts:$(‘#oTs’).checked};
if(!st.n){$(‘#out’).innerHTML='<p class="hint">Press Transcribe to stream the transcript.</p>’;$(‘#state’).innerHTML=”;postH();return}
var html=”,last=-1,open=false,shown=0,removed=0;
for(var i=0;i<st.n;i++){var k=flat[i];if(k.fill&&o.fill){removed++;continue}
if(k.si!==last){if(open)html+='</div></div>’;html+='<div class="ln">’+(o.spk?'<span class="spk s’+k.sp+’">Speaker ‘+k.sp+'</span>’:”)+'<div class="words">’;open=true;last=k.si}
var useF=o.fmt&&k.f,cls=’w’+(useF?’ fm’:”)+(k.fill?’ fi’:”)+((st.playing&&i===st.n-1)?’ im nw’:”);
html+='<span class="’+cls+’">’+esc(useF?k.f:k.r)+(o.ts?'<small>’+k.a.toFixed(2)+’s</small>’:”)+'</span>’;shown++}
if(open)html+='</div></div>’;$(‘#out’).innerHTML=html;
var s=st.playing?'<em>interim</em> results streaming, newest word can still change’:'<em>final</em> transcript, text locked’;
s+=’ u00b7 ‘+shown+’ words’+(removed?’ u00b7 ‘+removed+’ fillers removed’:”);$(‘#state’).innerHTML=s;postH()}
function tick(now){if(!st.playing)return;if(!st.t0)st.t0=now;st.t=(now-st.t0)/1000*1.35;
var n=0;for(var i=0;i<flat.length;i++){if(flat[i].a<=st.t)n++}
if(n!==st.n){st.n=n;render()} drawWave(now);
if(st.t>=total){st.playing=false;st.t=total;st.n=flat.length;render();drawWave();$(‘#play’).textContent=’Replay’;return}
raf=requestAnimationFrame(tick)}
function play(){cancelAnimationFrame(raf);st.n=0;st.t=0;st.t0=0;$(‘#out’).innerHTML=”;
if(RM){st.n=flat.length;st.t=total;st.playing=false;render();drawWave();$(‘#play’).textContent=’Replay’;return}
st.playing=true;$(‘#play’).textContent=’Transcribing’;raf=requestAnimationFrame(tick)}
function resetSc(){cancelAnimationFrame(raf);st.playing=false;st.n=0;st.t=0;build();$(‘#wcap’).textContent=SC[st.sc].cap;$(‘#play’).textContent=’Transcribe’;sizeWave();drawWave();render()}
segInit($(‘#scSeg’),function(b){st.sc=b.dataset.sc;resetSc()});
$(‘#play’).addEventListener(‘click’,play);
[‘oFmt’,’oFill’,’oSpk’,’oTs’].forEach(function(id){$(‘#’+id).addEventListener(‘change’,render)});
window.addEventListener(‘resize’,function(){sizeWave();drawWave()});
/* ———- 2. smart turn ———- */
var TT=4.5,sm={mode:’off’,thr:0.7,raf:0};
function stReset(){cancelAnimationFrame(sm.raf);$(‘#marks’).innerHTML=”;$(‘#log’).innerHTML=”;$(‘#verdict’).innerHTML=”;$(‘#cur’).style.opacity=0;$(‘#stPlay’).textContent=’Play the call’;
$$(‘#stThr button’).forEach(function(b){b.disabled=sm.mode===’off’;b.style.opacity=sm.mode===’off’?.35:1});postH()}
function mark(t,txt,c){var m=document.createElement(‘span’);m.className=’mk ‘+c+(t/TT>.8?’ end’:”);m.style.left=(t/TT*100)+’%’;m.textContent=txt;$(‘#marks’).appendChild(m)}
function logp(h){var p=document.createElement(‘p’);p.innerHTML=h;$(‘#log’).appendChild(p);postH()}
function stEvents(){var on=sm.mode===’on’;return [
{t:2.0,fn:function(){if(on){mark(2.0,’chunk final’,’mid’);logp(‘2.00s end_of_turn_confidence: <span>0.005</span> < ‘+sm.thr+’ → is_final: true, speech_final: false. Turn stays open.’)}
else{mark(2.0,’turn ended’,’bad’);logp(‘2.00s 400 ms of silence → <span>speech_final: true</span>. Agent hears only "My number is 415".’)}}},
{t:4.0,fn:function(){if(on){mark(4.0,’turn ended’,’ok’);logp(‘4.00s end_of_turn_confidence: <span>0.983</span> ≥ ‘+sm.thr+’ → <span>speech_final: true</span>.’)}
else{mark(4.0,’turn ended’,’mid’);logp(‘4.00s 400 ms of silence → speech_final: true. A second, orphaned turn: "555 0142".’)}}}]}
function stDone(){$(‘#verdict’).innerHTML=sm.mode===’on’?'<strong>1 turn.</strong> The full number arrives together: 415-555-0142.’:'<strong>2 turns.</strong> The number is split, and a voice agent would reply after "415".’;$(‘#stPlay’).textContent=’Replay’;postH()}
function stPlay(){stReset();var ev=stEvents(),c=$(‘#cur’);
if(RM){ev.forEach(function(e){e.fn()});stDone();return}
c.style.opacity=1;var t0=0;$(‘#stPlay’).textContent=’Playing’;
(function f(now){if(!t0)t0=now;var t=(now-t0)/1000;c.style.left=Math.min(t/TT*100,100)+’%’;
while(ev.length&&ev[0].t<=t){ev.shift().fn()}
if(t>=TT){stDone();return} sm.raf=requestAnimationFrame(f)})(performance.now())}
segInit($(‘#stMode’),function(b){sm.mode=b.dataset.m;stReset()});
segInit($(‘#stThr’),function(b){sm.thr=+b.dataset.t;stReset()});
$(‘#stPlay’).addEventListener(‘click’,stPlay);
/* ———- 3. accuracy ———- */
function enterAcc(){$$(‘.br’).forEach(function(r){var i=$(‘i’,r),v=$(‘.v’,r),tv=+v.dataset.v;i.style.width=’0′;
setTimeout(function(){i.style.width=i.dataset.w+’%’},40);
if(RM){v.textContent=tv+’%’;return}
var t0=0;(function f(now){if(!t0)t0=now;var p=Math.min((now-t0)/1100,1),e=1-Math.pow(1-p,3);v.textContent=(tv*e).toFixed(1)+’%’;if(p<1)requestAnimationFrame(f)})(performance.now())})}
function accUpd(){var n=+$(‘#wr’).value;$(‘#wrN’).textContent=fmtN(n);$(‘#e1’).textContent=fmtN(Math.round(n*.206));$(‘#e2’).textContent=fmtN(Math.round(n*.068))}
$(‘#wr’).addEventListener(‘input’,accUpd);
$$(‘#sets .set’).forEach(function(b){b.addEventListener(‘click’,function(){var on=b.getAttribute(‘aria-pressed’)===’true’;$$(‘#sets .set’).forEach(function(x){x.setAttribute(‘aria-pressed’,’false’)});b.setAttribute(‘aria-pressed’,on?’false’:’true’);postH()})});
/* ———- 4. cost ———- */
var rate=.10,shown=100;
var HRS=[10,25,50,100,250,500,1000,2500,5000,10000];function hrsVal(){return HRS[+$(‘#hrs’).value]}
function money(x){return ‘$’+x.toLocaleString(‘en-US’,{minimumFractionDigits:2,maximumFractionDigits:2})}
function costUpd(){var h=hrsVal(),target=h*rate;$(‘#hrsN’).textContent=fmtN(h);$(‘#per’).textContent=money(rate/60*1000);
if(RM){$(‘#cost’).textContent=money(target);shown=target;return}
var from=shown,t0=0;(function f(now){if(!t0)t0=now;var p=Math.min((now-t0)/350,1);shown=from+(target-from)*p;$(‘#cost’).textContent=money(shown);if(p<1)requestAnimationFrame(f)})(performance.now())}
$(‘#hrs’).addEventListener(‘input’,costUpd);
segInit($(‘#cMode’),function(b){rate=+b.dataset.r;costUpd()});
/* ———- 5. request builder ———- */
var rm=’rest’;
function codeUpd(){var o={fmt:$(‘#rFmt’).checked,dia:$(‘#rDia’).checked,mc:$(‘#rMc’).checked,key:$(‘#rKey’).checked,fil:$(‘#rFil’).checked,st:$(‘#rSt’).checked},h,txt,note=”;
$(‘#rStW’).style.display=rm===’ws’?’inline-flex’:’none’;
function hl(s){return ‘<span class="hl">’+s+'</span>’}
if(rm===’rest’){var L=[‘curl -X POST https://api.x.ai/v1/stt \’,’ -H "Authorization: Bearer $XAI_API_KEY" \’,’ -F model=’+hl(‘grok-voice-transcribe-2.0′)+’ \’];
if(o.fmt){L.push(‘ -F format=true \’);L.push(‘ -F language=en \’)}
if(o.dia)L.push(‘ -F diarize=true \’);if(o.mc)L.push(‘ -F multichannel=true \’);if(o.fil)L.push(‘ -F filler_words=true \’);
if(o.key)L.push(‘ -F "keyterm=Marktechpost" \’);L.push(‘ -F file=@audio.mp3’);h=L.join(‘n’);note=’The file field must come last in the multipart form.’;
if(o.fmt)note+=’ format=true requires language.’}
else{var q=[‘model=’+hl(‘grok-voice-transcribe-2.0′),’sample_rate=16000′,’encoding=pcm’,’interim_results=true’];
if(o.fmt)q.push(‘language=en’);if(o.dia)q.push(‘diarize=true’);if(o.mc){q.push(‘multichannel=true’);q.push(‘channels=2’)}
if(o.fil)q.push(‘filler_words=true’);if(o.key)q.push(‘keyterm=Marktechpost’);if(o.st){q.push(‘smart_turn=0.7’);q.push(‘smart_turn_timeout=3000’)}
h=’wss://api.x.ai/v1/stt?’+q.join(‘n &’);note=’Wait for transcript.created before sending audio. Join the lines into one URL.’;
if(o.fmt)note+=’ In streaming, language alone enables formatting.’}
$(‘#code’).innerHTML=h;$(‘#rNote’).textContent=note;postH()}
segInit($(‘#rMode’),function(b){rm=b.dataset.m;codeUpd()});
[‘rFmt’,’rDia’,’rMc’,’rKey’,’rFil’,’rSt’].forEach(function(id){$(‘#’+id).addEventListener(‘change’,codeUpd)});
$(‘#copy’).addEventListener(‘click’,function(){var t=$(‘#code’).textContent;if(rm===’ws’)t=t.replace(/ns*/g,”);
function ok(){$(‘#copy’).textContent=’Copied’;setTimeout(function(){$(‘#copy’).textContent=’Copy request’},1400)}
if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(t).then(ok,function(){sel()})}else sel();
function sel(){var r=document.createRange();r.selectNodeContents($(‘#code’));var s=getSelection();s.removeAllRanges();s.addRange(r);try{document.execCommand(‘copy’);ok()}catch(e){}}});
/* init */
build();resetSc();stReset();accUpd();costUpd();codeUpd();go(0);
})();
</script>
</body>
</html>
“>
Key Features for Developers
Every feature below ships in the same API:
- Batch and streaming: transcribe files and URLs, or stream audio over WebSocket at
wss://api.x.ai/v1/stt - Word-level timestamps: start and end times plus confidence scores for each word
- Speaker diarization: speaker labels at no additional cost
- Multichannel transcription: up to 8 channels transcribed independently
- Key term biasing: up to 100 domain terms per request, each up to 50 characters
- Text formatting: numbers, dates, currencies, phone numbers, and emails returned in written form
- Filler word removal: “um” and “uh” are removed by default
- Smart turn detection: an ML model predicts end of turn for voice agents
The batch endpoint accepts files up to 500 MB across 12 audio formats. Streaming also accepts Opus at roughly 4 KB/s, versus 48 KB/s for raw PCM at 24 kHz.
Pricing
Pricing is identical to version 1.0. Batch transcription costs $0.10 per hour of audio. Streaming costs $0.20 per hour. Diarization, timestamps, and key terms are included. That equals about $1.67 and $3.33 per 1,000 minutes.
How to Call It
curl -X POST https://api.x.ai/v1/stt
-H "Authorization: Bearer $XAI_API_KEY"
-F model=grok-voice-transcribe-2.0
-F format=true
-F language=en
-F file=@audio.mp3
Atlassian Loom Adopts Grok Voice Transcribe 2.0
Atlassian Loom now uses Grok Voice Transcribe 2.0 to transcribe every video. Atlassian found it more accurate than its existing solution.
The workflow SpaceXAI describes is record, transcribe, then code. A user records an action plan in Loom. The transcript is piped into Cursor, which makes the code updates. Sanchan Saxena, SVP of Teamwork Collection at Atlassian, described it as ‘closing the loop from context to code.’
Key Takeaways
- Grok Voice Transcribe 2.0 claims 2x the accuracy of 1.0 at unchanged pricing.
- Batch costs $0.10 per audio hour and streaming costs $0.20.
- SpaceXAI reports rank 1 among 32 streaming models on Artificial Analysis.
- Short-phrase WER across 19 languages fell from 20.6% to 6.8%.
- It is API-only, so set
model=grok-voice-transcribe-2.0explicitly for now.
Check out the technical details and the API docs. All credit goes to the researcher of this project. Also, feel free to follow us on Twitter and don’t forget to join our 150k+ML SubReddit and Subscribe to our Newsletter. Wait! are you on telegram? now you can join us on telegram as well.
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 SpaceXAI Releases Grok Voice Transcribe 2.0: A Speech-to-Text API Claiming 2x Accuracy Over 1.0 at $0.10 per Hour appeared first on MarkTechPost.