Microsoft's new transcription model is ten cents an hour, but the Azure AI Speech defaults do not give you it. enhancedMode.enabled is false, diarization is false, and word timestamps are none, so an unmodified request returns a cheap transcript from a different model with none of the structure you wanted.
Microsoft released MAI-Transcribe-2 on Wednesday at ten cents per audio hour, and the price is doing all the work in the coverage. The part that will cost teams a week of confusion is not the price. It is that almost everything you actually want from the model is switched off in the default request, including the model itself.
Start with that last point, because it is the one that produces silent wrong results rather than an error. In the Azure AI Speech transcribe API, MAI-Transcribe-2 is not the default engine. You reach it by setting enhancedMode.enabled to true and enhancedMode.model to MAI-Transcribe-2. The enhancedMode.enabled flag defaults to false. Send a request without it and you get a transcript back, billed and successful, produced by a different model than the one you benchmarked. Nothing in the response tells you that.
Then the two features most teams assume are included. Speaker diarization, which attributes each segment to a distinct speaker, is controlled by diarization.enabled and defaults to false. Word level timestamps are controlled by modelOptions.timestamps, which accepts word, segment or none, and defaults to none. If you are transcribing calls, interviews, depositions or meetings, those two flags are the difference between a usable artifact and a wall of undifferentiated text that you will have to reprocess later at full cost.
Two more defaults are worth knowing before you standardize on a request shape. modelOptions.transcribeStyle defaults to verbatim, which preserves disfluencies, repetitions and false starts. Set it to clean when the output is going to a human reader rather than to an evidentiary record, and leave it on verbatim when someone may later dispute what was said. And phraseList.phrases, an array for keyword biasing, defaults to empty. Populating it with product names, drug names, ticker symbols or the surnames on your account list is the single cheapest accuracy improvement available, and it is the one nobody remembers to use.
On language, the model detects the spoken language automatically unless you set locales, and locales accepts a single language only. Automatic detection is the right default for mixed inbound audio. Pinning the locale is the right choice when you already know the language, because it removes a class of failure on short or noisy clips.
The mechanics: the endpoint is the speechtotext/transcriptions:transcribe path with api-version 2025-10-15, and it accepts WAV, MP3 and FLAC files smaller than 300 MB. MAI-Transcribe-2 is currently in public preview in Microsoft Foundry, which is the usual reminder that behavior can change without notice.
One habit worth adopting before you write the request. Copy the model string from Microsoft's parameter reference table exactly as it appears there, character for character, rather than retyping it or lifting it from a code sample. Model identifiers are the field where a rejection looks like an authentication problem, and teams routinely spend an afternoon on credentials before checking the string they typed.
The price is promotional. Microsoft said MAI-Transcribe-2 will be priced at ten cents per hour as a limited time offer until the end of the year, which means any business case you build on it needs a second column at whatever the standing rate turns out to be. Build the request correctly now, while you are already in the file, so that the only thing that changes later is the number.
Try it today
- Set enhancedMode.enabled to true and enhancedMode.model to MAI-Transcribe-2 in every request, copying the model string from Microsoft's parameter reference table exactly as written.
- Set diarization.enabled to true for any multi speaker audio, before you transcribe a backlog you would have to pay to reprocess.
- Set modelOptions.timestamps to word if anything downstream needs to jump to a moment in the audio, or to segment if you only need coarse alignment.
- Leave modelOptions.transcribeStyle on verbatim for anything that could be disputed later, and switch it to clean only for output a person will read.
- Populate phraseList.phrases with your product names, customer names and industry terms, and treat that list as a maintained asset rather than a one time setup step.
- Set locales explicitly when you already know the language, and leave it unset for mixed inbound audio so automatic detection applies.
- Confirm your files are WAV, MP3 or FLAC and under 300 MB, and split longer recordings before the request rather than after a rejection.
- Model your transcription budget at a non promotional rate as well, since the ten cent price is a limited time launch offer.