What each Umay feature does, when to use it and how to turn it on
Every feature below is off unless the table says otherwise, and you turn it on per request. On files send the option as a form field, on live audio as a query parameter, and with the OpenAI SDK in extra_body.
Send a file, get the text. Any common format; long files are cut at quiet points and joined. This is the most accurate way. See Native API or OpenAI-compatible API.
Send audio over a WebSocket and receive partial text while the person speaks and final text when a sentence ends. Show partial as live text and send final to your language model. The sentence ends after about 0.8 s of silence, or at once when you send flush. See Native API (/v1/stream) or OpenAI-compatible API (/v1/realtime).
For long recordings the request does not have to stay open: send webhook_url, get a job id at once, and receive the result on your server. You can also read it with GET. Up to 4 hours of audio. Instead of uploading, file_url lets the server download the file. See Asynchronous transcription.
On by default (normalize=true). The final text is written the way people write it: “bin iki yüz elli lira” becomes “1.250 TL”. normalize=false returns the spoken words. In Turkish three more options work with it:
Option
Default
Effect
dialect_correction
on
”istiyom gari” becomes “istiyorum artık”; off keeps it as spoken
place_correction
on
”Baba Eski” becomes “Babaeski”; off keeps it as heard
abbreviations
off
On: “43 dk”, “30 GB”. Off: “43 dakika”, “30 gigabayt”
partial text on live audio is not formatted, only final is.
Tell the recogniser which names and places to expect (Turkish). hints takes your own phrases, comma or newline separated; phrase :3 gives one phrase its own boost. hint_context adds a built-in list: mugla, izmir, manisa, aydin, denizli. Use it for customer names, street names and product names.
mode=normal makes file recognition with model=umay use the language model where the model has one. It takes about 40-60 % more processing time and helps most on clean read speech. The default mode=fast does not use it.
gender_detection=true gives each speaker’s gender with a confidence percent (50-100). On live audio it arrives about 2 s after speech starts and is updated later; it never delays the text.
diarize=true labels who said what: S1, S2, … in order of appearance (A, B, … with OpenAI model names). max_speakers sets the upper bound (default 8). Use it for conversations in one channel.
speaker_lock=true makes only the first speaker’s speech text; other voices come as ignored, so they do not reach your language model. Each segment carries similarity, how close that voice is to S1. lock_threshold sets how close it must be (0-1; higher is stricter).
voice_isolation=true removes other voices before recognition (Turkish, German, French, Italian, Spanish, Russian). It switches on only after another voice is heard, so a single speaker, even in loud noise, gets the same text as without it. It does not remove noise as such; for an isolated recording use Audio isolation.
Without a reference, speaker lock, voice isolation and diarization take the first voice they hear as S1. Store a person’s voice once (with their consent), then name it with reference_voiceprint: S1 is that person from the first second, even if someone else speaks first. The recording is not kept. See Reference voiceprints.
Compares a recording with a stored voiceprint and answers match, uncertain or no_match, with a signed result your backend can trust.
A helper signal, not a login. It is not protected against recorded or synthetic voices. Use it together with other checks, never as the only way into an account.
Send a recording, get it back with background voices and noise removed; the duration stays the same. For a conversation recorded in one channel send remove_voices=false, otherwise the other party is removed too. Files only. See Audio isolation.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Mihu API Documentation","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mihu.ai/mihu-ai-logo.svg","dark":"https://mihu.ai/mihu-ai-logo.svg"},"favicon":"https://mintcdn.com/mihu/0m7Oc8JtUTBQ3siW/favicon.svg?fit=max\u0026auto=format\u0026n=0m7Oc8JtUTBQ3siW\u0026q=85\u0026s=2996ee148a7045b38c59204dc11e26db","navbar":{"links":[{"href":"mailto:support@mihu.ai","label":"Support"}],"primary":{"type":"button","label":"Login","href":"https://app.mihu.ai"}},"footer":{"socials":{"x":"https://x.com/mihu-ai","github":"https://github.com/mihu-ai","linkedin":"https://www.linkedin.com/company/mihuai"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Mihu ","icon":"book-open-cover","href":"https://mihu.ai"},{"anchor":"Login","icon":"newspaper","href":"https://app.mihu.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"mihu","hasAudioNarration":false,"actualSubdomain":"mihu","customDomains":["developers.mihu.ai"],"gitSource":{"type":"github","owner":"mihu-ai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae9730f6ee88709363c4d7c","collectionId":"751b62cf-17a6-49d9-aea5-a50eb6d96951","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae9730f6ee88709363c4d7c"},"entitlements":{},"buildId":"6ae975facc35933c90d2a42d","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API Reference","count":1230},{"language":"default","tag":"Agents","count":78},{"language":"default","tag":"Builders","count":26},{"language":"default","tag":"Phone Numbers","count":23},{"language":"default","tag":"Guides","count":21},{"language":"default","tag":"STT (Umay)","count":20},{"language":"default","tag":"Simulations","count":18},{"language":"default","tag":"Tables","count":18},{"language":"default","tag":"Workspace Queue","count":18},{"language":"default","tag":"Conversations","count":17}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"stt/features","slug":"/stt/features","pageMetadata":{"title":"Features","description":"What each Umay feature does, when to use it and how to turn it on","href":"/stt/features"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"What each Umay feature does, when to use it and how to turn it on\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Every feature below is off unless the table says otherwise, and you turn it on per request. On files send the option as a form field, on live audio as a query parameter, and with the OpenAI SDK in `,_jsx(_components.code,{children:`extra_body`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`at-a-glance`,children:`At a glance`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Feature`}),_jsx(_components.th,{children:`What it does`}),_jsx(_components.th,{children:`Use it when`}),_jsx(_components.th,{children:`Option`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#file-transcription`,children:`File transcription`})}),_jsx(_components.td,{children:`Audio file to text`}),_jsx(_components.td,{children:`Recordings, most accurate`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`model=umay`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#live-transcription`,children:`Live transcription`})}),_jsx(_components.td,{children:`Text while the person speaks`}),_jsx(_components.td,{children:`Voice agents, calls`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`model=umay-stream`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#asynchronous-jobs`,children:`Asynchronous jobs`})}),_jsx(_components.td,{children:`Result arrives on your webhook`}),_jsx(_components.td,{children:`Long recordings`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`webhook_url`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#number-and-text-formatting`,children:`Number and text formatting`})}),_jsx(_components.td,{children:`Spoken words to written form`}),_jsx(_components.td,{children:`Almost always (on by default)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`normalize`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#hints`,children:`Hints`})}),_jsx(_components.td,{children:`Favours names and places you give`}),_jsx(_components.td,{children:`Customer names, local places`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`hints`}),`, `,_jsx(_components.code,{children:`hint_context`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#language-model`,children:`Language model`})}),_jsx(_components.td,{children:`Extra language knowledge on files`}),_jsx(_components.td,{children:`Clean read speech`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`mode=normal`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#gender-detection`,children:`Gender detection`})}),_jsx(_components.td,{children:`Gender of each speaker with confidence`}),_jsx(_components.td,{children:`Routing, analytics, addressing`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`gender_detection`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#diarization`,children:`Diarization`})}),_jsx(_components.td,{children:`Who said what`}),_jsx(_components.td,{children:`Two or more speakers`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`diarize`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#speaker-lock`,children:`Speaker lock`})}),_jsx(_components.td,{children:`Only one person becomes text`}),_jsx(_components.td,{children:`Someone talks nearby`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`speaker_lock`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#voice-isolation`,children:`Voice isolation`})}),_jsx(_components.td,{children:`Removes other voices before recognition`}),_jsx(_components.td,{children:`Background voices`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`voice_isolation`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#reference-voiceprints`,children:`Reference voiceprints`})}),_jsx(_components.td,{children:`Follows a known person from the first second`}),_jsx(_components.td,{children:`Someone else may speak first`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`reference_voiceprint`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#speaker-verification`,children:`Speaker verification`})}),_jsx(_components.td,{children:`Is this the stored person?`}),_jsx(_components.td,{children:`A helper check in a call`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`POST /v1/voiceprints/verify`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`#audio-isolation`,children:`Audio isolation`})}),_jsx(_components.td,{children:`Returns the recording without other voices and noise`}),_jsx(_components.td,{children:`Archives, listening, sharing`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`POST /v1/audio/isolation`})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`file-transcription`,children:`File transcription`}),`\n`,_jsxs(_components.p,{children:[`Send a file, get the text. Any common format; long files are cut at quiet points and joined. This is the most accurate way. See `,_jsx(_components.a,{href:`/stt/native-api`,children:`Native API`}),` or `,_jsx(_components.a,{href:`/stt/openai`,children:`OpenAI-compatible API`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`live-transcription`,children:`Live transcription`}),`\n`,_jsxs(_components.p,{children:[`Send audio over a WebSocket and receive `,_jsx(_components.code,{children:`partial`}),` text while the person speaks and `,_jsx(_components.code,{children:`final`}),` text when a sentence ends. Show `,_jsx(_components.code,{children:`partial`}),` as live text and send `,_jsx(_components.code,{children:`final`}),` to your language model. The sentence ends after about 0.8 s of silence, or at once when you send `,_jsx(_components.code,{children:`flush`}),`. See `,_jsx(_components.a,{href:`/stt/native-api`,children:`Native API`}),` (`,_jsx(_components.code,{children:`/v1/stream`}),`) or `,_jsx(_components.a,{href:`/stt/openai`,children:`OpenAI-compatible API`}),` (`,_jsx(_components.code,{children:`/v1/realtime`}),`).`]}),`\n`,_jsx(Heading,{level:`2`,id:`asynchronous-jobs`,children:`Asynchronous jobs`}),`\n`,_jsxs(_components.p,{children:[`For long recordings the request does not have to stay open: send `,_jsx(_components.code,{children:`webhook_url`}),`, get a job id at once, and receive the result on your server. You can also read it with `,_jsx(_components.code,{children:`GET`}),`. Up to 4 hours of audio. Instead of uploading, `,_jsx(_components.code,{children:`file_url`}),` lets the server download the file. See `,_jsx(_components.a,{href:`/stt/async`,children:`Asynchronous transcription`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`number-and-text-formatting`,children:`Number and text formatting`}),`\n`,_jsxs(_components.p,{children:[`On by default (`,_jsx(_components.code,{children:`normalize=true`}),`). The final text is written the way people write it: “bin iki yüz elli lira” becomes “1.250 TL”. `,_jsx(_components.code,{children:`normalize=false`}),` returns the spoken words. In Turkish three more options work with it:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Option`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Effect`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`dialect_correction`})}),_jsx(_components.td,{children:`on`}),_jsx(_components.td,{children:`”istiyom gari” becomes “istiyorum artık”; off keeps it as spoken`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`place_correction`})}),_jsx(_components.td,{children:`on`}),_jsx(_components.td,{children:`”Baba Eski” becomes “Babaeski”; off keeps it as heard`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`abbreviations`})}),_jsx(_components.td,{children:`off`}),_jsx(_components.td,{children:`On: “43 dk”, “30 GB”. Off: “43 dakika”, “30 gigabayt”`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`partial`}),` text on live audio is not formatted, only `,_jsx(_components.code,{children:`final`}),` is.`]}),`\n`,_jsx(Heading,{level:`2`,id:`hints`,children:`Hints`}),`\n`,_jsxs(_components.p,{children:[`Tell the recogniser which names and places to expect (Turkish). `,_jsx(_components.code,{children:`hints`}),` takes your own phrases, comma or newline separated; `,_jsx(_components.code,{children:`phrase :3`}),` gives one phrase its own boost. `,_jsx(_components.code,{children:`hint_context`}),` adds a built-in list: `,_jsx(_components.code,{children:`mugla`}),`, `,_jsx(_components.code,{children:`izmir`}),`, `,_jsx(_components.code,{children:`manisa`}),`, `,_jsx(_components.code,{children:`aydin`}),`, `,_jsx(_components.code,{children:`denizli`}),`. Use it for customer names, street names and product names.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`-F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hints=\"Ali Yılmaz, Şirinyer, Karşıyaka :3\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` hint_context=izmir`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`language-model`,children:`Language model`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`mode=normal`}),` makes file recognition with `,_jsx(_components.code,{children:`model=umay`}),` use the language model where the model has one. It takes about 40-60 % more processing time and helps most on clean read speech. The default `,_jsx(_components.code,{children:`mode=fast`}),` does not use it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`gender-detection`,children:`Gender detection`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`gender_detection=true`}),` gives each speaker’s gender with a confidence `,_jsx(_components.code,{children:`percent`}),` (50-100). On live audio it arrives about 2 s after speech starts and is updated later; it never delays the text.`]}),`\n`,_jsx(Heading,{level:`2`,id:`diarization`,children:`Diarization`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`diarize=true`}),` labels who said what: `,_jsx(_components.code,{children:`S1`}),`, `,_jsx(_components.code,{children:`S2`}),`, … in order of appearance (`,_jsx(_components.code,{children:`A`}),`, `,_jsx(_components.code,{children:`B`}),`, … with OpenAI model names). `,_jsx(_components.code,{children:`max_speakers`}),` sets the upper bound (default 8). Use it for conversations in one channel.`]}),`\n`,_jsx(Heading,{level:`2`,id:`speaker-lock`,children:`Speaker lock`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`speaker_lock=true`}),` makes only the first speaker’s speech text; other voices come as `,_jsx(_components.code,{children:`ignored`}),`, so they do not reach your language model. Each segment carries `,_jsx(_components.code,{children:`similarity`}),`, how close that voice is to `,_jsx(_components.code,{children:`S1`}),`. `,_jsx(_components.code,{children:`lock_threshold`}),` sets how close it must be (0-1; higher is stricter).`]}),`\n`,_jsx(Heading,{level:`2`,id:`voice-isolation`,children:`Voice isolation`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`voice_isolation=true`}),` removes other voices before recognition (Turkish, German, French, Italian, Spanish, Russian). It switches on only after another voice is heard, so a single speaker, even in loud noise, gets the same text as without it. It does not remove noise as such; for an isolated recording use `,_jsx(_components.a,{href:`#audio-isolation`,children:`Audio isolation`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`reference-voiceprints`,children:`Reference voiceprints`}),`\n`,_jsxs(_components.p,{children:[`Without a reference, speaker lock, voice isolation and diarization take the first voice they hear as `,_jsx(_components.code,{children:`S1`}),`. Store a person’s voice once (with their consent), then name it with `,_jsx(_components.code,{children:`reference_voiceprint`}),`: `,_jsx(_components.code,{children:`S1`}),` is that person from the first second, even if someone else speaks first. The recording is not kept. See `,_jsx(_components.a,{href:`/stt/voiceprints`,children:`Reference voiceprints`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`speaker-verification`,children:`Speaker verification`}),`\n`,_jsxs(_components.p,{children:[`Compares a recording with a stored voiceprint and answers `,_jsx(_components.code,{children:`match`}),`, `,_jsx(_components.code,{children:`uncertain`}),` or `,_jsx(_components.code,{children:`no_match`}),`, with a signed result your backend can trust.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`A helper signal, not a login. It is not protected against recorded or synthetic voices. Use it together with other checks, never as the only way into an account.`})}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/stt/verification`,children:`Speaker verification`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`audio-isolation`,children:`Audio isolation`}),`\n`,_jsxs(_components.p,{children:[`Send a recording, get it back with background voices and noise removed; the duration stays the same. For a conversation recorded in one channel send `,_jsx(_components.code,{children:`remove_voices=false`}),`, otherwise the other party is removed too. Files only. See `,_jsx(_components.a,{href:`/stt/isolation`,children:`Audio isolation`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Features","description":"What each Umay feature does, when to use it and how to turn it on","href":"/stt/features"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"At a glance","slug":"at-a-glance","depth":2,"children":[]},{"title":"File transcription","slug":"file-transcription","depth":2,"children":[]},{"title":"Live transcription","slug":"live-transcription","depth":2,"children":[]},{"title":"Asynchronous jobs","slug":"asynchronous-jobs","depth":2,"children":[]},{"title":"Number and text formatting","slug":"number-and-text-formatting","depth":2,"children":[]},{"title":"Hints","slug":"hints","depth":2,"children":[]},{"title":"Language model","slug":"language-model","depth":2,"children":[]},{"title":"Gender detection","slug":"gender-detection","depth":2,"children":[]},{"title":"Diarization","slug":"diarization","depth":2,"children":[]},{"title":"Speaker lock","slug":"speaker-lock","depth":2,"children":[]},{"title":"Voice isolation","slug":"voice-isolation","depth":2,"children":[]},{"title":"Reference voiceprints","slug":"reference-voiceprints","depth":2,"children":[]},{"title":"Speaker verification","slug":"speaker-verification","depth":2,"children":[]},{"title":"Audio isolation","slug":"audio-isolation","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"mihu","siteName":"Mihu API Documentation","title":"Features - Mihu API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T05:50:00.790Z","originalFileLocation":"stt/features.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"What each Umay feature does, when to use it and how to turn it on\">\u003cmeta data-mint-head name=\"application-name\" content=\"Mihu API Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Features - Mihu API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"What each Umay feature does, when to use it and how to turn it on\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Mihu API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.mihu.ai/stt/features\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://mihu.mintlify.app/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Features\u0026amp;description=What+each+Umay+feature+does%2C+when+to+use+it+and+how+to+turn+it+on\u0026amp;theme=a1a00b99f4ad43d413b1f148\u0026amp;signature=bd9007e310021143701e75f355154f784f8a54eb5fb5162947c07512838a4170\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Features - Mihu API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"What each Umay feature does, when to use it and how to turn it on\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://mihu.mintlify.app/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Features\u0026amp;description=What+each+Umay+feature+does%2C+when+to+use+it+and+how+to+turn+it+on\u0026amp;theme=a1a00b99f4ad43d413b1f148\u0026amp;signature=bd9007e310021143701e75f355154f784f8a54eb5fb5162947c07512838a4170\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/mihu/Zb6_XLMgLqCNmG0Z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Mihu API Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.mihu.ai/stt/features\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/stt/features.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.mihu.ai/#organization\",\"name\":\"Mihu API Documentation\",\"url\":\"https://developers.mihu.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mihu.ai/mihu-ai-logo.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.mihu.ai#website\",\"name\":\"Mihu API Documentation\",\"url\":\"https://developers.mihu.ai\",\"publisher\":{\"@id\":\"https://developers.mihu.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.mihu.ai/stt/features#webpage\",\"url\":\"https://developers.mihu.ai/stt/features\",\"name\":\"Features\",\"description\":\"What each Umay feature does, when to use it and how to turn it on\",\"dateModified\":\"2026-11-03T05:50:00.790Z\",\"isPartOf\":{\"@id\":\"https://developers.mihu.ai#website\"},\"breadcrumb\":{\"@id\":\"https://developers.mihu.ai/stt/features#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.mihu.ai/stt/features#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Getting Started\",\"item\":\"https://developers.mihu.ai/stt/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Features\",\"item\":\"https://developers.mihu.ai/stt/features\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developers.mihu.ai/stt/features#article\",\"headline\":\"Features\",\"name\":\"Features\",\"description\":\"What each Umay feature does, when to use it and how to turn it on\",\"url\":\"https://developers.mihu.ai/stt/features\",\"mainEntityOfPage\":{\"@id\":\"https://developers.mihu.ai/stt/features#webpage\"},\"dateModified\":\"2026-11-03T05:50:00.790Z\",\"publisher\":{\"@id\":\"https://developers.mihu.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.mihu.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Mihu API Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Mihu API Documentation","nav":{"global":{"anchors":[{"anchor":"Mihu ","icon":"book-open-cover","href":"https://mihu.ai"},{"anchor":"Login","icon":"newspaper","href":"https://app.mihu.ai"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"STT (Umay)","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","description":"Umay speech recognition: files, live audio, voice features","href":"/stt/introduction"},{"title":"Features","href":"/stt/features"}]},{"group":"API Reference","pages":[{"group":"Service","pages":[{"title":"Health","description":"`200` when at least one worker is ready, `503` while loading.","deprecated":null,"version":null,"openapi":"/tts/openapi.json get /health","href":"/api-reference/service/health"},{"title":"List models","deprecated":null,"version":null,"openapi":"/tts/openapi.json get /v1/models","href":"/api-reference/service/list-models"}]},{"group":"Transcription","pages":[{"title":"Transcribe a file","deprecated":null,"version":null,"openapi":"/stt/openapi.json post /v1/audio/transcriptions","href":"/api-reference/transcription/transcribe-a-file"},{"title":"Get a transcription job","deprecated":null,"version":null,"openapi":"/stt/openapi.json get /v1/audio/transcriptions/{id}","href":"/api-reference/transcription/get-a-transcription-job"}]},{"group":"Voiceprints","pages":[{"title":"List voiceprints","deprecated":null,"version":null,"openapi":"/stt/openapi.json get /v1/voiceprints","href":"/api-reference/voiceprints/list-voiceprints"},{"title":"Create a voiceprint","deprecated":null,"version":null,"openapi":"/stt/openapi.json post /v1/voiceprints","href":"/api-reference/voiceprints/create-a-voiceprint"},{"title":"Get a voiceprint","deprecated":null,"version":null,"openapi":"/stt/openapi.json get /v1/voiceprints/{id}","href":"/api-reference/voiceprints/get-a-voiceprint"},{"title":"Delete a voiceprint","deprecated":null,"version":null,"openapi":"/stt/openapi.json delete /v1/voiceprints/{id}","href":"/api-reference/voiceprints/delete-a-voiceprint"},{"title":"Verify a speaker","deprecated":null,"version":null,"openapi":"/stt/openapi.json post /v1/voiceprints/verify","href":"/api-reference/voiceprints/verify-a-speaker"},{"title":"Signature public key","deprecated":null,"version":null,"openapi":"/stt/openapi.json get /v1/voiceprints/jwks","href":"/api-reference/voiceprints/signature-public-key"}]},{"group":"Audio isolation","pages":[{"title":"Isolate a recording","deprecated":null,"version":null,"openapi":"/stt/openapi.json post /v1/audio/isolation","href":"/api-reference/audio-isolation/isolate-a-recording"},{"title":"Get an isolation job","deprecated":null,"version":null,"openapi":"/stt/openapi.json get /v1/audio/isolation/{id}","href":"/api-reference/audio-isolation/get-an-isolation-job"},{"title":"Delete an isolation job","deprecated":null,"version":null,"openapi":"/stt/openapi.json delete /v1/audio/isolation/{id}","href":"/api-reference/audio-isolation/delete-an-isolation-job"},{"title":"Download isolated audio","deprecated":null,"version":null,"openapi":"/stt/openapi.json get /v1/audio/isolation/{id}/audio","href":"/api-reference/audio-isolation/download-isolated-audio"}]}]},{"group":"Transcription","pages":[{"title":"Native API","href":"/stt/native-api"},{"title":"OpenAI-compatible API","href":"/stt/openai"},{"title":"Asynchronous transcription","href":"/stt/async"}]},{"group":"Voice","pages":[{"title":"Reference voiceprints","href":"/stt/voiceprints"},{"title":"Speaker verification","href":"/stt/verification"},{"title":"Audio isolation","href":"/stt/isolation"}]}]},{"tab":"TTS (SES)","pages":[{"title":"TTS (SES)","href":"/tts/introduction"}]}]},"basePath":"","title":"Features - Mihu API Documentation","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}