Microsoft AI: MAI-Voice-2-Flash
Microsoft AI’s MAI-Voice-2-Flash generates expressive speech across 15 languages for assistants, customer support and spoken menus. It combines responsive delivery with a curated voice library, reference-voice prompting and turn-level tone control.
About the model
This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.
MAI-Voice-2-Flash is Microsoft AI’s text-to-speech model designed for responsive, high-volume voice experiences. The manufacturer describes natural prosody, clear audio and expressive delivery, with assistants, customer-support agents and telephone menus among its main tasks. Written transcript text becomes spoken audio in the chosen voice. Flash is a specific variant of MAI-Voice-2, distinct from the later MAI-Voice-2.1 family.
Language and voice selection
The exact model card documents fifteen languages and eighteen locales. These cover English, Italian, Spanish, Hindi, French, German, Portuguese, Korean, Simplified Chinese, Turkish, Russian, Thai, Dutch, Romanian and Hungarian, with separate regional variants for some languages. Choose the intended language and prepare the actual wording the listener should hear. A locale distinction can matter for a greeting, a product name or a pronunciation familiar to the audience.
Microsoft documents two voice-selection paths: a curated library and voice prompting from a short recording. The library supplies an existing speaker for a narration or interaction. A reference recording defines a different speaker identity through the manufacturer’s custom-voice workflow. Keep the speaker choice consistent across related prompts so the opening message, explanation and follow-up sound like parts of one experience.
Tone for interactive speech
The model supports turn-level control of tone, delivery and emotion. For a spoken assistant, write a concise first instruction and then the detail the listener needs. A practical line is: “Choose the document you want to open. If you are unsure of its title, tell me what it is about.” The script gives the listener a clear action while leaving room for a follow-up question.
For an educational exchange, separate the explanation from the question the learner should answer. For a menu, keep the option names short and use wording that remains clear when heard once. Tone should follow the purpose of the passage: a reassurance, an instruction and a question can require different delivery while retaining the same voice.
Reference-voice preparation
The manufacturer specifies a five- to sixty-second recording for voice prompting and describes matching the consented speaker without additional training. It recommends natural conversational delivery with moderate energy, because the reference has a substantial influence on the result. Prepare a recording that represents the voice you want to use rather than a performance with unrelated extremes of volume or expression.
This mode is documented for an authorised, consented voice. Its manufacturer workflow and the preset voice library are separate preparation paths. The output remains newly synthesised speech from the supplied transcript; the recording supplies the desired speaker identity.
Work with the spoken result
Use Flash for an interaction in which the reply should be delivered promptly and remain easy to understand. The manufacturer positions this variant around responsiveness while retaining the prosody and acoustic quality of the MAI-Voice-2 line. Keep each spoken turn tied to its transcript and speaker so important names, commands and emotional shifts can be reviewed in context.
A useful result is a clear spoken prompt or response in the required language and voice. Listen to the wording as the audience will hear it, especially in a sequence of prompts. This model’s fifteen-language, eighteen-locale specification belongs to the exact Voice-2-Flash edition; the expanded language catalogue and managed-voice details of later versions belong to their own profiles.
Ailoot Ultra · Text to speech POST /v1/audio/speech microsoft/mai-voice-2-flash
microsoft/mai-voice-2-flashOverview
Microsoft AI’s MAI-Voice-2-Flash generates expressive speech across 15 languages for assistants, customer support and spoken menus. It combines responsive delivery with a curated voice library, reference-voice prompting and turn-level tone control.
- Accepted inputs
- Text
- Results
- Audio
Available in Ailoot · inputs & methods
Ailoot Ultra · Text to speech POST /v1/audio/speech
- Input types
text- Output types
audio- Output format
- mp3
| Field | Type | Requirement | Values & limits | Default |
|---|---|---|---|---|
Fieldmodel | Typestring | RequirementRequired | Values & limits microsoft/mai-voice-2-flash | Default— |
Fieldinput | Typestring | RequirementRequired | Values & limits Minimum length: 1 Unit: Unicode characters | Default— |
Fieldvoice | Typestring | RequirementRequired | Values & limits en-US-Harper:MAI-Voice-2, es-MX-Valeria:MAI-Voice-2, fr-FR-Soleil:MAI-Voice-2, de-DE-Klaus:MAI-Voice-2 | Default— |
Fieldresponse_format | Typestring | RequirementRequired | Values & limits mp3 | Default— |
Input material combinations
text_to_speech · Required: input
Method parameters and lifecycle
| Parameter | Contract |
|---|---|
Parametercontent_type | Contractapplication/json |
Parameterrequired | Contractmodel, input, voice, response_format |
Parametervoice_ids | Contracten-US-Harper:MAI-Voice-2, es-MX-Valeria:MAI-Voice-2, fr-FR-Soleil:MAI-Voice-2, de-DE-Klaus:MAI-Voice-2 |
Parameterresponse_format | Contractmp3 |
Parametermax_input_characters | Contractnull |
Parameterother_options | Contractfalse |
Parameterinput | Contractexact UTF-8 text; Unicode character count without normalization |
Parametermaterial_types | Contracttext |
Lifecycle: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · actual returned task_id or media library record
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Select exact voice from this model profile.
Input characters and audio seconds are different meters.
Pricing
Tariff references do not add request options. Supported parameters are listed for the selected method.
- Fast mode
- Not specified When fast mode is selected
- Flex mode
- Not specified When flex mode is selected
- Maximum reasoning effort
- Not specified When maximum reasoning effort uses the default adjustment
Ailoot rates
Prices by configuration
Match each charge to the conditions shown. Use one rate for each set of alternative configurations.
| Configuration | Rate schedule | Billable quantity | Billing unit | Charge |
|---|---|---|---|---|
| ConfigurationBase token rates | Rate scheduleBase rate | Billable quantity— | Billing unit— | Charge Input · Input tokens — / 1K tokens Output · Output tokens — / 1K tokens Input · Cache read — / 1K tokens Input · Cache write — / 1K tokens Input · Cache write, 1 hour — / 1K tokens |
| ConfigurationUltra | Rate schedule— | Billable quantityEach Unicode code point counts as one character, including Han characters. | Billing unitper 1000 input character | Charge Input · input character $0.03 per 1000 input character |
Reference tariff details
Model-level reference schedules do not change method selection, quotes or charges. Active charges use the selected Ailoot method rates.
Microsoft AI: MAI-Voice-2-Flash
Prices by configuration
| Configuration | Billing conditions | Charge |
|---|---|---|
| ConfigurationMicrosoft AI: MAI-Voice-2-Flash · Default configuration | Billing conditionsDefault configuration | Charge Input · Input characters $0.00003 per input character |
Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. How reservation and settlement work →
Example requests
Ailoot Ultra · Text to speech
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}"
export AILOOT_VOICE_ID
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "microsoft/mai-voice-2-flash", "input": "Good afternoon! This is a short voice take."}')
voice=os.environ["AILOOT_VOICE_ID"]
allowed=json.loads('["en-US-Harper:MAI-Voice-2", "es-MX-Valeria:MAI-Voice-2", "fr-FR-Soleil:MAI-Voice-2", "de-DE-Klaus:MAI-Voice-2"]')
if voice not in allowed: raise SystemExit("Choose an accepted voice ID from this exact model profile")
p["voice"]=voice
p["response_format"]="mp3"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o speech.mp3
Receive and save results
Ailoot Ultra · Text to speech
mp3
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Other content reads
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-assets.json
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}"
export AILOOT_MEDIA_TASK_ID
resource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_MEDIA_TASK_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/media/tasks/$resource_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-task.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("media-task.json").read_text())))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}"
export AILOOT_ASSET_ID
resource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_ASSET_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/media/assets/$resource_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-asset.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("media-asset.json").read_text())))
PY_RESULT
Keep all completed results
Keep every complete returned response, file and content part.
Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.
If the original response needs checking
Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route.
Response fields
| Field | Type |
|---|---|
Fieldbinary audio | Typebytes |
Fieldresponse headers | Typeheaders |
Errors and next steps
| Response | Condition | Next step |
|---|---|---|
Response400 · invalid_request_error | ConditionInvalid required fields, material representation or parameter value | Next stepCorrect the indicated fields before a new creation request. |
Responseserver_error | ConditionThe returned response says the operation or result requires a check | Next stepKeep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request. |
Aliases
Model aliases
Ailoot Ultra microsoft/mai-voice-2-flash
Method path aliases
Use the method paths shown above.
Related caller IDs
FAQ · Microsoft AI: MAI-Voice-2-Flash
- What inputs and results are available?
POST /v1/audio/speech·microsoft/mai-voice-2-flash:text→audio- Which fields does the request use?
POST /v1/audio/speech·microsoft/mai-voice-2-flash:model,input,voice,response_format