PageSourceSearch

https://www.assemblyai.com/blog/dictation-api

html assemblyai.com collected 2026-09-24 08:25:51 UTC 150,310 bytes, 581 lines download raw bytes

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 &amp; 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&rsquo;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&amp;mute=1&amp;playsinline=1&amp;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 &ldquo;um&rdquo; still in it. Another
241            changes their mind halfway through a sentence, and the text keeps both halves. A third watches a
242            teammate&rsquo;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&rsquo;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&amp;w=640&amp;q=100&amp;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 &ldquo;Tuesday, no wait, Wednesday&rdquo; 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&rsquo;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&rsquo;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 &mdash; 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> &mdash; your app, your domain, the
275              kind of speech your users produce &mdash; 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&rsquo;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&rsquo;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&rsquo;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 &mdash; 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&amp;w=640&amp;q=100&amp;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&rsquo;t all dictate in English, and the ones who don&rsquo;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": [&quot;en&quot;, &quot;es&quot;, &quot;de&quot;, &quot;fr&quot;, &quot;it&quot;, &quot;pt&quot;, &quot;tr&quot;, &quot;nl&quot;, &quot;sv&quot;, &quot;no&quot;, &quot;da&quot;, &quot;fi&quot;, &quot;hi&quot;, &quot;vi&quot;, &quot;ar&quot;, &quot;he&quot;, &quot;ja&quot;, &quot;ur&quot;, &quot;zh&quot;]</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 = &quot;&lt;YOUR_API_KEY&gt;&quot;
326
327config = aai.DictationConfig(
328    stt_prompt=&quot;Dictation inside a project management tool. &quot;
329               &quot;Expect task names, teammate names, and dates.&quot;,
330    keyterms_prompt=[&quot;Sarai&quot;, &quot;AssemblyAI&quot;, &quot;Universal-3.5 Pro&quot;],
331)
332
333result = aai.DictationTranscriber().transcribe_live(&quot;clip.wav&quot;, 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 &#8984;, 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&rsquo;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&rsquo;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&amp;w=1200&amp;q=100&amp;dpl=dpl_H6Ce4Y27P6hRJuTycVqgQQmvJZ4q" srcset="/_vercel/image?url=_astro%2Fdictation-api-blurt-cta.wsWJEMRP.png&amp;w=1200&amp;q=100&amp;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&rsquo;t afford to see misspelled, and
363              an <code data-astro-cid-xyrmnwjc>llm_instruction</code> when the default output isn&rsquo;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&amp;w=640&amp;q=100&amp;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 &quot;timeout&quot;, 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 &amp; 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 &amp; 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">&copy; 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.