1<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="Voice input for any app. Your users speak, and the Dictation API returns text thatâs ready to send: filler gone, self-corrections resolved, names spelled right. Fast, accurate, and 19 languages."><link rel="canonical" href="https://www.assemblyai.com/blog/dictation-api"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://www.assemblyai.com/blog/dictation-api"><meta property="og:title" content="Introducing the Dictation API: the first API built for dictation | AssemblyAI"><meta property="og:description" content="Voice input for any app. Your users speak, and the Dictation API returns text thatâs ready to send: filler gone, self-corrections resolved, names spelled right. Fast, accurate, and 19 languages."><meta property="og:image" content="https://www.assemblyai.com/_aai/images/meta/dictation-api-og.jpg"><meta property="og:site_name" content="AssemblyAI"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@AssemblyAI"><meta name="twitter:title" content="Introducing the Dictation API: the first API built for dictation | AssemblyAI"><meta name="twitter:description" content="Voice input for any app. Your users speak, and the Dictation API returns text thatâs ready to send: filler gone, self-corrections resolved, names spelled right. Fast, accurate, and 19 languages."><meta name="twitter:image" content="https://www.assemblyai.com/_aai/images/meta/dictation-api-og.jpg"><link rel="icon" href="/favicon.ico"><link rel="preload" href="/_aai/fonts/rebrand/UN_11ST_Regular.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="/_aai/fonts/rebrand/OceanicText-Regular.otf" as="font" type="font/otf" crossorigin><link rel="preload" href="/_aai/fonts/rebrand/ModernGothicMono-Regular.woff2" as="font" type="font/woff2" crossorigin>
1<script type="module" src="/_astro/Layout.astro_astro_type_script_index_0_lang.Yr6qyuMv.js?dpl=dpl_H6Ce4Y27P6hRJuTycVqgQQmvJZ4q"></script>
1<style> 2 /* ââ Oceanic Text (display/headings) ââ */ 3 @font-face { font-family: 'Oceanic Text'; src: url('/_aai/fonts/rebrand/OceanicText-Regular.otf') format('opentype'); font-weight: 400; font-style: normal; font-display: swap; } 4 @font-face { font-family: 'Oceanic Text'; src: url('/_aai/fonts/rebrand/OceanicText-RegularItalic.otf') format('opentype'); font-weight: 400; font-style: italic; font-display: swap; } 5 @font-face { font-family: 'Oceanic Text'; src: url('/_aai/fonts/rebrand/OceanicText-Medium.otf') format('opentype'); font-weight: 500; font-style: normal; font-display: swap; } 6 @font-face { font-family: 'Oceanic Text'; src: url('/_aai/fonts/rebrand/OceanicText-Bold.otf') format('opentype'); font-weight: 700; font-style: normal; font-display: swap; } 7 /* ââ UN 11ST (body text) ââ */ 8 @font-face { font-family: 'UN 11ST'; src: url('/_aai/fonts/rebrand/UN_11ST_Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } 9 @font-face { font-family: 'UN 11ST'; src: url('/_aai/fonts/rebrand/UN_11ST_Italic.woff2') format('woff2'); font-weight: 400; font-style: italic; font-display: swap; } 10 @font-face { font-family: 'UN 11ST'; src: url('/_aai/fonts/rebrand/UN_11ST_Bold.woff2') format('woff2'); font-weight: 700; font-style: normal; font-display: swap; } 11 /* ââ Modern Gothic Mono (eyebrows, CTAs) ââ */ 12 @font-face { font-family: 'Modern Gothic Mono'; src: url('/_aai/fonts/rebrand/ModernGothicMono-Light.woff2') format('woff2'); font-weight: 300; font-style: normal; font-display: swap; } 13 @font-face { font-family: 'Modern Gothic Mono'; src: url('/_aai/fonts/rebrand/ModernGothicMono-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } 14 @font-face { font-family: 'Modern Gothic Mono'; src: url('/_aai/fonts/rebrand/ModernGothicMono-Medium.woff2') format('woff2'); font-weight: 500; font-style: normal; font-display: swap; } 15 @font-face { font-family: 'Modern Gothic Mono'; src: url('/_aai/fonts/rebrand/ModernGothicMono-Italic.woff2') format('woff2'); font-weight: 400; font-style: italic; font-display: swap; } 16 /* ââ Material Symbols (icons) ââ */ 17 @font-face { font-family: 'Material Symbols Outlined'; src: url('/_aai/fonts/MaterialSymbolsOutlined.woff2') format('woff2'); font-weight: 100 700; font-style: normal; font-display: block; } 18 .material-symbols-outlined { font-family: 'Material Symbols Outlined'; font-weight: normal; font-style: normal; line-height: 1; letter-spacing: normal; text-transform: none; display: inline-block; white-space: nowrap; word-wrap: normal; direction: ltr; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; font-feature-settings: 'liga'; } 19 </style><style> 20 html[data-tt-leaving='dissolve'] div:has(> nav[data-tertiary-nav]) ~ * { 21 animation: tt-dissolve-out 240ms ease-out both; 22 will-change: opacity; 23 } 24 html[data-tt-arriving='dissolve'] div:has(> nav[data-tertiary-nav]) ~ * { 25 animation: tt-dissolve-in 260ms ease-out both; 26 will-change: opacity; 27 } 28 29 @keyframes tt-dissolve-out { to { opacity: 0; } } 30 @keyframes tt-dissolve-in { from { opacity: 0; } } 31 32 /* Keep page transitions from introducing horizontal scroll. */ 33 html[data-tt-leaving] body, html[data-tt-arriving] body { overflow-x: clip; } 34 35 /* Hard-pin the navs (primary + tertiary + the tertiary's wrapper) so 36 they NEVER move during the page transition. The general selector 37 above already excludes them, but these explicit overrides are 38 belt-and-suspenders against any inherited animation, transform, or 39 opacity change leaking in from the page transition. The active-tab 40 indicator is intentionally NOT in this list â its transform is set 41 inline by JS for positioning and we don't want to override it. 42 43 NOTE: do NOT force `position: relative` on the tertiary's wrapper 44 div â that breaks its `position: sticky` and the nav falls into 45 its natural document position (off-screen if the user was 46 scrolled). The wrapper's own Tailwind `z-40` and the primary 47 wrapper's `z-50` already keep them above the animating content. */
48 html[data-tt-leaving] nav[aria-label='Primary'], 49 html[data-tt-arriving] nav[aria-label='Primary'], 50 html[data-tt-leaving] nav[data-tertiary-nav], 51 html[data-tt-arriving] nav[data-tertiary-nav], 52 html[data-tt-leaving] div:has(> nav[data-tertiary-nav]), 53 html[data-tt-arriving] div:has(> nav[data-tertiary-nav]) { 54 animation: none !important; 55 transform: none !important; 56 opacity: 1 !important; 57 } 58 59 @media (prefers-reduced-motion: reduce) { 60 html[data-tt-leaving] div:has(> nav[data-tertiary-nav]) ~ *, 61 html[data-tt-arriving] div:has(> nav[data-tertiary-nav]) ~ * { 62 animation: none !important; 63 } 64 } 65 </style>
65<script> 66 (() => { 67 try { 68 if (sessionStorage.getItem('tertiaryNavDissolve') !== 'true') return; 69 sessionStorage.removeItem('tertiaryNavDissolve'); 70 document.documentElement.dataset.ttArriving = 'dissolve'; 71 window.setTimeout(() => { 72 delete document.documentElement.dataset.ttArriving; 73 }, 260); 74 } catch {} 75 })(); 76 </script>
76<title>Introducing the Dictation API: the first API built for dictation | AssemblyAI</title>
76<script> 77 { 78 const script = document.createElement('script'); 79 script.src = 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js'; 80 const dataDomainScript = '0195b450-e76d-701b-bed7-e09dba0dc443'; 81 script.setAttribute('data-domain-script', window.origin !== 'https://www.assemblyai.com' ? dataDomainScript + '-test' : dataDomainScript); 82 document.head.appendChild(script); 83 } 84 var OptanonWrapper = (() => { 85 let count = 0; 86 return () => { 87 if (count === 0) { 88 oneTrustLoaded(); 89 } else { 90 window.dispatchEvent(new Event('oneTrustConsentChanged')); 91 } 92 count++; 93 }; 94 })(); 95 </script>
95<script> 96 !function(){var e="2hNPzeocLrXEJ6fuVktdhExfmUr",t="https://rs-dp.assemblyai.com"; 97 window.RudderSnippetVersion="3.0.60"; 98 window.rudderanalytics=window.rudderanalytics||[]; 99 if(Array.isArray(window.rudderanalytics)){ 100 window.rudderanalytics.snippetExecuted=true; 101 window.rudderAnalyticsBuildType="legacy"; 102 var n=["setDefaultInstanceKey","load","ready","page","track","identify","alias","group","reset","setAnonymousId","startSession","endSession","consent"]; 103 for(var a=0;a<n.length;a++){var r=n[a];window.rudderanalytics[r]=function(m){return function(){if(Array.isArray(window.rudderanalytics)){window.rudderanalytics.push([m].concat(Array.prototype.slice.call(arguments)))}else{var _m;(_m=window.rudderanalytics[m])===null||_m===void 0||_m.apply(window.rudderanalytics,arguments)}}}(r)} 104 try{new Function('class Test{field=()=>{};test({prop=[]}={}){return prop?(prop?.property??[...prop]):import("");}}');window.rudderAnalyticsBuildType="modern"}catch(ex){} 105 window.rudderAnalyticsAddScript=function(url,ek,ev){var s=document.createElement("script");s.src=url;s.setAttribute("data-loader","RS_JS_SDK");if(ek&&ev){s.setAttribute(ek,ev)}s.async=true;var h=document.head||document.getElementsByTagName("head")[0];var b=document.body||document.getElementsByTagName("body")[0];if(h){h.insertBefore(s,h.firstChild)}else{b.insertBefore(s,b.firstChild)}}; 106 window.rudderAnalyticsMount=function(){window.rudderAnalyticsAddScript("https://rs-cdn.assemblyai.com/v3/"+window.rudderAnalyticsBuildType+"/rsa.min.js","data-rsa-write-key",e)}; 107 if(typeof Promise==="undefined"||typeof globalThis==="undefined"){window.rudderAnalyticsAddScript("https://polyfill-fastly.io/v3/polyfill.min.js?version=3.111.0&features=Symbol%2CPromise&callback=rudderAnalyticsMount")}else{window.rudderAnalyticsMount()} 108 window.rudderanalytics.page(); 109 110 window.addEventListener('oneTrustConsentChanged', () => { 111 window.rudderanalytics.consent({ 112 trackConsent: true, 113 storage: { type: 'localStorage' } 114 }); 115 }); 116 }}(); 117 118 function oneTrustLoaded() { 119 window.rudderanalytics.load("2hNPzeocLrXEJ6fuVktdhExfmUr", "https://rs-dp.assemblyai.com", { 120 pluginsSDKBaseURL: "https://rs-cdn.assemblyai.com/v3/modern/plugins", 121 storage: { type: 'localStorage' }, 122 consentManagement: { 123 enabled: true, 124 provider: 'oneTrust' 125 } 126 }); 127 } 128 </script>
128<script>(function(){const isProd = true; 129const vercelEnv = "production"; 130const ddAppId = "c5d4a86a-4481-4e96-bdd5-1465382625c1"; 131const ddClientToken = "pubcd7185dcf216b34d8c6628110c039c75"; 132 133 if (ddAppId && ddClientToken) { 134 (function(h,o,u,n,d) { 135 h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}} 136 d=o.createElement(u);d.async=1;d.src=n 137 n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n) 138 })(window,document,'script','https://www.datadoghq-browser-agent.com/us1/v5/datadog-rum.js','DD_RUM') 139 window.DD_RUM.onReady(function() { 140 window.DD_RUM.init({ 141 clientToken: ddClientToken, 142 applicationId: ddAppId, 143 site: 'datadoghq.com', 144 service: 'website---vercel', 145 env: vercelEnv, 146 sessionSampleRate: isProd ? 100 : 0, 147 sessionReplaySampleRate: 20, 148 trackUserInteractions: true, 149 trackResources: true, 150 trackLongTasks: true, 151 trackBfcacheViews: true, 152 defaultPrivacyLevel: 'mask-user-input', 153 allowedTracingUrls: ['https://www.assemblyai.com'], 154 }); 155 }); 156 } 157 })();</script>
157<link rel="stylesheet" href="/_astro/global.DIJ23TAY.css"><style>.scrollbar-hide[data-astro-cid-zdfrvv5v]{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide[data-astro-cid-zdfrvv5v]::-webkit-scrollbar{display:none}[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true]{display:block;max-height:220px;opacity:1;overflow:hidden;transition:max-height .42s cubic-bezier(.32,.72,0,1),opacity .22s ease-out,border-color .42s ease-out}[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true][data-scroll-state=hidden]{border-bottom-color:transparent;border-top-color:transparent;max-height:0;opacity:0;pointer-events:none}[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true][data-tertiary-mode=light] [data-astro-cid-zdfrvv5v][data-tertiary-link]:not([aria-current=page]){color:var(--color-black-300)}[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true][data-tertiary-mode=dark] [data-astro-cid-zdfrvv5v][data-tertiary-link]:not([aria-current=page]){color:var(--color-white-200)}[data-astro-cid-zdfrvv5v][data-tertiary-mode=light] [data-astro-cid-zdfrvv5v][data-tertiary-link][aria-current=page]{color:var(--color-cobolt-500)}[data-astro-cid-zdfrvv5v][data-tertiary-mode=dark] [data-astro-cid-zdfrvv5v][data-tertiary-link][aria-current=page]{color:var(--color-cobolt-300)}[data-astro-cid-zdfrvv5v][data-tertiary-mode=dark] a[data-astro-cid-zdfrvv5v][href="/products"][data-tertiary-link][aria-current=page]{color:var(--color-cobolt-200)}[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true][data-tertiary-mode=light] [data-astro-cid-zdfrvv5v][data-tertiary-link]:not([aria-current=page]):hover,[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true][data-tertiary-mode=light] [data-astro-cid-zdfrvv5v][data-tertiary-link]:not([aria-current=page]):hover>span[data-astro-cid-zdfrvv5v]:first-child{color:var(--color-cobolt-500)}[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true][data-tertiary-mode=dark] [data-astro-cid-zdfrvv5v][data-tertiary-link]:not([aria-current=page]):hover,[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true][data-tertiary-mode=dark] [data-astro-cid-zdfrvv5v][data-tertiary-link]:not([aria-current=page]):hover>span[data-astro-cid-zdfrvv5v]:first-child{color:var(--color-cobolt-300)}nav[data-astro-cid-zdfrvv5v][data-tertiary-tabs=true]{--tt-mask-left: black;--tt-mask-right: black;-webkit-mask-image:linear-gradient(to right,var(--tt-mask-left) 0,black 64px,black calc(100% - 64px),var(--tt-mask-right) 100%);mask-image:linear-gradient(to right,var(--tt-mask-left) 0,black 64px,black calc(100% - 64px),var(--tt-mask-right) 100%)}nav[data-astro-cid-zdfrvv5v][data-tertiary-tabs=true][data-overflow-left=true]{--tt-mask-left: transparent}nav[data-astro-cid-zdfrvv5v][data-tertiary-tabs=true][data-overflow-right=true]{--tt-mask-right: transparent}@media(prefers-reduced-motion:reduce){[data-astro-cid-zdfrvv5v][data-tertiary-product-menu=true]{transition:none}}@media(max-width:1023px){[data-astro-cid-zdfrvv5v][data-tertiary-mode]{display:none}} 158</style><link rel="stylesheet" href="/_astro/dictation-api.DQVgvl-o.css"></head> <body> <section data-announcement-banner class="relative bg-cobolt-500 text-white-100 transition-colors"> <div class="mx-auto flex max-w-[1440px] flex-col items-start gap-1.5 px-4 py-1 pr-10 sm:h-[32px] sm:flex-row sm:items-center sm:justify-center sm:gap-3 sm:py-0 lg:px-[148px]"> <span class="inline-flex w-fit shrink-0 items-center border border-white-100/35 px-2 py-0.5 font-mono text-[10px] uppercase leading-none tracking-[1px] text-white-100"> 159New 160</span> <span class="font-body text-[14px] leading-[1.3] text-white-100 sm:text-center"> 161The Dictation API is here. 162</span> <span class="flex shrink-0 items-center gap-3 sm:ml-[30px]"> <span class="font-mono text-[11px] uppercase leading-none tracking-[1.1px] text-white-100"> 163Learn more: 164</span> <a href="https://www.assemblyai.com/blog/dictation-api" class="inline-flex shrink-0 items-center font-mono text-[11px] uppercase leading-none tracking-[1.1px] text-white-100 underline decoration-white-100/45 underline-offset-4 transition-colors hover:decoration-white-100"> 165Dictation API 166</a> </span> </div> <button type="button" class="absolute right-2 top-1/2 flex size-6 -translate-y-1/2 shrink-0 items-center justify-center text-white-100/80 transition-colors hover:text-white-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white-100" aria-label="Dismiss announcement" data-announcement-dismiss> <span aria-hidden="true" class="font-mono text-[16px] leading-none">x</span> </button> </section>
166<script>(function(){const storageKey = "aai-dictation-api-announcement-dismissed"; 167const latestAnnouncementAt = "2026-09-14T00:00:00.000Z"; 168 169 (() => { 170 const init = () => { 171 const banners = document.querySelectorAll('[data-announcement-banner]'); 172 if (!banners.length) return; 173 174 const latestAnnouncementTime = Date.parse(latestAnnouncementAt); 175 let isDismissed = false; 176 try { 177 const dismissedValue = window.localStorage.getItem(storageKey); 178 let dismissedAt = Number(dismissedValue); 179 180 if (dismissedValue === 'true') { 181 dismissedAt = Date.now(); 182 window.localStorage.setItem(storageKey, String(dismissedAt)); 183 } 184 185 isDismissed = 186 Number.isFinite(dismissedAt) && 187 Number.isFinite(latestAnnouncementTime) && 188 dismissedAt >= latestAnnouncementTime; 189 } catch {} 190 191 if (isDismissed) { 192 banners.forEach((banner) => banner.setAttribute('hidden', '')); 193 return; 194 } 195 196 banners.forEach((banner) => { 197 banner.removeAttribute('hidden'); 198 199 if (banner.dataset.announcementInitialized === 'true') return; 200 banner.dataset.announcementInitialized = 'true'; 201 202 const dismissButton = banner.querySelector('[data-announcement-dismiss]'); 203 dismissButton?.addEventListener('click', () => { 204 try { 205 window.localStorage.setItem(storageKey, String(Date.now())); 206 } catch {} 207 208 banners.forEach((activeBanner) => activeBanner.setAttribute('hidden', '')); 209 }); 210 }); 211 }; 212 213 if (window.__aaiAnnouncementBannerInit) { 214 window.__aaiAnnouncementBannerInit(); 215 return; 216 } 217 218 window.__aaiAnnouncementBannerInit = init; 219 init(); 220 document.addEventListener('astro:page-load', init); 221 })(); 222})();</script>
222<div class="bg-white-200 sticky top-0 z-50" id="primary-nav-wrapper"> <el-dialog> <dialog id="primary-nav-mobile" class="backdrop:bg-transparent lg:hidden"> <el-dialog-backdrop class="fixed inset-0 bg-black/25 transition-opacity duration-[700ms] ease-[cubic-bezier(0.22,1,0.36,1)] data-closed:opacity-0"></el-dialog-backdrop> <div tabindex="0" class="fixed inset-0 flex justify-end focus:outline-none"> <el-dialog-panel class="relative flex w-full max-w-xs transform flex-col overflow-hidden bg-white-200 shadow-xl transition duration-[700ms] ease-[cubic-bezier(0.22,1,0.36,1)] data-closed:translate-x-full data-closed:opacity-0"> <div class="flex justify-between items-center px-[30px] py-[24px] shrink-0"> <a href="/" class="flex items-center" style="width: 120px;" aria-label="AssemblyAI home"> <img src="/_aai/images/logos/assemblyai-logo-full-primary.svg" alt="AssemblyAI" width="120" height="21"> </a> <button type="button" command="close" commandfor="primary-nav-mobile" class="relative -m-2 inline-flex items-center justify-center rounded-md p-2 text-black-300"> <span class="sr-only">Close menu</span> <svg class="size-6" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"> <path d="M6 18 18 6M6 6l12 12" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> </div> <nav class="flex-1 overflow-y-auto flex flex-col px-[30px] mt-4" data-mobile-accordion-root> <div class="group border-b border-neutral-300" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-500 transition-colors flex items-center justify-between text-left w-full text-black-500" aria-expanded="false" data-mobile-accordion-toggle> <span>Products</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="/products" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">platform</p> <p class="p4 text-black-500">Platform overview</p> <p class="p5 text-black-200 opacity-80">Models, APIs, and infrastructure in one place. Build voice into any product, on any stack.</p> </a> <div class="flex flex-col gap-[20px]"> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">transcribe</p> <div class="flex flex-col gap-[14px]"> <a href="/products/speech-to-text" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Pre-recorded Speech-to-Text API </a><a href="/products/streaming-speech-to-text" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Realtime Speech-to-Text API </a><a href="/products/sync-speech-to-text" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Sync Speech-to-Text API </a> </div> </div><div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">understand</p> <div class="flex flex-col gap-[14px]"> <a href="/products/speech-understanding" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Speech Understanding API </a><a href="/products/guardrails" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Guardrails and Safety </a><a href="/products/llm-gateway" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> LLM Gateway </a> </div> </div><div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">interact</p> <div class="flex flex-col gap-[14px]"> <a href="/products/voice-agent-api" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Voice Agent API </a><a href="/products/dictation-api" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Dictation API </a> </div> </div> </div> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">inference</p> <div class="flex flex-col gap-[14px]"> <a href="/deployments/self-hosted" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Self Hosted </a><a href="/deployments/cloud" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Voice AI Cloud </a> </div> </div> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">use cases</p> <div class="flex flex-col gap-[14px]"> <a href="/solutions/voice-agents" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Voice Agents </a><a href="/use-cases/ai-notetakers" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> AI Notetakers </a><a href="/use-cases/call-analytics" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Call Analytics </a><a href="/use-cases/medical-transcription" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Medical Transcription </a><a href="/use-cases/dictation" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Dictation </a><a href="/use-cases/agent-assist" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Agent Assist </a><a href="/use-cases/ai-scribes" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> AI Scribes </a> </div> </div> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">languages</p> <div class="flex flex-col gap-[14px]"> <a href="/languages/english" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> English </a><a href="/languages/spanish" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Spanish </a><a href="/languages/portuguese" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Portuguese </a><a href="/languages/french" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> French </a><a href="/languages/german" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> German </a><a href="/languages/russian" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Russian </a><a href="/languages/hindi" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Hindi </a><a href="/languages/dutch" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Dutch </a><a href="/languages/japanese" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Japanese </a>
222<a href="/languages/italian" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Italian </a><a href="/languages" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> All 99 Languages </a> </div> </div> </div> </div> </div> </div><a href="/enterprise" class="p3 py-3 border-b border-neutral-300 hover:text-cobolt-500 transition-colors text-black-500"> Enterprise </a><div class="group border-b border-neutral-300" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-500 transition-colors flex items-center justify-between text-left w-full text-black-500" aria-expanded="false" data-mobile-accordion-toggle> <span>Customers</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="https://www.assemblyai.com/customers" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">customers</p> <p class="p4 text-black-500">All customer stories</p> <p class="p5 text-black-200 opacity-80">Top Voice AI companies are building with Assembly.</p> </a> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">customers</p> <div class="flex flex-col gap-[14px]"> <a href="https://www.assemblyai.com/customers" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> All Stories </a><a href="https://www.assemblyai.com/customers/zoom-customer-story" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Zoom </a><a href="https://www.assemblyai.com/customers/siro-customer-story" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Siro </a> </div> </div> </div> </div> </div> </div><div class="group border-b border-neutral-300" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-500 transition-colors flex items-center justify-between text-left w-full text-black-500" aria-expanded="false" data-mobile-accordion-toggle> <span>Developers</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="https://www.assemblyai.com/docs" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">developers</p> <p class="p4 text-black-500">Documentation</p> <p class="p5 text-black-200 opacity-80">Everything you need to integrate, build, and ship with AssemblyAI â from API reference to step-by-step guides.</p> </a> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[14px]"> <a href="https://www.assemblyai.com/docs" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Documentation </a><a href="https://www.assemblyai.com/docs/api-reference/overview" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> API Reference </a><a href="https://www.assemblyai.com/docs/cookbooks" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Cookbooks </a><a href="/contact/support" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Support </a><a href="/changelog" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Changelog </a><a href="https://status.assemblyai.com" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Status </a> </div> </div>
222 </div> </div> </div> </div><div class="group border-b border-neutral-300" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-500 transition-colors flex items-center justify-between text-left w-full text-black-500" aria-expanded="false" data-mobile-accordion-toggle> <span>Resources</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="https://www.assemblyai.com/blog/dictation-api" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">Latest Release</p> <p class="p4 text-black-500">Dictation API</p> <p class="p5 text-black-200 opacity-80">The first API built for dictation. Your users speak, and it returns text that is ready to send: filler gone, self-corrections resolved, names spelled right.</p> </a> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[14px]"> <a href="/blog" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Blog </a><a href="/partners" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Partners </a><a href="/research" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Research </a><a href="/benchmarks" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Benchmarks </a><a href="/security" class="p4 text-black-500 hover:text-cobolt-500 transition-colors"> Security </a> </div> </div> </div> </div> </div> </div><a href="https://www.assemblyai.com/playground" class="p3 py-3 border-b border-neutral-300 hover:text-cobolt-500 transition-colors text-black-500"> Playground </a><a href="/pricing" class="p3 py-3 border-b border-neutral-300 hover:text-cobolt-500 transition-colors text-black-500"> Pricing </a> <a href="/contact" class="p3 text-black-500 py-3 border-b border-neutral-300 hover:text-cobolt-500 transition-colors"> 223Contact us 224</a> </nav> <div class="px-[30px] pt-8 pb-[48px] shrink-0 flex flex-col gap-3"> <a href="https://www.assemblyai.com/dashboard/signup" class="cta-tertiary text-center" data-dashboard-auth-primary>Get started</a> <a href="https://www.assemblyai.com/dashboard/login" class="cta-quaternary text-center" data-dashboard-login-link data-dashboard-auth-secondary>Log in</a> </div> </el-dialog-panel> </div> </dialog> </el-dialog> <nav aria-label="Primary" class="max-w-[1440px] mx-auto flex items-center justify-between px-4 lg:px-[16px] xl:px-[30px] h-[64px] lg:h-[82px]"> <div class="flex items-center lg:gap-[28px] xl:gap-[65px]"> <div class="lg:hidden"> <a href="/" class="flex items-center" style="width: 120px;" aria-label="AssemblyAI home"> <img src="/_aai/images/logos/assemblyai-logo-full-primary.svg" alt="AssemblyAI" width="120" height="21"> </a> </div> <div class="hidden lg:block"> <a href="/" class="flex items-center" style="width: 161px;" aria-label="AssemblyAI home"> <img src="/_aai/images/logos/assemblyai-logo-full-primary.svg" alt="AssemblyAI" width="161" height="28"> </a> </div> <div class="hidden lg:flex items-center gap-[24px] xl:gap-[35px]"> <a href="/products" class="p5 hover:text-cobolt-500 transition-colors whitespace-nowrap text-black-500" data-subnav-trigger="products"> Products </a><a href="/enterprise" class="p5 hover:text-cobolt-500 transition-colors whitespace-nowrap text-black-500" data-subnav-none="true"> Enterprise </a><a href="/customers" class="p5 hover:text-cobolt-500 transition-colors whitespace-nowrap text-black-500" data-subnav-trigger="customers"> Customers </a><a href="https://www.assemblyai.com/docs" class="p5 hover:text-cobolt-500 transition-colors whitespace-nowrap text-black-500" data-subnav-trigger="developers"> Developers </a><a href="/blog" class="p5 hover:text-cobolt-500 transition-colors whitespace-nowrap text-black-500" data-subnav-trigger="resources">
224 Resources </a><a href="https://www.assemblyai.com/playground" class="p5 hover:text-cobolt-500 transition-colors whitespace-nowrap text-black-500" data-subnav-none="true"> Playground </a><a href="/pricing" class="p5 hover:text-cobolt-500 transition-colors whitespace-nowrap text-black-500" data-subnav-none="true"> Pricing </a> </div> </div> <div class="hidden lg:flex items-center gap-[16px]"> <a href="/contact" class="hidden xl:inline-block p5 text-black-500 hover:text-cobolt-500 transition-colors whitespace-nowrap" data-subnav-none> 225Contact us 226</a> <div class="flex items-center gap-[8px]"> <a href="https://www.assemblyai.com/dashboard/login" class="cta-quaternary hidden xl:inline-flex" data-dashboard-login-link data-dashboard-auth-secondary>Log in</a> <a href="https://www.assemblyai.com/dashboard/signup" class="cta-tertiary" data-dashboard-auth-primary>Get started</a> </div> </div> <div class="lg:hidden flex items-center gap-[16px]"> <a href="https://www.assemblyai.com/dashboard/signup" class="inline-flex items-center justify-center bg-cobolt-500 hover:bg-cobolt-300 text-white-100 rounded-[2px] px-[12px] py-[8px] font-mono text-[12px] uppercase tracking-[1.2px] transition-colors whitespace-nowrap" style="font-feature-settings: 'ss09' 1;" data-dashboard-auth-primary> 227Get started 228</a> <button type="button" command="show-modal" commandfor="primary-nav-mobile" class="-mr-1 inline-flex items-center justify-center text-black-500" aria-label="Open menu"> <svg width="16" height="8" viewBox="0 0 16 8" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> <path d="M0 1.25H16M0 6.75H16" stroke="currentColor" stroke-width="1.25"></path> </svg> </button> </div> </nav> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="products"> <div class="flex items-start border border-solid rounded-b-[4px] overflow-hidden w-fit bg-white-200 border-neutral-300"> <a href="/products" class="flex flex-col gap-[40px] items-start p-[32px] border-r border-solid rounded-bl-[4px] self-stretch shrink-0 w-[330px] hover:opacity-80 transition-opacity border-neutral-300"><div class="flex flex-col gap-[16px] items-start w-full"> <div class="flex flex-col gap-[8px] items-start w-full"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">platform</p> <p class="p4 text-black-500">Platform overview</p> </div> <p class="p5 text-black-200 opacity-80">Models, APIs, and infrastructure in one place. Build voice into any product, on any stack.</p> </div> </div> <div class="relative shrink-0" style="display: inline-grid; grid-template-columns: max-content; grid-template-rows: max-content; place-items: start; width: 255px; height: 211px;"> <div class="absolute" style="height: 178.253px; width: 53.081px; left: 132.28px; top: 2.01px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(122.69deg) skewX(-57.31deg) scaleY(-0.54);"> <div class="border border-solid h-[95.526px] w-[98.292px] bg-white-200 border-black-500"></div> </div> </div> <div class="absolute" style="height: 164.763px; width: 81.324px; left: 143.44px; top: 20.14px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(141.6deg) skewX(-38.4deg) scaleY(-0.78);"> <div class="border border-solid h-[100.295px] w-[103.777px] bg-white-200 border-black-500"></div> </div> </div> <div class="absolute" style="height: 145.704px; width: 99.759px; left: 154.6px; top: 65.52px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(159.58deg) skewX(-20.42deg) scaleY(-0.94);"> <div class="border border-solid h-[108.571px] w-[106.446px] bg-white-200 border-black-500"></div> </div> </div> <div class="absolute" style="height: 178.253px; width: 53.081px; left: 69.22px; top: 0; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(-122.69deg) skewX(57.31deg) scaleY(-0.54);"> <div class="border border-solid h-[95.526px] w-[98.292px] bg-white-200 border-black-500"></div> </div> </div> <div class="absolute" style="height: 164.763px; width: 81.324px; left: 29.71px; top: 20.14px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(-141.6deg) skewX(38.4deg) scaleY(-0.78);"> <div class="border border-solid h-[100.295px] w-[103.777px] bg-white-200 border-black-500"></div> </div> </div> <div class="absolute" style="height: 145.704px; width: 99.759px; left: 0; top: 65.52px; display: flex; align-items: center; justify-content: center;">
228 <div class="flex-none" style="transform: rotate(-159.58deg) skewX(20.42deg) scaleY(-0.94);"> <div class="border border-solid h-[108.571px] w-[106.446px] bg-white-200 border-black-500"></div> </div> </div> </div></a> <div class="flex flex-col gap-[24px] items-start px-[24px] py-[32px] self-stretch [flex:5_5_0%] min-w-[330px] border-r border-solid border-neutral-300"> <div class="flex flex-col gap-[24px] items-start w-full"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">transcribe</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/products/speech-to-text" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Pre-recorded Speech-to-Text API </a><a href="/products/streaming-speech-to-text" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Realtime Speech-to-Text API </a><a href="/products/sync-speech-to-text" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Sync Speech-to-Text API </a> </div> </div><div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">understand</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/products/speech-understanding" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Speech Understanding API </a><a href="/products/guardrails" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Guardrails and Safety </a><a href="/products/llm-gateway" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> LLM Gateway </a> </div> </div><div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">interact</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/products/voice-agent-api" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Voice Agent API </a><a href="/products/dictation-api" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Dictation API </a> </div> </div> </div> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">inference</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/deployments/self-hosted" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Self Hosted </a><a href="/deployments/cloud" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Voice AI Cloud </a> </div> </div> </div> <div class="flex flex-col gap-[16px] items-start px-[24px] py-[32px] self-stretch [flex:5_5_0%] min-w-[300px] border-r border-solid border-neutral-300"> <p class="e1 text-black-300">use cases</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/solutions/voice-agents" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Voice Agents </a><a href="/use-cases/ai-notetakers" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> AI Notetakers </a><a href="/use-cases/call-analytics" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Call Analytics </a><a href="/use-cases/medical-transcription" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Medical Transcription </a><a href="/use-cases/dictation" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Dictation </a><a href="/use-cases/agent-assist" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Agent Assist </a><a href="/use-cases/ai-scribes" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> AI Scribes </a> </div> </div> <div class="flex flex-col gap-[16px] items-start p-[32px] self-stretch [flex:4_4_0%] min-w-[240px] rounded-br-[4px]"> <p class="e1 text-black-300">languages</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/languages/english" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> English </a><a href="/languages/spanish" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Spanish </a><a href="/languages/portuguese" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Portuguese </a><a href="/languages/french" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> French </a><a href="/languages/german" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> German </a><a href="/languages/russian" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Russian </a><a href="/languages/hindi" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Hindi </a><a href="/languages/dutch" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Dutch </a><a href="/languages/japanese" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Japanese </a>
228<a href="/languages/italian" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Italian </a><a href="/languages" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> All 99 Languages </a> </div> </div> </div> </div> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="customers"> <div class="flex items-stretch border border-solid rounded-b-[4px] w-fit bg-white-200 border-neutral-300"> <!-- Left: overview (entire block is clickable via stretched-link on the CTA) --> <div class="relative group cursor-pointer flex flex-col gap-[16px] p-[32px] border-r border-solid shrink-0 w-[350px] rounded-bl-[4px] border-neutral-300"> <div class="flex flex-col gap-[8px] items-start w-full"> <p class="e1 text-black-300">customers</p> <p class="p4 text-black-500">All customer stories</p> <p class="p5 opacity-80 text-black-200">Top Voice AI companies are building with Assembly.</p> </div> <a href="https://www.assemblyai.com/customers" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-500 hover:text-cobolt-400">
228 See all stories </a> </div> <!-- Middle + Right: featured story cards (entire card clickable via stretched-link) --> <div class="relative group cursor-pointer flex flex-col gap-[24px] p-[32px] self-stretch shrink-0 w-[350px] border-r border-solid border-neutral-300"> <div class="flex items-center justify-center w-full h-[200px] rounded-[8px] bg-black-500"> <img src="/_aai/images/customers/zoom-light.svg" alt="Zoom" class="h-[40px] w-auto"> </div> <p class="p5 flex-1 text-black-200">Zoom leverages AssemblyAI to help advance its AI research and development.</p> <a href="https://www.assemblyai.com/customers/zoom-customer-story" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-500 hover:text-cobolt-400"> Read the story </a> </div><div class="relative group cursor-pointer flex flex-col gap-[24px] p-[32px] self-stretch shrink-0 w-[350px] rounded-br-[4px]"> <div class="flex items-center justify-center w-full h-[200px] rounded-[8px] bg-black-500"> <img src="/_aai/images/customers/siro-light.svg" alt="Siro" class="h-[40px] w-auto"> </div> <p class="p5 flex-1 text-black-200">Siro achieves a 90% reduction in customer complaints and support tickets.</p> <a href="https://www.assemblyai.com/customers/siro-customer-story" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-500 hover:text-cobolt-400"> Watch the video </a> </div> </div> </div> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="developers"> <div class="flex items-start border border-solid rounded-b-[4px] overflow-hidden w-fit bg-white-200 border-neutral-300"> <div class="flex flex-col gap-[24px] items-start px-[24px] py-[32px] self-stretch shrink-0 w-[330px] rounded-br-[4px]"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="https://www.assemblyai.com/docs" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Documentation </a><a href="https://www.assemblyai.com/docs/api-reference/overview" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> API Reference </a><a href="https://www.assemblyai.com/docs/cookbooks" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Cookbooks </a><a href="/contact/support" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Support </a><a href="/changelog" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Changelog </a><a href="https://status.assemblyai.com" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Status </a> </div> </div> </div> </div> </div> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="resources"> <div class="flex items-start border border-solid rounded-b-[4px] overflow-hidden w-fit bg-white-200 border-neutral-300"> <div class="flex flex-col gap-[40px] items-start p-[32px] border-r border-solid rounded-bl-[4px] self-stretch shrink-0 w-[330px] relative cursor-pointer border-neutral-300"><div class="flex flex-col gap-[16px] items-start w-full"> <div class="flex flex-col gap-[8px] items-start w-full"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">Latest Release</p> <p class="p4 text-black-500">Dictation API</p> </div> <p class="p5 text-black-200 opacity-80">The first API built for dictation. Your users speak, and it returns text that is ready to send: filler gone, self-corrections resolved, names spelled right.</p> </div> <a href="https://www.assemblyai.com/blog/dictation-api" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-500 hover:text-cobolt-400"> Learn more </a> </div> </div> <div class="flex flex-col gap-[24px] items-start px-[24px] py-[32px] self-stretch shrink-0 min-w-[330px] rounded-br-[4px]"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/blog" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Blog </a><a href="/partners" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Partners </a><a href="/research" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Research </a><a href="/benchmarks" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Benchmarks </a><a href="/security" class="p4 transition-colors text-black-500 hover:text-cobolt-500"> Security </a> </div> </div> </div> </div> </div> </div> <div id="primary-subnav-backdrop" class="fixed inset-0 z-[29] opacity-0 pointer-events-none transition-opacity duration-200 backdrop-blur-md bg-black/10"></div>
228<script type="module">(()=>{const e=document.getElementById("primary-nav-wrapper"),i=document.getElementById("primary-subnav-backdrop");if(!e)return;const s=e.querySelectorAll("[data-subnav-panel]"),r=e.querySelectorAll("[data-subnav-trigger]"),t=e.querySelectorAll("[data-subnav-none]");let a,c=!1;const d=()=>{s.forEach(o=>{o.classList.add("opacity-0","invisible"),o.classList.remove("opacity-100","visible")}),i?.classList.add("opacity-0","invisible"),i?.classList.remove("opacity-100","visible"),c=!1},f=(o,l)=>{clearTimeout(a);const u=e.getBoundingClientRect(),y=l.getBoundingClientRect(),m=16;s.forEach(n=>{if(n.getAttribute("data-subnav-panel")===o){const b=n.getBoundingClientRect().width,p=y.left-u.left-100,g=u.width-b-m,E=Math.max(m,Math.min(p,g));n.style.left=`${E}px`,n.classList.remove("opacity-0","invisible"),n.classList.add("opacity-100","visible")}else n.classList.add("opacity-0","invisible"),n.classList.remove("opacity-100","visible")}),i?.classList.remove("opacity-0","invisible"),i?.classList.add("opacity-100","visible"),c=!0},v=()=>{a=setTimeout(d,200)};r.forEach(o=>{const l=o.getAttribute("data-subnav-trigger");l&&o.addEventListener("mouseenter",()=>f(l,o))}),t.forEach(o=>o.addEventListener("mouseenter",()=>{clearTimeout(a),d()})),e.addEventListener("mouseleave",v),e.addEventListener("mouseenter",()=>{c&&clearTimeout(a)}),i?.addEventListener("click",()=>{clearTimeout(a),d()})})();(()=>{const e=document.getElementById("primary-nav-mobile");if(!e)return;const i=e.querySelector('button[command="close"][commandfor="primary-nav-mobile"]');if(!i)return;const s=700;e.querySelectorAll("a[href]").forEach(r=>{r.addEventListener("click",t=>{if(t.ctrlKey||t.metaKey||t.shiftKey||t.altKey||t.button!==0||r.target&&r.target!=="_self"||!e.open)return;t.preventDefault();const a=r.href;i.click(),window.setTimeout(()=>{window.location.href=a},s)})})})();(()=>{const e=document.querySelector("#primary-nav-mobile [data-mobile-accordion-root]"),i=document.getElementById("primary-nav-mobile");if(!e||!i)return;const s=e.querySelectorAll("[data-mobile-accordion-toggle]"),r=(t,a)=>{t.setAttribute("data-state",a?"open":"closed"),t.querySelector("[data-mobile-accordion-toggle]")?.setAttribute("aria-expanded",a?"true":"false")};s.forEach(t=>{t.addEventListener("click",()=>{const a=t.parentElement;if(!a)return;const c=a.getAttribute("data-state")==="open";r(a,!c)})}),i.addEventListener("close",()=>{e.querySelectorAll("[data-state]").forEach(t=>r(t,!1))})})();</script>
228 <div data-adaptive-dark-nav-overlay class="fixed inset-x-0 top-0 z-[60] h-0 opacity-0 pointer-events-none transition-opacity duration-300 ease-out" aria-hidden="true"> <div class="absolute inset-x-0 top-0"> <div class="bg-black-500 border-b border-black-400 sticky top-0 z-50" id="secondary-nav-wrapper"> <el-dialog> <dialog id="secondary-nav-mobile" class="backdrop:bg-transparent lg:hidden"> <el-dialog-backdrop class="fixed inset-0 bg-black/40 transition-opacity duration-[700ms] ease-[cubic-bezier(0.22,1,0.36,1)] data-closed:opacity-0"></el-dialog-backdrop> <div tabindex="0" class="fixed inset-0 flex justify-end focus:outline-none"> <el-dialog-panel class="relative flex w-full max-w-xs transform flex-col overflow-hidden bg-black-500 shadow-xl transition duration-[700ms] ease-[cubic-bezier(0.22,1,0.36,1)] data-closed:translate-x-full data-closed:opacity-0"> <div class="flex justify-between items-center px-[30px] py-[24px] shrink-0"> <a href="/" class="flex items-center" style="width: 120px;" aria-label="AssemblyAI home"> <img src="/_aai/images/logos/assemblyai-logo-full-secondary.svg" alt="AssemblyAI" width="120" height="21"> </a> <button type="button" command="close" commandfor="secondary-nav-mobile" class="relative -m-2 inline-flex items-center justify-center rounded-md p-2 text-black-300"> <span class="sr-only">Close menu</span> <svg class="size-6" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"> <path d="M6 18 18 6M6 6l12 12" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> </div> <nav class="flex-1 overflow-y-auto flex flex-col px-[30px] mt-4" data-mobile-accordion-root> <div class="group border-b border-black-400" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-300 transition-colors flex items-center justify-between text-left w-full text-white-100" aria-expanded="false" data-mobile-accordion-toggle> <span>Products</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="/products" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">platform</p> <p class="p4 text-white-200">Platform overview</p> <p class="p5 text-black-200 opacity-80">Models, APIs, and infrastructure in one place. Build voice into any product, on any stack.</p> </a> <div class="flex flex-col gap-[20px]"> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">transcribe</p> <div class="flex flex-col gap-[14px]"> <a href="/products/speech-to-text" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Pre-recorded Speech-to-Text API </a><a href="/products/streaming-speech-to-text" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Realtime Speech-to-Text API </a><a href="/products/sync-speech-to-text" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Sync Speech-to-Text API </a> </div> </div><div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">understand</p> <div class="flex flex-col gap-[14px]"> <a href="/products/speech-understanding" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Speech Understanding API </a><a href="/products/guardrails" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Guardrails and Safety </a><a href="/products/llm-gateway" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> LLM Gateway </a> </div> </div><div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">interact</p> <div class="flex flex-col gap-[14px]"> <a href="/products/voice-agent-api" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Voice Agent API </a><a href="/products/dictation-api" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Dictation API </a> </div> </div> </div> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">inference</p> <div class="flex flex-col gap-[14px]"> <a href="/deployments/self-hosted" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Self Hosted </a><a href="/deployments/cloud" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Voice AI Cloud </a> </div> </div> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">use cases</p> <div class="flex flex-col gap-[14px]"> <a href="/solutions/voice-agents" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Voice Agents </a><a href="/use-cases/ai-notetakers" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> AI Notetakers </a><a href="/use-cases/call-analytics" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Call Analytics </a><a href="/use-cases/medical-transcription" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Medical Transcription </a><a href="/use-cases/dictation" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Dictation </a><a href="/use-cases/agent-assist" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Agent Assist </a><a href="/use-cases/ai-scribes" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> AI Scribes </a> </div> </div> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">languages</p> <div class="flex flex-col gap-[14px]"> <a href="/languages/english" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> English </a><a href="/languages/spanish" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Spanish </a><a href="/languages/portuguese" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Portuguese </a><a href="/languages/french" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> French </a><a href="/languages/german" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> German </a><a href="/languages/russian" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Russian </a><a href="/languages/hindi" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Hindi </a><a href="/languages/dutch" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Dutch </a><a href="/languages/japanese" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Japanese </a>
228<a href="/languages/italian" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Italian </a><a href="/languages" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> All 99 Languages </a> </div> </div> </div> </div> </div> </div><a href="/enterprise" class="p3 py-3 border-b border-black-400 hover:text-cobolt-300 transition-colors text-black-300"> Enterprise </a><div class="group border-b border-black-400" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-300 transition-colors flex items-center justify-between text-left w-full text-black-300" aria-expanded="false" data-mobile-accordion-toggle> <span>Customers</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="https://www.assemblyai.com/customers" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">customers</p> <p class="p4 text-white-200">All customer stories</p> <p class="p5 text-black-200 opacity-80">Top Voice AI companies are building with Assembly.</p> </a> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">customers</p> <div class="flex flex-col gap-[14px]"> <a href="https://www.assemblyai.com/customers" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> All Stories </a><a href="https://www.assemblyai.com/customers/zoom-customer-story" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Zoom </a><a href="https://www.assemblyai.com/customers/siro-customer-story" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Siro </a> </div> </div> </div> </div> </div> </div><div class="group border-b border-black-400" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-300 transition-colors flex items-center justify-between text-left w-full text-black-300" aria-expanded="false" data-mobile-accordion-toggle> <span>Developers</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="https://www.assemblyai.com/docs" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">developers</p> <p class="p4 text-white-200">Documentation</p> <p class="p5 text-black-200 opacity-80">Everything you need to integrate, build, and ship with AssemblyAI â from API reference to step-by-step guides.</p> </a> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[14px]"> <a href="https://www.assemblyai.com/docs" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Documentation </a><a href="https://www.assemblyai.com/docs/api-reference/overview" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> API Reference </a><a href="https://www.assemblyai.com/docs/cookbooks" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Cookbooks </a><a href="/contact/support" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Support </a><a href="/changelog" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Changelog </a><a href="https://status.assemblyai.com" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Status </a> </div> </div> </div> </div> </div> </div><div class="group border-b border-black-400" data-state="closed"> <button type="button" class="p3 py-3 hover:text-cobolt-300 transition-colors flex items-center justify-between text-left w-full text-black-300" aria-expanded="false" data-mobile-accordion-toggle> <span>Resources</span> <svg width="8" height="14" viewBox="0 0 8 14" fill="none" aria-hidden="true" class="shrink-0 transition-transform duration-[300ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <path d="M1 1L7 7L1 13" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-[400ms] ease-[cubic-bezier(0.22,1,0.36,1)]"> <div class="overflow-hidden min-h-0"> <div class="flex flex-col gap-[24px] pb-[24px] pt-[8px]"> <a href="https://www.assemblyai.com/blog/dictation-api" class="flex flex-col gap-[12px] hover:opacity-80 transition-opacity"> <p class="e1 text-black-300">Latest Release</p> <p class="p4 text-white-200">Dictation API</p> <p class="p5 text-black-200 opacity-80">The first API built for dictation. Your users speak, and it returns text that is ready to send: filler gone, self-corrections resolved, names spelled right.</p> </a> <div class="flex flex-col gap-[12px]"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[14px]"> <a href="/blog" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Blog </a><a href="/partners" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Partners </a><a href="/research" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Research </a><a href="/benchmarks" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Benchmarks </a><a href="/security" class="p4 text-white-200 hover:text-cobolt-300 transition-colors"> Security </a> </div> </div> </div> </div> </div> </div><a href="https://www.assemblyai.com/playground" class="p3 py-3 border-b border-black-400 hover:text-cobolt-300 transition-colors text-black-300"> Playground </a><a href="/pricing" class="p3 py-3 border-b border-black-400 hover:text-cobolt-300 transition-colors text-black-300"> Pricing </a> <a href="/contact" class="p3 text-black-300 py-3 border-b border-black-400 hover:text-cobolt-300 transition-colors"> 229Contact us 230</a> </nav> <div class="px-[30px] pt-8 pb-[48px] shrink-0 flex flex-col gap-3"> <a href="https://www.assemblyai.com/dashboard/signup" class="cta-tertiary-dark text-center" data-dashboard-auth-primary>Get started</a> <a href="https://www.assemblyai.com/dashboard/login" class="cta-quaternary-dark text-center" data-dashboard-login-link data-dashboard-auth-secondary>Log in</a> </div> </el-dialog-panel> </div> </dialog> </el-dialog> <nav aria-label="Primary" class="max-w-[1440px] mx-auto flex items-center justify-between px-4 lg:px-[16px] xl:px-[30px] h-[64px] lg:h-[82px]">
230 <div class="flex items-center lg:gap-[28px] xl:gap-[65px]"> <div class="lg:hidden"> <a href="/" class="flex items-center" style="width: 120px;" aria-label="AssemblyAI home"> <img src="/_aai/images/logos/assemblyai-logo-full-secondary.svg" alt="AssemblyAI" width="120" height="21"> </a> </div> <div class="hidden lg:block"> <a href="/" class="flex items-center" style="width: 161px;" aria-label="AssemblyAI home"> <img src="/_aai/images/logos/assemblyai-logo-full-secondary.svg" alt="AssemblyAI" width="161" height="28"> </a> </div> <div class="hidden lg:flex items-center gap-[24px] xl:gap-[35px]"> <a href="/products" class="p5 hover:text-cobolt-300 transition-colors whitespace-nowrap text-white-100" data-subnav-trigger="products"> Products </a><a href="/enterprise" class="p5 hover:text-cobolt-300 transition-colors whitespace-nowrap text-black-300" data-subnav-none="true"> Enterprise </a><a href="/customers" class="p5 hover:text-cobolt-300 transition-colors whitespace-nowrap text-black-300" data-subnav-trigger="customers"> Customers </a><a href="https://www.assemblyai.com/docs" class="p5 hover:text-cobolt-300 transition-colors whitespace-nowrap text-black-300" data-subnav-trigger="developers"> Developers </a><a href="/blog" class="p5 hover:text-cobolt-300 transition-colors whitespace-nowrap text-black-300" data-subnav-trigger="resources">
230 Resources </a><a href="https://www.assemblyai.com/playground" class="p5 hover:text-cobolt-300 transition-colors whitespace-nowrap text-black-300" data-subnav-none="true"> Playground </a><a href="/pricing" class="p5 hover:text-cobolt-300 transition-colors whitespace-nowrap text-black-300" data-subnav-none="true"> Pricing </a> </div> </div> <div class="hidden lg:flex items-center gap-[16px]"> <a href="/contact" class="hidden xl:inline-block p5 text-white-100 hover:text-cobolt-300 transition-colors whitespace-nowrap" data-subnav-none> 231Contact us 232</a> <div class="flex items-center gap-[8px]"> <a href="https://www.assemblyai.com/dashboard/login" class="cta-quaternary-dark hidden xl:inline-flex" data-dashboard-login-link data-dashboard-auth-secondary>Log in</a> <a href="https://www.assemblyai.com/dashboard/signup" class="cta-tertiary-dark" data-dashboard-auth-primary>Get started</a> </div> </div> <div class="lg:hidden flex items-center gap-[16px]"> <a href="https://www.assemblyai.com/dashboard/signup" class="inline-flex items-center justify-center bg-cobolt-300 text-white-100 rounded-[2px] px-[12px] py-[8px] font-mono text-[12px] uppercase tracking-[1.2px] hover:opacity-90 transition-opacity whitespace-nowrap" style="font-feature-settings: 'ss09' 1;" data-dashboard-auth-primary> 233Get started 234</a> <button type="button" command="show-modal" commandfor="secondary-nav-mobile" class="-mr-1 inline-flex items-center justify-center text-white-100" aria-label="Open menu"> <svg width="16" height="8" viewBox="0 0 16 8" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> <path d="M0 1.25H16M0 6.75H16" stroke="currentColor" stroke-width="1.25"></path> </svg> </button> </div> </nav> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="products"> <div class="flex items-start border border-solid rounded-b-[4px] overflow-hidden w-fit bg-black-500 border-black-400"> <a href="/products" class="flex flex-col gap-[40px] items-start p-[32px] border-r border-solid rounded-bl-[4px] self-stretch shrink-0 w-[330px] hover:opacity-80 transition-opacity border-black-400"><div class="flex flex-col gap-[16px] items-start w-full"> <div class="flex flex-col gap-[8px] items-start w-full"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">platform</p> <p class="p4 text-white-200">Platform overview</p> </div> <p class="p5 text-black-200 opacity-80">Models, APIs, and infrastructure in one place. Build voice into any product, on any stack.</p> </div> </div> <div class="relative shrink-0" style="display: inline-grid; grid-template-columns: max-content; grid-template-rows: max-content; place-items: start; width: 255px; height: 211px;"> <div class="absolute" style="height: 178.253px; width: 53.081px; left: 132.28px; top: 2.01px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(122.69deg) skewX(-57.31deg) scaleY(-0.54);"> <div class="border border-solid h-[95.526px] w-[98.292px] bg-black-500 border-black-300"></div> </div> </div> <div class="absolute" style="height: 164.763px; width: 81.324px; left: 143.44px; top: 20.14px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(141.6deg) skewX(-38.4deg) scaleY(-0.78);"> <div class="border border-solid h-[100.295px] w-[103.777px] bg-black-500 border-black-300"></div> </div> </div> <div class="absolute" style="height: 145.704px; width: 99.759px; left: 154.6px; top: 65.52px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(159.58deg) skewX(-20.42deg) scaleY(-0.94);"> <div class="border border-solid h-[108.571px] w-[106.446px] bg-black-500 border-black-300"></div> </div> </div> <div class="absolute" style="height: 178.253px; width: 53.081px; left: 69.22px; top: 0; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(-122.69deg) skewX(57.31deg) scaleY(-0.54);"> <div class="border border-solid h-[95.526px] w-[98.292px] bg-black-500 border-black-300"></div> </div> </div> <div class="absolute" style="height: 164.763px; width: 81.324px; left: 29.71px; top: 20.14px; display: flex; align-items: center; justify-content: center;"> <div class="flex-none" style="transform: rotate(-141.6deg) skewX(38.4deg) scaleY(-0.78);"> <div class="border border-solid h-[100.295px] w-[103.777px] bg-black-500 border-black-300"></div> </div> </div> <div class="absolute" style="height: 145.704px; width: 99.759px; left: 0; top: 65.52px; display: flex; align-items: center; justify-content: center;">
234 <div class="flex-none" style="transform: rotate(-159.58deg) skewX(20.42deg) scaleY(-0.94);"> <div class="border border-solid h-[108.571px] w-[106.446px] bg-black-500 border-black-300"></div> </div> </div> </div></a> <div class="flex flex-col gap-[24px] items-start px-[24px] py-[32px] self-stretch [flex:5_5_0%] min-w-[330px] border-r border-solid border-black-400"> <div class="flex flex-col gap-[24px] items-start w-full"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">transcribe</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/products/speech-to-text" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Pre-recorded Speech-to-Text API </a><a href="/products/streaming-speech-to-text" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Realtime Speech-to-Text API </a><a href="/products/sync-speech-to-text" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Sync Speech-to-Text API </a> </div> </div><div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">understand</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/products/speech-understanding" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Speech Understanding API </a><a href="/products/guardrails" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Guardrails and Safety </a><a href="/products/llm-gateway" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> LLM Gateway </a> </div> </div><div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">interact</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/products/voice-agent-api" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Voice Agent API </a><a href="/products/dictation-api" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Dictation API </a> </div> </div> </div> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">inference</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/deployments/self-hosted" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Self Hosted </a><a href="/deployments/cloud" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Voice AI Cloud </a> </div> </div> </div> <div class="flex flex-col gap-[16px] items-start px-[24px] py-[32px] self-stretch [flex:5_5_0%] min-w-[300px] border-r border-solid border-black-400"> <p class="e1 text-black-300">use cases</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/solutions/voice-agents" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Voice Agents </a><a href="/use-cases/ai-notetakers" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> AI Notetakers </a><a href="/use-cases/call-analytics" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Call Analytics </a><a href="/use-cases/medical-transcription" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Medical Transcription </a><a href="/use-cases/dictation" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Dictation </a><a href="/use-cases/agent-assist" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Agent Assist </a><a href="/use-cases/ai-scribes" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> AI Scribes </a> </div> </div> <div class="flex flex-col gap-[16px] items-start p-[32px] self-stretch [flex:4_4_0%] min-w-[240px] rounded-br-[4px]"> <p class="e1 text-black-300">languages</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/languages/english" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> English </a><a href="/languages/spanish" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Spanish </a><a href="/languages/portuguese" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Portuguese </a><a href="/languages/french" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> French </a><a href="/languages/german" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> German </a><a href="/languages/russian" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Russian </a><a href="/languages/hindi" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Hindi </a><a href="/languages/dutch" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Dutch </a><a href="/languages/japanese" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Japanese </a>
234<a href="/languages/italian" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Italian </a><a href="/languages" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> All 99 Languages </a> </div> </div> </div> </div> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="customers"> <div class="flex items-stretch border border-solid rounded-b-[4px] w-fit bg-black-500 border-black-400"> <!-- Left: overview (entire block is clickable via stretched-link on the CTA) --> <div class="relative group cursor-pointer flex flex-col gap-[16px] p-[32px] border-r border-solid shrink-0 w-[350px] rounded-bl-[4px] border-black-400"> <div class="flex flex-col gap-[8px] items-start w-full"> <p class="e1 text-black-300">customers</p> <p class="p4 text-white-200">All customer stories</p> <p class="p5 opacity-80 text-white-200">Top Voice AI companies are building with Assembly.</p> </div> <a href="https://www.assemblyai.com/customers" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-300 hover:text-cobolt-200">
234 See all stories </a> </div> <!-- Middle + Right: featured story cards (entire card clickable via stretched-link) --> <div class="relative group cursor-pointer flex flex-col gap-[24px] p-[32px] self-stretch shrink-0 w-[350px] border-r border-solid border-black-400"> <div class="flex items-center justify-center w-full h-[200px] rounded-[8px] bg-black-400"> <img src="/_aai/images/customers/zoom-light.svg" alt="Zoom" class="h-[40px] w-auto"> </div> <p class="p5 flex-1 text-white-200">Zoom leverages AssemblyAI to help advance its AI research and development.</p> <a href="https://www.assemblyai.com/customers/zoom-customer-story" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-300 hover:text-cobolt-200"> Read the story </a> </div><div class="relative group cursor-pointer flex flex-col gap-[24px] p-[32px] self-stretch shrink-0 w-[350px] rounded-br-[4px]"> <div class="flex items-center justify-center w-full h-[200px] rounded-[8px] bg-black-400"> <img src="/_aai/images/customers/siro-light.svg" alt="Siro" class="h-[40px] w-auto"> </div> <p class="p5 flex-1 text-white-200">Siro achieves a 90% reduction in customer complaints and support tickets.</p> <a href="https://www.assemblyai.com/customers/siro-customer-story" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-300 hover:text-cobolt-200"> Watch the video </a> </div> </div> </div> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="developers"> <div class="flex items-start border border-solid rounded-b-[4px] overflow-hidden w-fit bg-black-500 border-black-400"> <div class="flex flex-col gap-[24px] items-start px-[24px] py-[32px] self-stretch shrink-0 w-[330px] rounded-br-[4px]"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="https://www.assemblyai.com/docs" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Documentation </a><a href="https://www.assemblyai.com/docs/api-reference/overview" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> API Reference </a><a href="https://www.assemblyai.com/docs/cookbooks" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Cookbooks </a><a href="/contact/support" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Support </a><a href="/changelog" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Changelog </a><a href="https://status.assemblyai.com" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Status </a> </div> </div> </div> </div> </div> <div class="hidden lg:block absolute top-full z-50 opacity-0 invisible transition-[opacity,visibility] duration-200 pb-[4px]" data-subnav-panel="resources"> <div class="flex items-start border border-solid rounded-b-[4px] overflow-hidden w-fit bg-black-500 border-black-400"> <div class="flex flex-col gap-[40px] items-start p-[32px] border-r border-solid rounded-bl-[4px] self-stretch shrink-0 w-[330px] relative cursor-pointer border-black-400"><div class="flex flex-col gap-[16px] items-start w-full"> <div class="flex flex-col gap-[8px] items-start w-full"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">Latest Release</p> <p class="p4 text-white-200">Dictation API</p> </div> <p class="p5 text-black-200 opacity-80">The first API built for dictation. Your users speak, and it returns text that is ready to send: filler gone, self-corrections resolved, names spelled right.</p> </div> <a href="https://www.assemblyai.com/blog/dictation-api" class="e2 uppercase underline underline-offset-4 transition-colors before:content-[''] before:absolute before:inset-0 text-cobolt-300 hover:text-cobolt-200"> Learn more </a> </div> </div> <div class="flex flex-col gap-[24px] items-start px-[24px] py-[32px] self-stretch shrink-0 min-w-[330px] rounded-br-[4px]"> <div class="flex flex-col gap-[16px] items-start w-full"> <p class="e1 text-black-300">resources</p> <div class="flex flex-col gap-[16px] items-start w-full"> <a href="/blog" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Blog </a><a href="/partners" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Partners </a><a href="/research" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Research </a><a href="/benchmarks" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Benchmarks </a><a href="/security" class="p4 transition-colors text-white-200 hover:text-cobolt-300"> Security </a> </div> </div> </div> </div> </div> </div> <div id="secondary-subnav-backdrop" class="fixed inset-0 z-40 opacity-0 invisible transition-[opacity,visibility] duration-200 cursor-default" style="backdrop-filter: blur(8px); background: rgba(0,0,0,0.15);"></div>
234<script type="module">(()=>{const e=document.getElementById("secondary-nav-wrapper"),o=document.getElementById("secondary-subnav-backdrop");if(!e)return;const i=e.querySelectorAll("[data-subnav-panel]"),s=e.querySelectorAll("[data-subnav-trigger]"),t=e.querySelectorAll("[data-subnav-none]");let a,r=!1;const d=()=>{i.forEach(n=>{n.classList.add("opacity-0","invisible"),n.classList.remove("opacity-100","visible")}),o?.classList.add("opacity-0","invisible"),o?.classList.remove("opacity-100","visible"),r=!1},f=(n,l)=>{clearTimeout(a);const u=e.getBoundingClientRect(),y=l.getBoundingClientRect(),m=16;i.forEach(c=>{if(c.getAttribute("data-subnav-panel")===n){const b=c.getBoundingClientRect().width,g=y.left-u.left-100,p=u.width-b-m,E=Math.max(m,Math.min(g,p));c.style.left=`${E}px`,c.classList.remove("opacity-0","invisible"),c.classList.add("opacity-100","visible")}else c.classList.add("opacity-0","invisible"),c.classList.remove("opacity-100","visible")}),o?.classList.remove("opacity-0","invisible"),o?.classList.add("opacity-100","visible"),r=!0},v=()=>{a=setTimeout(d,200)};s.forEach(n=>{const l=n.getAttribute("data-subnav-trigger");l&&n.addEventListener("mouseenter",()=>f(l,n))}),t.forEach(n=>n.addEventListener("mouseenter",()=>{clearTimeout(a),d()})),e.addEventListener("mouseleave",v),e.addEventListener("mouseenter",()=>{r&&clearTimeout(a)}),o?.addEventListener("click",()=>{clearTimeout(a),d()})})();(()=>{const e=document.getElementById("secondary-nav-mobile");if(!e)return;const o=e.querySelector('button[command="close"][commandfor="secondary-nav-mobile"]');if(!o)return;const i=700;e.querySelectorAll("a[href]").forEach(s=>{s.addEventListener("click",t=>{if(t.ctrlKey||t.metaKey||t.shiftKey||t.altKey||t.button!==0||s.target&&s.target!=="_self"||!e.open)return;t.preventDefault();const a=s.href;o.click(),window.setTimeout(()=>{window.location.href=a},i)})})})();(()=>{const e=document.querySelector("#secondary-nav-mobile [data-mobile-accordion-root]"),o=document.getElementById("secondary-nav-mobile");if(!e||!o)return;const i=e.querySelectorAll("[data-mobile-accordion-toggle]"),s=(t,a)=>{t.setAttribute("data-state",a?"open":"closed"),t.querySelector("[data-mobile-accordion-toggle]")?.setAttribute("aria-expanded",a?"true":"false")};i.forEach(t=>{t.addEventListener("click",()=>{const a=t.parentElement;if(!a)return;const r=a.getAttribute("data-state")==="open";s(a,!r)})}),o.addEventListener("close",()=>{e.querySelectorAll("[data-state]").forEach(t=>s(t,!1))})})();</script>
234 </div> </div>
234<script type="module">const r=()=>{document.querySelectorAll("[data-adaptive-dark-nav-overlay]").forEach(t=>{if(t.dataset.initialized==="true")return;t.dataset.initialized="true";const a=Array.from(document.querySelectorAll('[data-nav-mode="dark"]'));if(a.length===0)return;const l=document.getElementById("primary-nav-wrapper"),c=document.querySelector('[data-tertiary-mode="light"]');let o=null;const n=()=>{const i=(l?.offsetHeight??64)+(c?.offsetHeight??48);let e=!1;for(const u of a){const s=u.getBoundingClientRect();if(s.top<=i&&s.bottom>i){e=!0;break}}const d=e?"dark":"light";d!==o&&(o=d,t.style.opacity=e?"1":"0",t.style.pointerEvents=e?"auto":"none")};window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n),n()})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r();document.addEventListener("astro:page-load",r);</script>
234 <main class="bg-white-200" data-astro-cid-xyrmnwjc> <article data-astro-cid-xyrmnwjc> <header data-astro-cid-xyrmnwjc> <div class="mx-auto flex max-w-[1144px] flex-col items-center gap-8 px-6 pt-12 text-center sm:pt-16 lg:px-[148px] lg:pt-[120px]" data-astro-cid-xyrmnwjc> <span class="e1 inline-flex items-center justify-center border px-[16px] py-[8px] border-neutral-300 text-black-400"> Releases & Updates </span> <div class="flex flex-col items-center gap-6" data-astro-cid-xyrmnwjc> <h1 class="custom-blog-title text-black-500" data-astro-cid-xyrmnwjc> 235Introducing the Dictation API: the first API built for dictation 236</h1> <p class="p3 max-w-[560px] text-black-400" data-astro-cid-xyrmnwjc> 237Voice input for any app. Your users speak, and the Dictation API returns text that’s ready to 238 send: filler gone, self-corrections resolved, names spelled right. Fast, accurate, and 19 languages. 239</p> </div> </div> </header> <div class="mx-auto max-w-[1144px] px-6 pt-[80px] lg:px-[148px]" data-astro-cid-xyrmnwjc> <div class="hero-demo" data-astro-cid-xyrmnwjc> <iframe class="hero-demo__frame" src="https://www.youtube.com/embed/f6_6cOM6Yfc?autoplay=1&mute=1&playsinline=1&rel=0" title="Introducing the Dictation API" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen data-astro-cid-xyrmnwjc></iframe> </div> </div> <div class="mx-auto max-w-[1144px] px-6 py-8 lg:px-[148px]" data-astro-cid-xyrmnwjc> <div class="custom-meta flex flex-wrap items-center justify-between gap-6 pb-8" data-astro-cid-xyrmnwjc> <div class="flex flex-wrap items-center gap-x-10 gap-y-4" data-astro-cid-xyrmnwjc> <div data-astro-cid-xyrmnwjc> <p class="custom-meta__label" data-astro-cid-xyrmnwjc>Written by</p> <p class="custom-meta__value" data-astro-cid-xyrmnwjc>AssemblyAI Team</p> </div> <div data-astro-cid-xyrmnwjc> <p class="custom-meta__label" data-astro-cid-xyrmnwjc>Published on</p> <p class="custom-meta__value" data-astro-cid-xyrmnwjc>15 September 2026</p> </div> </div> <div class="flex items-center gap-2" data-astro-cid-xyrmnwjc> <a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.assemblyai.com%2Fblog%2Fdictation-api" target="_blank" rel="noopener" class="custom-share" data-astro-cid-xyrmnwjc>Twitter</a> <a href="https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.assemblyai.com%2Fblog%2Fdictation-api" target="_blank" rel="noopener" class="custom-share" data-astro-cid-xyrmnwjc>Linkedin</a> </div> </div> </div> <div class="bg-white-100" data-astro-cid-xyrmnwjc> <section class="mx-auto grid max-w-[1440px] gap-10 px-6 py-12 sm:py-16 lg:grid-cols-[200px_minmax(0,900px)] lg:px-[148px] lg:py-[96px]" data-astro-cid-xyrmnwjc> <aside class="hidden lg:block" data-astro-cid-xyrmnwjc> <nav class="custom-toc sticky top-[122px]" aria-label="Table of contents" data-astro-cid-xyrmnwjc> <a href="#overview" class="custom-toc__item" data-toc="overview" data-astro-cid-xyrmnwjc>Overview</a><a href="#output" class="custom-toc__item" data-toc="output" data-astro-cid-xyrmnwjc>Output they can send</a><a href="#speed" class="custom-toc__item" data-toc="speed" data-astro-cid-xyrmnwjc>Speed</a><a href="#accuracy" class="custom-toc__item" data-toc="accuracy" data-astro-cid-xyrmnwjc>Accuracy</a><a href="#languages" class="custom-toc__item" data-toc="languages" data-astro-cid-xyrmnwjc>Languages</a><a href="#how-it-works" class="custom-toc__item" data-toc="how-it-works" data-astro-cid-xyrmnwjc>How it works</a><a href="#pricing" class="custom-toc__item" data-toc="pricing" data-astro-cid-xyrmnwjc>Pricing</a><a href="#blurt" class="custom-toc__item" data-toc="blurt" data-astro-cid-xyrmnwjc>Blurt</a><a href="#get-started" class="custom-toc__item" data-toc="get-started" data-astro-cid-xyrmnwjc>Get started</a><a href="#faq" class="custom-toc__item" data-toc="faq" data-astro-cid-xyrmnwjc>FAQ</a> </nav> </aside> <div class="custom-article min-w-0" data-astro-cid-xyrmnwjc> <div id="overview" class="custom-section-anchor" data-astro-cid-xyrmnwjc></div> <p data-astro-cid-xyrmnwjc> 240A user dictates a message into your app and sends it with the “um” still in it. Another 241 changes their mind halfway through a sentence, and the text keeps both halves. A third watches a 242 teammate’s name come back spelled three different ways across three messages. None of these is an 243 edge case. They happen because transcription models are verbatim by design: they capture what was said, 244 completely and accurately, but what was said is not what anyone wants to send. 245</p> <p data-astro-cid-xyrmnwjc>Here is three seconds of audio through a transcription model, and through the Dictation API:</p> <div class="example-block" data-astro-cid-xyrmnwjc> <div class="example-card__compare" data-astro-cid-xyrmnwjc> <div class="example-card__cell" data-astro-cid-xyrmnwjc> <p class="example-card__label" data-astro-cid-xyrmnwjc>Transcribed</p> <p class="example-card__text" data-astro-cid-xyrmnwjc> 246um so can we uh move the the meeting to thursday i think friday works better actually 247</p> </div> <div class="example-card__cell" data-astro-cid-xyrmnwjc> <p class="example-card__label example-card__label--accent" data-astro-cid-xyrmnwjc>Dictation API</p> <p class="example-card__text example-card__text--accent" data-astro-cid-xyrmnwjc> 248Can we move the meeting to Friday? That works better. 249</p> </div> </div> </div> <p data-astro-cid-xyrmnwjc> 250Today we’re releasing the Dictation API, our first API built for dictation itself. It takes a single 251 spoken utterance and returns text ready to go into whatever your user is writing. Self-corrections resolve 252 to what the speaker landed on. Filler comes out while the tone stays in. Names and terms your user cares 253 about come back spelled the way they spell them. And when your app needs the text in a particular shape, 254 you say so in the request and the output arrives that way. It runs on Universal-3.5 Pro, our flagship 255 speech-to-text model, across 19 languages, at $0.62/hr. 256</p> <a class="banner-cta" href="https://www.assemblyai.com/dashboard/playground/dictation" data-astro-cid-xyrmnwjc> <img src="/_vercel/image?url=_astro%2Fblog-inline-cta-tile.DIwgkvWk.png&w=640&q=100&dpl=dpl_H6Ce4Y27P6hRJuTycVqgQQmvJZ4q" alt aria-hidden="true" data-astro-cid-xyrmnwjc="true" loading="lazy" decoding="async" inputtedWidth="177" width="177" height="132" class="banner-cta__tile"> <span class="banner-cta__copy" data-astro-cid-xyrmnwjc> <span class="banner-cta__title" data-astro-cid-xyrmnwjc>Add Dictation To Your App</span> <span class="banner-cta__body" data-astro-cid-xyrmnwjc> 257One request takes an utterance and returns text your users can send. Built on Universal-3.5 Pro across 258 19 languages. Start free with your existing AssemblyAI API key. 259</span> </span>
259 <svg class="banner-cta__chevron" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" data-astro-cid-xyrmnwjc> <path stroke-linecap="round" stroke-linejoin="round" d="M6 4l4 4-4 4" data-astro-cid-xyrmnwjc></path> </svg> </a> <section id="output" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>Output your users can send without editing it first</h2> <p data-astro-cid-xyrmnwjc> 260Most teams building dictation today start from a transcript and try to close the gap themselves. That 261 work is harder than it looks. Deciding that “Tuesday, no wait, Wednesday” means Wednesday 262 takes an understanding of what the speaker was doing, and so does knowing that a hesitation in the 263 middle of a sentence should disappear while the person’s phrasing survives it. The Dictation API 264 does that work as part of the request: 265</p> <div class="paths-table-wrap" data-astro-cid-xyrmnwjc> <table class="paths-table behaviour-table" data-astro-cid-xyrmnwjc> <thead data-astro-cid-xyrmnwjc> <tr data-astro-cid-xyrmnwjc> <th data-astro-cid-xyrmnwjc></th> <th data-astro-cid-xyrmnwjc>What they said</th> <th data-astro-cid-xyrmnwjc>What lands at the cursor</th> </tr> </thead> <tbody data-astro-cid-xyrmnwjc> <tr data-astro-cid-xyrmnwjc> <td class="behaviour-table__scenario" data-astro-cid-xyrmnwjc>Changed their mind</td> <td class="behaviour-table__said" data-astro-cid-xyrmnwjc>ship it tuesday no wait wednesday</td> <td class="behaviour-table__landed" data-astro-cid-xyrmnwjc> Ship it Wednesday. </td> </tr><tr data-astro-cid-xyrmnwjc> <td class="behaviour-table__scenario" data-astro-cid-xyrmnwjc>Hesitation, tone intact</td> <td class="behaviour-table__said" data-astro-cid-xyrmnwjc>can you uh pull the whatâs it called the q3 numbers</td> <td class="behaviour-table__landed" data-astro-cid-xyrmnwjc> Can you pull the Q3 numbers? </td> </tr><tr data-astro-cid-xyrmnwjc> <td class="behaviour-table__scenario" data-astro-cid-xyrmnwjc>A name the model hasnât seen</td> <td class="behaviour-table__said" data-astro-cid-xyrmnwjc>thanks so much sarah</td> <td class="behaviour-table__landed" data-astro-cid-xyrmnwjc> Thanks so much, Sarai. </td> </tr><tr data-astro-cid-xyrmnwjc> <td class="behaviour-table__scenario" data-astro-cid-xyrmnwjc>The shape your app needs</td> <td class="behaviour-table__said" data-astro-cid-xyrmnwjc>first review the contract then ping legal and book the offsite</td> <td class="behaviour-table__landed" data-astro-cid-xyrmnwjc> <ul class="behaviour-table__list" data-astro-cid-xyrmnwjc> <li data-astro-cid-xyrmnwjc>Review the contract</li><li data-astro-cid-xyrmnwjc>Ping legal</li><li data-astro-cid-xyrmnwjc>Book the offsite</li> </ul> </td> </tr> </tbody> </table> </div> <p data-astro-cid-xyrmnwjc> 266The first two rows happen by default. The third is the one teams underestimate: a name the model has 267 never encountered is the most visible error in dictation, because the user always notices it and often 268 can’t fix it faster than retyping the whole message. Pass the words your user cares about in 269<code data-astro-cid-xyrmnwjc>keyterms_prompt</code> and recognition biases toward those spellings. Teammates, customers, 270 product names, internal jargon — the words a general-purpose model reliably mangles. 271</p> <pre data-astro-cid-xyrmnwjc><code data-astro-cid-xyrmnwjc>"keyterms_prompt": ["Sarai", "Q3 planning", "AssemblyAI"]</code></pre> <p data-astro-cid-xyrmnwjc> 272Universal-3.5 Pro is highly accurate out of the box, and contextual prompting is how you push it further 273 for the cases that need it. The Dictation API inherits that capability whole. Pass the model a 274 description of what it is about to hear in <code data-astro-cid-xyrmnwjc>stt_prompt</code> — your app, your domain, the 275 kind of speech your users produce — and it uses that to guide the transcription. That is the 276 difference between a transcript that is broadly right and one that gets your user’s vocabulary 277 right. 278</p> <p data-astro-cid-xyrmnwjc> 279The fourth row is the one you specify. Dictation into a Slack composer and dictation into a clinical 280 note want different text out of the same sentence, and <code data-astro-cid-xyrmnwjc>llm_instruction</code> is where you draw 281 that line: 282</p> <pre data-astro-cid-xyrmnwjc><code data-astro-cid-xyrmnwjc>"llm_instruction": "Format as a bulleted task list. Keep names verbatim."</code></pre> <p data-astro-cid-xyrmnwjc> 283Leave it out and you get the default cleanup. Either way the verbatim transcript comes back alongside it 284 in <code data-astro-cid-xyrmnwjc>text</code>, so you always have both. 285</p> </section> <section id="speed" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>Under one second from key-up to finished text</h2> <figure class="chart-module" data-astro-cid-xyrmnwjc> <div class="chart-module__header" data-astro-cid-xyrmnwjc> <div data-astro-cid-xyrmnwjc> <p class="chart-kicker" data-astro-cid-xyrmnwjc>Time to finished text</p> <h3 data-astro-cid-xyrmnwjc>Ten consecutive dictation requests</h3> </div> <p class="chart-note" data-astro-cid-xyrmnwjc>Lower is better</p> </div> <div class="dot-plot" aria-label="Response time for ten short dictation requests, mean 360 milliseconds" data-astro-cid-xyrmnwjc> <p class="dot-plot__series" data-astro-cid-xyrmnwjc>Dictation API</p> <div class="dot-plot__track" data-astro-cid-xyrmnwjc> <div class="dot-plot__mean" style="left:36%" data-astro-cid-xyrmnwjc> <span class="dot-plot__mean-label" data-astro-cid-xyrmnwjc>0.36s</span> </div> <span class="dot-plot__dot" style="left:40.8%; top:18%" title="408 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:33.900000000000006%; top:62%" title="339 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:36.9%; top:34%" title="369 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:30.5%; top:78%" title="305 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:32.300000000000004%; top:8%" title="323 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:38.1%; top:48%" title="381 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:41.5%; top:70%" title="415 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:31.4%; top:26%" title="314 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:42.5%; top:54%" title="425 ms" data-astro-cid-xyrmnwjc></span><span class="dot-plot__dot" style="left:31.8%; top:88%" title="318 ms" data-astro-cid-xyrmnwjc></span> </div> <div class="dot-plot__axis" data-astro-cid-xyrmnwjc> <span data-astro-cid-xyrmnwjc>0</span> <span data-astro-cid-xyrmnwjc>0.5s</span> <span data-astro-cid-xyrmnwjc>1s</span> </div> </div> <figcaption class="chart-caption" data-astro-cid-xyrmnwjc> 286Response time for short dictation clips. Every response carries <code data-astro-cid-xyrmnwjc>request_time_ms</code>, so 287 you can log this for yourself from your first request onward. 288</figcaption> </figure> <p data-astro-cid-xyrmnwjc> 289Typical short clips come back in under one second. That number is not something you have to take on 290 faith: every response carries <code data-astro-cid-xyrmnwjc>request_time_ms</code>, so the latency you see in production is the 291 latency you can log from your first request onward. 292</p> <p data-astro-cid-xyrmnwjc> 293You can also start the request before your user stops talking. The API accepts the audio in chunks as 294 they’re captured, as long as the config part arrives first, so by the time someone releases the 295 key most of their utterance is already uploaded.
296</p> <p data-astro-cid-xyrmnwjc> 297Requests are bounded at five seconds. Past that bound the API returns a 200 with the verbatim text and 298<code data-astro-cid-xyrmnwjc>llm_error: "timeout"</code> rather than an error your client has to handle, which means the worst 299 case your user experiences is plainer text than usual. That is a different thing from watching a spinner 300 and losing the thought they were dictating. 301</p> </section> <section id="accuracy" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>Built on Universal-3.5 Pro, because a wrong word is unrecoverable</h2> <p data-astro-cid-xyrmnwjc> 302A misheard drug name, a mangled product name, or a wrong digit in a street address survives every 303 improvement made downstream of it and ships straight out in whatever your user sends. Formatting is 304 recoverable. Transcription errors are not. 305</p> <p data-astro-cid-xyrmnwjc> 306That’s why the Dictation API runs on Universal-3.5 Pro, the same flagship model behind our async, 307 realtime, and Sync surfaces. It ranks first for accuracy across independent benchmarks and posts a mean 308 of 3.87% normalized word error rate on short-form audio, which is the audio profile dictation actually 309 produces. 310</p> <figure class="chart-module" data-astro-cid-xyrmnwjc> <div class="chart-module__header" data-astro-cid-xyrmnwjc> <div data-astro-cid-xyrmnwjc> <p class="chart-kicker" data-astro-cid-xyrmnwjc>Word error rate — short-form</p> <h3 data-astro-cid-xyrmnwjc>Short-form English WER</h3> </div> <p class="chart-note" data-astro-cid-xyrmnwjc>Lower is better</p> </div> <div class="wer-bars" data-astro-cid-xyrmnwjc> <div class="wer-bar is-highlight" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>AssemblyAI</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Universal-3.5 Pro Realtime</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:48.375%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>3.87%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>Speechmatics</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Enhanced Realtime</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:58.62500000000001%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>4.69%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>Smallest</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Pulse</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:67.625%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>5.41%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>Azure</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Realtime STT</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:69.25%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>5.54%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>xAI</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Grok Streaming</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:72.625%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>5.81%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>Speechmatics</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Standard Realtime</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:80.125%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>6.41%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>Deepgram</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Flux EN</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:81.625%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>6.53%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>Mistral</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Voxtral Mini Realtime</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:82.625%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>6.61%</span> </div><div class="wer-bar" data-astro-cid-xyrmnwjc> <div class="wer-bar__label" data-astro-cid-xyrmnwjc> <span class="wer-bar__system" data-astro-cid-xyrmnwjc>Deepgram</span> <span class="wer-bar__snapshot" data-astro-cid-xyrmnwjc>Nova-3</span> </div> <div class="wer-bar__track" data-astro-cid-xyrmnwjc> <div class="wer-bar__fill" style="width:93.25%" data-astro-cid-xyrmnwjc></div> </div> <span class="wer-bar__value" data-astro-cid-xyrmnwjc>7.46%</span> </div> <div class="wer-bars__axis" aria-hidden="true" data-astro-cid-xyrmnwjc> <span data-astro-cid-xyrmnwjc>0</span><span data-astro-cid-xyrmnwjc>2%</span><span data-astro-cid-xyrmnwjc>4%</span><span data-astro-cid-xyrmnwjc>6%</span><span data-astro-cid-xyrmnwjc>8%</span> </div> </div>
310 <details class="data-details" data-astro-cid-xyrmnwjc> <summary class="data-details__summary" data-astro-cid-xyrmnwjc>All benchmark data</summary> <div class="paths-table-wrap" data-astro-cid-xyrmnwjc> <table class="paths-table wer-table" data-astro-cid-xyrmnwjc> <thead data-astro-cid-xyrmnwjc> <tr data-astro-cid-xyrmnwjc> <th data-astro-cid-xyrmnwjc>System</th> <th class="is-num" data-astro-cid-xyrmnwjc>Mean<span class="wer-table__sub" data-astro-cid-xyrmnwjc>3 sets</span></th> <th class="is-num" data-astro-cid-xyrmnwjc>Common Voice</th> <th class="is-num" data-astro-cid-xyrmnwjc>LibriSpeech<span class="wer-table__sub" data-astro-cid-xyrmnwjc>clean</span></th> <th class="is-num" data-astro-cid-xyrmnwjc>LibriSpeech<span class="wer-table__sub" data-astro-cid-xyrmnwjc>other</span></th> </tr> </thead> <tbody data-astro-cid-xyrmnwjc> <tr class="is-highlight" data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>AssemblyAI</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Universal-3.5 Pro Realtime</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>3.87%</td> <td class="is-num" data-astro-cid-xyrmnwjc>6.44%</td> <td class="is-num" data-astro-cid-xyrmnwjc>1.88%</td> <td class="is-num" data-astro-cid-xyrmnwjc>3.28%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>Speechmatics</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Enhanced Realtime</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>4.69%</td> <td class="is-num" data-astro-cid-xyrmnwjc>6.78%</td> <td class="is-num" data-astro-cid-xyrmnwjc>2.31%</td> <td class="is-num" data-astro-cid-xyrmnwjc>4.99%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>Smallest</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Pulse</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>5.41%</td> <td class="is-num" data-astro-cid-xyrmnwjc>9.34%</td> <td class="is-num" data-astro-cid-xyrmnwjc>2.19%</td> <td class="is-num" data-astro-cid-xyrmnwjc>4.69%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>Azure</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Realtime STT</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>5.54%</td> <td class="is-num" data-astro-cid-xyrmnwjc>8.68%</td> <td class="is-num" data-astro-cid-xyrmnwjc>2.44%</td> <td class="is-num" data-astro-cid-xyrmnwjc>5.49%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>xAI</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Grok Streaming</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>5.81%</td> <td class="is-num" data-astro-cid-xyrmnwjc>11.04%</td> <td class="is-num" data-astro-cid-xyrmnwjc>2.04%</td> <td class="is-num" data-astro-cid-xyrmnwjc>4.36%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>Speechmatics</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Standard Realtime</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>6.41%</td> <td class="is-num" data-astro-cid-xyrmnwjc>9.43%</td> <td class="is-num" data-astro-cid-xyrmnwjc>3.18%</td> <td class="is-num" data-astro-cid-xyrmnwjc>6.61%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>Deepgram</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Flux EN</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>6.53%</td> <td class="is-num" data-astro-cid-xyrmnwjc>7.68%</td> <td class="is-num" data-astro-cid-xyrmnwjc>3.56%</td> <td class="is-num" data-astro-cid-xyrmnwjc>8.35%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>Mistral</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Voxtral Mini Realtime</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>6.61%</td> <td class="is-num" data-astro-cid-xyrmnwjc>12.23%</td> <td class="is-num" data-astro-cid-xyrmnwjc>2.10%</td> <td class="is-num" data-astro-cid-xyrmnwjc>5.49%</td> </tr><tr data-astro-cid-xyrmnwjc> <td data-astro-cid-xyrmnwjc> <span class="paths-table__path" data-astro-cid-xyrmnwjc>Deepgram</span> <span class="wer-table__snapshot" data-astro-cid-xyrmnwjc>Nova-3</span> </td> <td class="is-num" data-astro-cid-xyrmnwjc>7.46%</td> <td class="is-num" data-astro-cid-xyrmnwjc>12.38%</td> <td class="is-num" data-astro-cid-xyrmnwjc>3.28%</td> <td class="is-num" data-astro-cid-xyrmnwjc>6.72%</td> </tr> </tbody> </table> </div> </details> <figcaption class="chart-caption" data-astro-cid-xyrmnwjc> 311Normalized word error rate, runs 2026-08-18 to 2026-09-02, one row per model, most recent run. 312</figcaption> </figure> </section> <a class="banner-cta" href="https://www.assemblyai.com/dashboard/playground/dictation" data-astro-cid-xyrmnwjc> <img src="/_vercel/image?url=_astro%2Fblog-inline-cta-tile.DIwgkvWk.png&w=640&q=100&dpl=dpl_H6Ce4Y27P6hRJuTycVqgQQmvJZ4q" alt aria-hidden="true" data-astro-cid-xyrmnwjc="true" loading="lazy" decoding="async" inputtedWidth="177" width="177" height="132" class="banner-cta__tile"> <span class="banner-cta__copy" data-astro-cid-xyrmnwjc> <span class="banner-cta__title" data-astro-cid-xyrmnwjc>Test It On Your Own Audio</span> <span class="banner-cta__body" data-astro-cid-xyrmnwjc> 313Record an utterance in the browser and compare the transcript against the dictation output, with real 314 response times. No code required. 315</span> </span>
315 <svg class="banner-cta__chevron" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" data-astro-cid-xyrmnwjc> <path stroke-linecap="round" stroke-linejoin="round" d="M6 4l4 4-4 4" data-astro-cid-xyrmnwjc></path> </svg> </a> <section id="languages" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>19 languages out of the box</h2> <p data-astro-cid-xyrmnwjc> 316Your users don’t all dictate in English, and the ones who don’t are the first to abandon a 317 dictation feature that half-works. The Dictation API transcribes 19 languages, the same set 318 Universal-3.5 Pro covers. Pass the ones your app supports in <code data-astro-cid-xyrmnwjc>language_codes</code>, which defaults 319 to English. 320</p> <pre data-astro-cid-xyrmnwjc><code data-astro-cid-xyrmnwjc>"language_codes": ["en", "es", "de", "fr", "it", "pt", "tr", "nl", "sv", "no", "da", "fi", "hi", "vi", "ar", "he", "ja", "ur", "zh"]</code></pre> </section> <section id="how-it-works" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>How it works</h2> <p data-astro-cid-xyrmnwjc> 321Install the SDK, describe what the model is about to hear, and send the clip. Dictation accepts up to 322 120 seconds of audio per call. 323</p> <pre data-astro-cid-xyrmnwjc><code data-astro-cid-xyrmnwjc>pip install assemblyai</code></pre> <pre data-astro-cid-xyrmnwjc><code data-astro-cid-xyrmnwjc>import assemblyai as aai 324 325aai.settings.api_key = "<YOUR_API_KEY>" 326 327config = aai.DictationConfig( 328 stt_prompt="Dictation inside a project management tool. " 329 "Expect task names, teammate names, and dates.", 330 keyterms_prompt=["Sarai", "AssemblyAI", "Universal-3.5 Pro"], 331) 332 333result = aai.DictationTranscriber().transcribe_live("clip.wav", config) 334 335print(result.llm_response) # ready to paste at the cursor 336print(result.text) # verbatim, always present 337print(result.final_text) # the rewrite, falling back to the transcript</code></pre> <p data-astro-cid-xyrmnwjc> 338Underneath it is one POST with two multipart parts, a config JSON object and the audio, so any language 339 with an HTTP client can call it the same way. <code data-astro-cid-xyrmnwjc>transcribe_live()</code> also takes an iterator of 340 audio chunks, and <code data-astro-cid-xyrmnwjc>open_live()</code> takes audio pushed in from a callback, so you can start the 341 upload while your user is still talking instead of waiting for the recording to finish. Both are in the 342<a class="inline-link" href="https://www.assemblyai.com/docs/dictation" data-astro-cid-xyrmnwjc>Dictation docs</a>. 343</p> <div class="body-video" id="walkthrough" data-astro-cid-xyrmnwjc> <iframe class="body-video__frame" src="https://www.youtube.com/embed/dR2G4bQsMGk?rel=0" title="The first API built for Dictation: AssemblyAI's Dictation API" loading="lazy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen data-astro-cid-xyrmnwjc></iframe> </div> </section> <section id="pricing" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>Pricing</h2> <p data-astro-cid-xyrmnwjc> 344$0.62/hr of audio, all in. One line on your bill covers the whole request, so there is no second rate to 345 model and no token math to do when you forecast what dictation costs at your volume. Volume discounts 346 apply at any tier. 347</p> </section> <section id="blurt" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>Blurt, an open-source dictation app built on it</h2> <p data-astro-cid-xyrmnwjc> 348We built a dictation app on the API and open-sourced the whole thing. Blurt is free, MIT-licensed, and 349 native to macOS: hold right ⌘, talk, and the finished text lands in whatever app has focus. You 350 bring your own API key, free tier included. 351</p> <p data-astro-cid-xyrmnwjc> 352It’s also the quickest way to see the API working in a real app. Every feature in this post shows 353 up somewhere in the code, so if you’re figuring out how to wire dictation into your own product, 354 start there instead of from scratch. 355</p> <a class="banner-cta banner-cta--blurt" href="/blurt" data-astro-cid-xyrmnwjc> <img src="/_vercel/image?url=_astro%2Fdictation-api-blurt-cta.wsWJEMRP.png&w=1200&q=100&dpl=dpl_H6Ce4Y27P6hRJuTycVqgQQmvJZ4q" srcset="/_vercel/image?url=_astro%2Fdictation-api-blurt-cta.wsWJEMRP.png&w=1200&q=100&dpl=dpl_H6Ce4Y27P6hRJuTycVqgQQmvJZ4q 1200w" alt sizes="(max-width: 720px) 100v
355w, 440px" aria-hidden="true" data-astro-cid-xyrmnwjc="true" loading="lazy" decoding="async" width="1200" height="840" class="banner-cta__tile"> <span class="banner-cta__copy" data-astro-cid-xyrmnwjc> <span class="banner-cta__eyebrow" data-astro-cid-xyrmnwjc>blurt</span> <span class="banner-cta__title" data-astro-cid-xyrmnwjc>Try Blurt</span> <span class="banner-cta__body" data-astro-cid-xyrmnwjc> 356Blurt is a free Mac app that drops dictation into any text field on your machine. It runs on the 357 Dictation API, so what you feel using it is what your users will feel. Mac only for now. 358</span> </span> <svg class="banner-cta__chevron" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" data-astro-cid-xyrmnwjc> <path stroke-linecap="round" stroke-linejoin="round" d="M6 4l4 4-4 4" data-astro-cid-xyrmnwjc></path> </svg> </a> </section> <section id="get-started" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>Get started</h2> <p data-astro-cid-xyrmnwjc> 359The Dictation API is available now at <code data-astro-cid-xyrmnwjc>https://dictation.assemblyai.com/v1/transcribe/live</code> 360with your existing API key. Send an utterance, read <code data-astro-cid-xyrmnwjc>llm_response</code>, paste it at the cursor. 361 When you are ready to go further, the same request takes an <code data-astro-cid-xyrmnwjc>stt_prompt</code> describing your 362 domain, <code data-astro-cid-xyrmnwjc>keyterms_prompt</code> for the names your users can’t afford to see misspelled, and 363 an <code data-astro-cid-xyrmnwjc>llm_instruction</code> when the default output isn’t the shape your app needs. 364</p> </section> <a class="banner-cta" href="https://www.assemblyai.com/dashboard/playground/dictation" data-astro-cid-xyrmnwjc> <img src="/_vercel/image?url=_astro%2Fblog-inline-cta-tile.DIwgkvWk.png&w=640&q=100&dpl=dpl_H6Ce4Y27P6hRJuTycVqgQQmvJZ4q" alt aria-hidden="true" data-astro-cid-xyrmnwjc="true" loading="lazy" decoding="async" inputtedWidth="177" width="177" height="132" class="banner-cta__tile"> <span class="banner-cta__copy" data-astro-cid-xyrmnwjc> <span class="banner-cta__title" data-astro-cid-xyrmnwjc>Build Dictation Your Users Trust</span> <span class="banner-cta__body" data-astro-cid-xyrmnwjc> 365Finished text from one request, on the speech-to-text model that ranks first for accuracy. Get your 366 free API key and send your first utterance today. 367</span> </span> <svg class="banner-cta__chevron" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true" data-astro-cid-xyrmnwjc> <path stroke-linecap="round" stroke-linejoin="round" d="M6 4l4 4-4 4" data-astro-cid-xyrmnwjc></path> </svg> </a> <section id="faq" class="custom-section" data-astro-cid-xyrmnwjc> <h2 data-astro-cid-xyrmnwjc>Frequently asked questions</h2> <div class="faq-stack" data-astro-cid-xyrmnwjc> <details class="faq-item" data-astro-cid-xyrmnwjc> <summary class="faq-item__q" data-astro-cid-xyrmnwjc>How is the Dictation API different from the Sync API?</summary> <p class="faq-item__a" data-astro-cid-xyrmnwjc>The Sync API returns a verbatim transcript in a single request: what was said, exactly as it was said. The Dictation API takes the same utterance and returns what the speaker meant to send, with self-corrections resolved and filler gone. Both run on Universal-3.5 Pro. Reach for Sync when you want the transcript itself, and Dictation when the text is going straight into whatever your user is writing.</p> </details><details class="faq-item" data-astro-cid-xyrmnwjc> <summary class="faq-item__q" data-astro-cid-xyrmnwjc>Can I control how the output is formatted?</summary> <p class="faq-item__a" data-astro-cid-xyrmnwjc>Yes. Pass llm_instruction with the shape you want and the output arrives that way, whether that is a bulleted task list, a clinical note, or a chat message. Leave it out and you get the default cleanup. The verbatim transcript comes back in text either way, so you always have both.</p> </details><details class="faq-item" data-astro-cid-xyrmnwjc> <summary class="faq-item__q" data-astro-cid-xyrmnwjc>Does it work in all 19 languages?</summary> <p class="faq-item__a" data-astro-cid-xyrmnwjc>[TODO] Transcription covers all 19: pass the ones your app supports in language_codes, which defaults to English. Output-shaping coverage is pending product confirmation â do not answer this half until it lands.</p> </details>
367<details class="faq-item" data-astro-cid-xyrmnwjc> <summary class="faq-item__q" data-astro-cid-xyrmnwjc>What happens when a request hits the five-second bound?</summary> <p class="faq-item__a" data-astro-cid-xyrmnwjc>You get a 200 with the verbatim text and llm_error set to "timeout", not an error your client has to handle. The worst case your user experiences is plainer text than usual, which is a different thing from watching a spinner and losing the thought they were dictating. On the SDK, result.final_text already does the fallback: the rewrite when there is one, the transcript when there is not.</p> </details><details class="faq-item" data-astro-cid-xyrmnwjc> <summary class="faq-item__q" data-astro-cid-xyrmnwjc>How do I make sure it spells my usersâ names correctly?</summary> <p class="faq-item__a" data-astro-cid-xyrmnwjc>Pass the words that matter in keyterms_prompt â teammates, customers, product names, internal jargon â and recognition biases toward those spellings. For broader context, stt_prompt describes what the model is about to hear, so it can lean on your domain rather than general-purpose vocabulary.</p> </details><details class="faq-item" data-astro-cid-xyrmnwjc> <summary class="faq-item__q" data-astro-cid-xyrmnwjc>Is there an SDK?</summary> <p class="faq-item__a" data-astro-cid-xyrmnwjc>Yes, for Python: pip install assemblyai, then aai.DictationTranscriber().transcribe_live(). It handles the multipart framing and the chunked upload for you. There is no JavaScript SDK yet, so in every other language call it over HTTP â one POST with a config part and an audio part, which any HTTP client can do.</p> </details><details class="faq-item" data-astro-cid-xyrmnwjc> <summary class="faq-item__q" data-astro-cid-xyrmnwjc>What does $0.62/hr include?</summary> <p class="faq-item__a" data-astro-cid-xyrmnwjc>The whole request, per hour of audio: transcription and the finished output on one line of your bill. There is no second rate to model and no token math to do when you forecast what dictation costs at your volume. Volume discounts apply at any tier.</p> </details> </div> </section> </div> </section> </div> </article> </main> <footer class="bg-black-500" data-nav-mode="dark"> <div class="border-b border-black-400"> <div class="max-w-[1440px] mx-auto w-full flex flex-col gap-8 lg:gap-10 lg:flex-row lg:items-center lg:justify-between px-6 pt-12 pb-10 sm:pt-20 sm:pb-16 lg:px-[148px] lg:pt-[120px] lg:pb-[80px]"> <h2 class="h2 text-white-300 max-w-[675px]">Unlock the power of<br>Voice AI</h2><div class="flex flex-wrap items-center gap-[8px]"> <a href="https://www.assemblyai.com/dashboard/signup" class="cta-primary-dark">Get started</a> <a href="/contact" class="cta-secondary-dark">Contact us</a> </div> </div> </div> <div class="max-w-[1440px] mx-auto w-full flex flex-col gap-12 lg:gap-[80px] px-6 pt-12 pb-8 lg:px-[30px] lg:pt-[120px] lg:pb-[40px]"> <div class="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4 lg:gap-8 text-white-300 w-full"> <div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Platform</span> <nav class="flex flex-col gap-[16px] p4"> <a href="/products" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Product overview </a><a href="/products/speech-to-text" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Pre-recorded Speech-to-Text API </a><a href="/products/streaming-speech-to-text" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Realtime Speech-to-Text API </a><a href="/products/sync-speech-to-text" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Sync Speech-to-Text API </a><a href="/products/speech-understanding" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Speech Understanding API </a><a href="/products/voice-agent-api" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Voice Agent API </a><a href="/products/dictation-api" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Dictation API </a><a href="/products/guardrails" class="hover:text-cobolt-300 transition-colors whitespace-nowrap">
367 Guardrails </a><a href="/products/llm-gateway" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> LLM Gateway </a><a href="/features" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Features </a><a href="https://www.assemblyai.com/playground" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Playground <span class="ml-[8px] text-cobolt-200">Try it out!</span> </a><a href="/pricing" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Pricing </a> </nav> </div><div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Solutions</span> <nav class="flex flex-col gap-[16px] p4"> <a href="/enterprise" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Enterprise </a><a href="/contact/startup-program" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Startups </a><a href="/solutions/conversation-intelligence" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Conversation Intelligence </a><a href="/solutions/medical" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Medical Transcription </a><a href="/solutions/contact-centers" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Contact Centers </a><a href="/solutions/voice-agents" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Voice Agents </a><a href="/solutions/ai-notetakers" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> AI Notetakers </a><a href="/languages" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Languages </a> </nav> </div><div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Use Cases</span> <nav class="flex flex-col gap-[16px] p4"> <a href="/use-cases/brand-media-monitoring" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Brand & Media Monitoring </a><a href="/use-cases/captioning" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Captioning </a><a href="/use-cases/content-repurposing" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Content Repurposing </a><a href="/use-cases/compliance-monitoring" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Compliance Monitoring </a><a href="/use-cases/dictation" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Dictation </a><a href="/use-cases/edtech" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> EdTech </a><a href="/use-cases/sales-revenue-intelligence" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Sales + Revenue Intelligence </a><a href="/use-cases/transcription-services" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Transcription Services </a> </nav> </div><div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Developers</span> <nav class="flex flex-col gap-[16px] p4"> <a href="https://www.assemblyai.com/docs" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Documentation </a><a href="https://www.assemblyai.com/docs/api-reference" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> API Reference </a><a href="https://www.assemblyai.com/docs/guides" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Cookbooks </a><a href="/contact/support" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Support </a><a href="https://status.assemblyai.com" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Status </a><a href="/changelog" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Changelog </a><a href="https://reddit.com/r/assemblyai" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Reddit </a><a href="https://x.com/AssemblyAI" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Twitter </a><a href="https://www.assemblyai.com/discord" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Discord </a> </nav> </div><div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Company</span> <nav class="flex flex-col gap-[16px] p4"> <a href="/about" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> About </a><a href="/security" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Security </a><a href="/careers" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Careers </a><a href="/newsroom" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Newsroom </a><a href="/media" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Media kit </a><a href="/customers" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Customers </a><a href="/blog" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Blog </a><a href="/contact/sales" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Contact Sales </a> </nav> </div><div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Research</span> <nav class="flex flex-col gap-[16px] p4"> <a href="/research" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Overview </a><a href="/universal-3-pro" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Universal </a><a href="/universal-streaming" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Universal-Streaming </a><a href="/benchmarks" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Benchmark </a> </nav> </div><div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Robots</span> <nav class="flex flex-col gap-[16px] p4"> <a href="/llms/pricing.md" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> pricing.md </a><a href="/llms/models.md" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> models.md </a> </nav> </div><div class="flex flex-col gap-[16px] lg:gap-[24px]"> <span class="e1 opacity-80">Articles</span> <nav class="flex flex-col gap-[16px] p4"> <a href="/blog/the-top-free-speech-to-text-apis-and-open-source-engines" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Best speech-to-text APIs & AI models </a><a href="/blog/automatically-summarize-audio-and-video-files-at-scale-with-ai" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> AI-powered audio/video summaries </a><a href="/blog/what-is-asr" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> What is Automatic Speech Recognition? </a><a href="/blog/summarize-meetings-llms-python" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> Using AI to summarize meeting transcripts </a><a href="/blog/speech-to-text" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> What is speech-to-text? </a><a href="/blog/ai-voice-agents" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> What are AI voice agents? </a><a href="/blog/conversation-intelligence" class="hover:text-cobolt-300 transition-colors whitespace-nowrap"> What is conversation intelligence? </a> </nav> </div> </div> <div class="flex flex-col gap-[24px]"> <a href="/" class="flex items-center" style="width: 161px;" aria-label="AssemblyAI home"> <img src="/_aai/images/logos/assemblyai-logo-full-secondary.svg" alt="AssemblyAI" width="161" height="28"> </a> <div class="flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between text-white-300/60"> <p class="p4">© 2026 AssemblyAI, Inc.</p> <nav class="flex flex-col gap-3 lg:flex-row lg:flex-wrap lg:items-center lg:gap-y-2 p5"> <a href="/legal/terms-of-service" class="hover:text-cobolt-300 transition-colors lg:mr-[40px]">Terms of Service</a> <a href="/legal/privacy-policy" class="hover:text-cobolt-300 transition-colors lg:mr-[40px]">Privacy Policy</a> <a href="https://app.vanta.com/assemblyai/trust/7n80syl8zln1bn1qm3x8eg" target="_blank" rel="noopener noreferrer" class="hover:text-cobolt-300 transition-colors lg:mr-[40px]">Trust Center</a> <a href="/legal/subprocessors" class="hover:text-cobolt-300 transition-colors lg:mr-[40px]">Subprocessors</a>
367 <a href="#" data-cookie-settings-button class="hover:text-cobolt-300 transition-colors">Do not sell my Personal Information</a> </nav> </div> </div> </div> </footer> <vercel-analytics data-props="{}" data-params="{}" data-pathname="/blog/dictation-api"></vercel-analytics>
367<script type="module">var v=()=>{window.va||(window.va=function(...i){window.vaq||(window.vaq=[]),window.vaq.push(i)})},w="@vercel/analytics",b="2.0.1";function u(){return typeof window<"u"}function p(){try{const e="production"}catch{}return"production"}function h(e="auto"){if(e==="auto"){window.vam=p();return}window.vam=e}function y(){return(u()?window.vam:p())||"production"}function d(){return y()==="development"}function m(e,i){if(!e||!i)return e;let n=e;try{const t=Object.entries(i);for(const[r,s]of t)if(!Array.isArray(s)){const o=f(s);o.test(n)&&(n=n.replace(o,`/[${r}]`))}for(const[r,s]of t)if(Array.isArray(s)){const o=f(s.join("/"));o.test(n)&&(n=n.replace(o,`/[...${r}]`))}return n}catch{return e}}function f(e){return new RegExp(`/${g(e)}(?=[/?#]|$)`)}function g(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function E(e){return e.scriptSrc?a(e.scriptSrc):d()?"https://va.vercel-scripts.com/v1/script.debug.js":e.basePath?a(`${e.basePath}/insights/script.js`):"/_vercel/insights/script.js"}function S(e,i){var n;let t=e;if(i)try{t={...(n=JSON.parse(i))==null?void 0:n.analytics,...e}}catch{}h(t.mode);const r={sdkn:w+(t.framework?`/${t.framework}`:""),sdkv:b};return t.disableAutoTrack&&(r.disableAutoTrack="1"),t.viewEndpoint&&(r.viewEndpoint=a(t.viewEndpoint)),t.eventEndpoint&&(r.eventEndpoint=a(t.eventEndpoint)),t.sessionEndpoint&&(r.sessionEndpoint=a(t.sessionEndpoint)),d()&&t.debug===!1&&(r.debug="false"),t.dsn&&(r.dsn=t.dsn),t.endpoint?r.endpoint=t.endpoint:t.basePath&&(r.endpoint=a(`${t.basePath}/insights`)),{beforeSend:t.beforeSend,src:E(t),dataset:r}}function a(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("/")?e:`/${e}`}function k(e={debug:!0},i){var n;if(!u())return;const{beforeSend:t,src:r,dataset:s}=S(e,i);if(v(),t&&((n=window.va)==null||n.call(window,"beforeSend",t)),document.head.querySelector(`script[src*="${r}"]`))return;const o=document.createElement("script");o.src=r;for(const[c,l]of Object.entries(s))o.dataset[c]=l;o.defer=!0,o.onerror=()=>{const c=d()?"Please check if any ad blockers are enabled and try again.":"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";console.log(`[Vercel Web Analytics] Failed to load script from ${r}. ${c}`)},document.head.appendChild(o)}function $({route:e,path:i}){var n;(n=window.va)==null||n.call(window,"pageview",{route:e,path:i})}function A(){try{return}catch{}}function j(){try{return'{"analytics":{"scriptSrc":"2a78b5af2f08d515/script.js","viewEndpoint":"2a78b5af2f08d515/view","eventEndpoint":"2a78b5af2f08d515/event","sessionEndpoint":"2a78b5af2f08d515/session"},"speedInsights":{"scriptSrc":"3fb07c7dbfe95bb8/script.js","endpoint":"3fb07c7dbfe95bb8/vitals"}}'}catch{}}customElements.define("vercel-analytics",class extends HTMLElement{constructor(){super();try{const i=JSON.parse(this.dataset.props??"{}"),n=JSON.parse(this.dataset.params??"{}");k({...i,disableAutoTrack:!0,framework:"astro",basePath:A(),beforeSend:window.webAnalyticsBeforeSend},j());const t=this.dataset.pathname;$({route:m(t??"",n),path:t})}catch(i){throw new Error(`Failed to parse WebAnalytics properties: ${i}`)}}});</script>
367 <vercel-speed-insights data-props="{}" data-params="{}" data-pathname="/blog/dictation-api"></vercel-speed-insights>
367<script type="module">var p=()=>{window.si||(window.si=function(...r){window.siq=window.siq||[],window.siq.push(r)})},l="@vercel/speed-insights",h="2.0.0";function v(){return typeof window<"u"}function b(){try{const e="production"}catch{}return"production"}function f(){return b()==="development"}function g(e,r){if(!e||!r)return e;let s=e;try{const t=Object.entries(r);for(const[n,o]of t)if(!Array.isArray(o)){const i=d(o);i.test(s)&&(s=s.replace(i,`/[${n}]`))}for(const[n,o]of t)if(Array.isArray(o)){const i=d(o.join("/"));i.test(s)&&(s=s.replace(i,`/[...${n}]`))}return s}catch{return e}}function d(e){return new RegExp(`/${w(e)}(?=[/?#]|$)`)}function w(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function m(e){return e.scriptSrc?a(e.scriptSrc):f()?"https://va.vercel-scripts.com/v1/speed-insights/script.debug.js":e.dsn?"https://va.vercel-scripts.com/v1/speed-insights/script.js":e.basePath?a(`${e.basePath}/speed-insights/script.js`):"/_vercel/speed-insights/script.js"}function S(e,r){var s;let t=e;if(r)try{t={...(s=JSON.parse(r))==null?void 0:s.speedInsights,...e}}catch{}const n={sdkn:l+(t.framework?`/${t.framework}`:""),sdkv:h};return t.sampleRate&&(n.sampleRate=t.sampleRate.toString()),t.route&&(n.route=t.route),f()&&t.debug===!1&&(n.debug="false"),t.dsn&&(n.dsn=t.dsn),t.endpoint?n.endpoint=a(t.endpoint):t.basePath&&(n.endpoint=a(`${t.basePath}/speed-insights/vitals`)),{src:m(t),beforeSend:t.beforeSend,dataset:n}}function a(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("/")?e:`/${e}`}function y(e={},r){var s;if(!v()||e.route===null)return null;p();const{beforeSend:t,src:n,dataset:o}=S(e,r);if(document.head.querySelector(`script[src*="${n}"]`))return null;t&&((s=window.si)==null||s.call(window,"beforeSend",t));const i=document.createElement("script");i.src=n,i.defer=!0;for(const[c,u]of Object.entries(o))i.dataset[c]=u;return i.onerror=()=>{console.log(`[Vercel Speed Insights] Failed to load script from ${n}. Please check if any content blockers are enabled and try again.`)},document.head.appendChild(i),{setRoute:c=>{i.dataset.route=c??void 0}}}function $(){try{return}catch{}}function k(){try{return'{"analytics":{"scriptSrc":"2a78b5af2f08d515/script.js","viewEndpoint":"2a78b5af2f08d515/view","eventEndpoint":"2a78b5af2f08d515/event","sessionEndpoint":"2a78b5af2f08d515/session"},"speedInsights":{"scriptSrc":"3fb07c7dbfe95bb8/script.js","endpoint":"3fb07c7dbfe95bb8/vitals"}}'}catch{return}}customElements.define("vercel-speed-insights",class extends HTMLElement{constructor(){super();try{const r=JSON.parse(this.dataset.props??"{}"),s=JSON.parse(this.dataset.params??"{}"),t=g(this.dataset.pathname??"",s);y({route:t,...r,framework:"astro",basePath:$(),beforeSend:window.speedInsightsBeforeSend},k())}catch(r){throw new Error(`Failed to parse SpeedInsights properties: ${r}`)}}});</script>
367
367<script> 368 (function () { 369 var PRODUCTION_ORIGIN = 'https://www.assemblyai.com'; 370 var AUTH_STATUS_URL = '/dashboard/api/chat-credentials'; 371 var DASHBOARD_URL = 'https://www.assemblyai.com/dashboard'; 372 var RETURN_LABEL = 'Return to dashboard'; 373 var authStatus = null; 374 var authStatusPromise = null; 375 376 function normalizeIdentity(data) { 377 if (!data || !data.email) return null; 378 var emailHash = data.email_hash || data.emailHash; 379 if (!emailHash) return null; 380 return { 381 email: String(data.email), 382 email_hash: String(emailHash), 383 name: data.name ? String(data.name) : '', 384 }; 385 } 386 387 function getDashboardAuthPromise() { 388 if (window.AssemblyAIDashboardAuthPromise) { 389 if (!window.AssemblyAIChatIdentityPromise) { 390 window.AssemblyAIChatIdentityPromise = window.AssemblyAIDashboardAuthPromise.then(function (status) { 391 return status.identity; 392 }); 393 } 394 return window.AssemblyAIDashboardAuthPromise; 395 } 396 397 window.AssemblyAIDashboardAuthPromise = window.location.origin === PRODUCTION_ORIGIN 398 ? fetch(AUTH_STATUS_URL, { 399 credentials: 'include', 400 headers: { Accept: 'application/json' }, 401 }) 402 .then(function (res) { 403 if (res.status >= 200 && res.status < 300) { 404 return res.json().catch(function () { return null; }).then(function (data) { 405 return { 406 authenticated: true, 407 identity: normalizeIdentity(data), 408 }; 409 }); 410 } 411 if (res.status === 401 || res.status === 403 || res.status === 404) { 412 return { authenticated: false, identity: null }; 413 } 414 if (!res.ok) throw new Error('Dashboard auth status failed'); 415 return { authenticated: false, identity: null }; 416 }) 417 .catch(function () { 418 return { authenticated: false, identity: null }; 419 }) 420 : Promise.resolve({ authenticated: false, identity: null }); 421 422 window.AssemblyAIChatIdentityPromise = window.AssemblyAIDashboardAuthPromise.then(function (status) { 423 return status.identity; 424 }); 425 426 return window.AssemblyAIDashboardAuthPromise; 427 } 428 429 function updateDashboardLoginLinks() { 430 document.querySelectorAll('[data-dashboard-auth-primary], [data-dashboard-login-link]').forEach(function (link) { 431 link.setAttribute('href', DASHBOARD_URL); 432 link.textContent = RETURN_LABEL; 433 link.setAttribute('aria-label', RETURN_LABEL); 434 }); 435 document.querySelectorAll('[data-dashboard-auth-secondary]').forEach(function (link) { 436 link.setAttribute('hidden', ''); 437 link.setAttribute('aria-hidden', 'true'); 438 link.setAttribute('tabindex', '-1'); 439 }); 440 } 441 442 function checkDashboardAuth() { 443 if (authStatus === true) { 444 updateDashboardLoginLinks(); 445 return; 446 } 447 if (authStatus !== null || window.location.origin !== PRODUCTION_ORIGIN) return; 448 if (authStatusPromise) return; 449 450 authStatusPromise = getDashboardAuthPromise() 451 .then(function (status) { 452 authStatus = status.authenticated; 453 if (authStatus) updateDashboardLoginLinks(); 454 }) 455 .catch(function () { 456 authStatus = false; 457 }) 458 .finally(function () { 459 authStatusPromise = null; 460 }); 461 } 462 463 getDashboardAuthPromise(); 464 checkDashboardAuth(); 465 document.addEventListener('astro:page-load', checkDashboardAuth); 466 })(); 467 </script>
467
467<script> 468 (function() { 469 var UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'gclid']; 470 var STORAGE_KEY = 'utm_parameters'; 471 472 // Read stored params 473 var stored = {}; 474 try { 475 var raw = localStorage.getItem(STORAGE_KEY); 476 if (raw) stored = JSON.parse(raw); 477 } catch (e) { /* ignore */ } 478 479 // Capture params from current URL 480 var urlParams = new URLSearchParams(window.location.search); 481 var fresh = {}; 482 UTM_KEYS.forEach(function(key) { 483 var val = urlParams.get(key); 484 if (val) fresh[key] = val; 485 }); 486 487 // Merge and persist (new values override old) 488 var merged = Object.assign({}, stored, fresh); 489 if (Object.keys(merged).length > 0) { 490 try { localStorage.setItem(STORAGE_KEY, JSON.stringify(merged)); } catch (e) { /* ignore */ } 491 } 492 493 // Append UTM params to all dashboard signup links 494 if (Object.keys(merged).length > 0) { 495 var qs = new URLSearchParams(merged).toString(); 496 document.querySelectorAll('a[href*="dashboard/signup"]').forEach(function(a) { 497 var href = a.getAttribute('href'); 498 if (!href) return; 499 a.setAttribute('href', href + (href.indexOf('?') === -1 ? '?' : '&') + qs); 500 }); 501 } 502 })(); 503 </script>
503
503<script> 504 document.querySelectorAll('[data-cookie-settings-button]').forEach(function(button) { 505 button.removeAttribute('href'); 506 button.addEventListener('click', function(e) { 507 e.preventDefault(); 508 if (window.OneTrust) window.OneTrust.ToggleInfoDisplay(); 509 }); 510 }); 511 </script>
511
511<script> 512 (function () { 513 var PRODUCTION_ORIGIN = 'https://www.assemblyai.com'; 514 var CHAT_WIDGET_URL = 'https://chat.assemblyai.com/widget.js'; 515 var CREDENTIALS_URL = '/dashboard/api/chat-credentials'; 516 var isProductionOrigin = window.location.origin === PRODUCTION_ORIGIN; 517 518 function normalizeIdentity(data) { 519 if (!data || !data.email) return null; 520 var emailHash = data.email_hash || data.emailHash; 521 if (!emailHash) return null; 522 return { 523 email: String(data.email), 524 email_hash: String(emailHash), 525 name: data.name ? String(data.name) : '', 526 }; 527 } 528 529 function getChatIdentityPromise() { 530 if (window.AssemblyAIChatIdentityPromise) { 531 return window.AssemblyAIChatIdentityPromise; 532 } 533 534 window.AssemblyAIChatIdentityPromise = isProductionOrigin 535 ? fetch(CREDENTIALS_URL, { credentials: 'include' }) 536 .then(function (res) { 537 if (res.status !== 200) return null; 538 return res.json(); 539 }) 540 .then(normalizeIdentity) 541 .catch(function () { return null; }) 542 : Promise.resolve(null); 543 544 return window.AssemblyAIChatIdentityPromise; 545 } 546 547 var chatIdentityPromise = getChatIdentityPromise(); 548 549 if (!isProductionOrigin) { 550 injectWidget(null); 551 return; 552 } 553 554 chatIdentityPromise.then(function (identity) { 555 if (!identity) return; 556 injectWidget(identity); 557 }); 558 559 function injectWidget(identity) { 560 if (document.getElementById('aai-chat-widget-script')) return; 561 var script = document.createElement('script'); 562 script.id = 'aai-chat-widget-script'; 563 script.src = CHAT_WIDGET_URL; 564 script.async = true; 565 script.onload = function () { 566 if (identity && window.AssemblyAISupport) { 567 window.AssemblyAISupport.identify(identity); 568 } 569 }; 570 var first = document.getElementsByTagName('script')[0]; 571 first.parentNode.insertBefore(script, first); 572 } 573 }()); 574 </script>
574
574<script> 575 document.addEventListener('click', function(e) { 576 var el = e.target.closest('[data-track]'); 577 if (el && window.rudderanalytics && window.rudderanalytics.track) { 578 window.rudderanalytics.track(el.dataset.track); 579 } 580 }); 581 </script>
581 </body> </html>
581<script type="module">const n=Array.from(document.querySelectorAll(".custom-toc__item")),r=n.map(e=>e.dataset.toc?document.getElementById(e.dataset.toc):null).filter(e=>e!==null);if(r.length){const e=t=>{n.forEach(o=>o.classList.toggle("is-active",o.dataset.toc===t))},i=new IntersectionObserver(t=>{const o=t.filter(s=>s.isIntersecting).sort((s,l)=>s.boundingClientRect.top-l.boundingClientRect.top);o.length&&e(o[0].target.id)},{rootMargin:"-120px 0px -70% 0px",threshold:0});r.forEach(t=>i.observe(t)),e(r[0].id)}const c=document.querySelector(".hero-demo__frame");if(c&&window.matchMedia("(prefers-reduced-motion: reduce)").matches){const e=c.src.replace(/[?&]autoplay=1/,"");e!==c.src&&(c.src=e)}</script>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.