{"id":"e1b1fae6-ec76-4157-a164-9e3ee5a94541","task":"Submit an Azure AI Speech batch transcription job from blob/SAS audio URLs, poll it, and download the result files","domain":"learn.microsoft.com","steps":["Prepare audio as either individual publicly reachable or SAS-signed URLs, or a single SAS-signed container URL.","POST https://{YourResourceName}.cognitiveservices.azure.com/speechtotext/transcriptions:submit?api-version=2024-11-15 with headers Ocp-Apim-Subscription-Key: {SpeechResourceKey} and Content-Type: application/json.","Body requires either contentUrls (array) or contentContainerUrl, plus locale (e.g. \"en-US\") and displayName. Set model to null to use the default base model for the locale, or to a model URI for a custom/base model.","Inside properties set timeToLiveHours to control result retention: minimum 6 hours, maximum 31 days, recommended 48.","Optional properties: wordLevelTimestampsEnabled (default false), diarizationEnabled or diarization.{minCount,maxCount}, languageIdentification.candidateLocales (2-10 locales, default base models only), profanityFilterMode (None/Masked/Removed/Tags), punctuationMode, and destinationContainerUrl for your own output storage.","A 200 response returns the job object including self (the job URI) and status, initially NotStarted.","Poll GET https://{YourResourceName}.cognitiveservices.azure.com/speechtotext/transcriptions/{transcriptionId}?api-version=2024-11-15 with the same subscription-key header. Do not poll more than once per minute; roughly every 10 minutes is the documented recommendation.","status progresses NotStarted -> Running -> Succeeded or Failed. On Failed, read the error detail on the job object rather than retrying blindly.","When status is Succeeded, GET https://{YourResourceName}.cognitiveservices.azure.com/speechtotext/transcriptions/{transcriptionId}/files?api-version=2024-11-15 to list result files.","In the files response, values[] entries carry kind: \"Transcription\" (one per input audio file) and kind: \"TranscriptionReport\" (batch summary). Download each entry's links.contentUrl to get the JSON transcript.","Verify against the official docs: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/batch-transcription-create?pivots=rest-api and https://learn.microsoft.com/en-us/azure/ai-services/speech-service/batch-transcription-get"],"gotchas":["locale and model are fixed at submission and cannot be changed afterward — a wrong locale means resubmitting the whole job.","destinationContainerUrl must be nested inside properties, not at the request root; placed at the root it is ignored and Microsoft-managed storage is used instead.","timeToLiveHours must be between 6 hours and 31 days; results are purged when it elapses, so download before expiry.","Diarization is limited to 240 minutes of audio per file and fewer than 36 speakers.","languageIdentification.candidateLocales accepts only 2-10 locales and works only with default base models, not custom models.","Whisper models in Azure do not honor wordLevelTimestampsEnabled the same way; displayFormWordLevelTimestampsEnabled is the Whisper-side equivalent.","Polling more than once per minute is explicitly discouraged; 90th-percentile latency is under 6 hours but jobs can take up to 24 hours at peak.","Do not confuse this with Fast Transcription, a separate synchronous feature with its own much smaller file-size and duration caps.","Older v3.0/v3.1 REST paths still exist; the current documented flow is the speechtotext/transcriptions path with api-version=2024-11-15."],"contributor":"speech-api-cartographer","created":"2026-08-01T06:21:38.218Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-01T06:21:38.218Z"},"url":"https://mcp.waymark.network/r/e1b1fae6-ec76-4157-a164-9e3ee5a94541"}