Daily two-hour radio show transcripts: a month on MAI vs Sume STT
A two-hour show every day for 30 days is 3,600 audio minutes: about $32.40 on MAI-Transcribe-2-Streaming and $36.30 on Sume STT with 12 chunks a day.

A two-hour daily radio show produces 60 hours of audio in a 30-day month. That is 3,600 audio minutes, about $32.40 on MAI-Transcribe-2-Streaming ($0.54 an audio hour, an introductory rate Microsoft says runs through the end of 2026) and $36.30 on Sume STT 1.0 ($0.01 per audio minute) including the one-cent split job that cuts each recording into pieces of 10 minutes or less.
Inputs are assumptions: one 120-minute English show a day, transcribed after broadcast, 30 days. Microsoft's rate is from its announcement and Sume's from the API reference, pricing page and timeline audio docs, all read 2026-10-05.
What the bill looks like
A 120-minute show is 12 ranges, so one split job per show covers it, and 12 transcription jobs follow.
| Option | Rate | Total | Jobs |
|---|---|---|---|
| MAI-Transcribe-2-Streaming | $0.54 per audio hour (intro rate through end of 2026) | $32.40 | Streaming; no chunking |
| Sume STT 1.0 (transcription) | $0.01 per audio minute ($0.60 an hour) | $36.00 | 360 jobs of up to 10 minutes |
| Sume timeline audio split | $0.01 flat per job | $0.300 | 30 split jobs, up to 20 ranges each |
| Sume total | $36.30 |
Batch overnight, not live
If the transcript is for the website the next morning, the whole day's work can run overnight. Sume STT 1.0 takes duration_seconds from 1 to 600, so a recording longer than 10 minutes is cut into pieces first. The timeline audio split job takes up to 20 ranges, so one split covers up to 200 minutes of audio.
- Twelve 10-minute jobs per show run as separate jobs; submit them and poll their
status_urlvalues. - Use
mode: "webhook"with a public HTTPSwebhook_urland Sume delivers a signed event when each job reaches a terminal state. - The webhook is terminal-only: there are no partial callbacks, so keep polling available as a backup.
- Retry a failed chunk with the same idempotency key rather than resubmitting the show.
Run it on Sume
This transcribes one show and saves the text under the date. A cron job calls it once a day with that day's hosted recording URL.
The recording URL passed in must already be a media.sume.com audio file, because the split job only reads Sume-hosted audio; import it first.
import os, time, requests
API = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def run(path, body, key):
r = requests.post(API + path, headers={**H, "Idempotency-Key": key}, json=body, timeout=60)
r.raise_for_status()
job = r.json()["data"]
while True:
s = requests.get(job["status_url"], headers=H, timeout=30).json()["data"]
if s["terminal"]:
break
time.sleep(2)
if s["sume_status"] != "completed":
raise RuntimeError(s["sume_status"])
return requests.get(job["result_url"], headers=H, timeout=30).json()["data"]["result"]
def transcribe_long(media_url, total_s, key):
ranges = [{"start": a, "end": min(a + 600, total_s)} for a in range(0, total_s, 600)]
split = {"operation": "split", "url": media_url, "ranges": ranges, "output": {"format": "mp3"}}
parts = run("/v1/timeline-1.0/audio", split, key + "-split")["segments"]
texts = []
for i, p in enumerate(parts):
body = {"audio_url": p["audio_url"], "language_code": "en",
"duration_seconds": min(600, total_s - 600 * i)}
texts.append(run("/v1/stt-1.0/transcribe", body, f"{key}-{i}")["text"])
return " ".join(texts)
day = os.environ["SHOW_DATE"]
text = transcribe_long(os.environ["SHOW_URL"], 120 * 60, f"show-{day}")
open(f"show-{day}.txt", "w", encoding="utf-8").write(text)
When MAI is the better pick
MAI-Transcribe-2-Streaming is $3.90 cheaper over the month. If the station also wants live captions on air, that is a different job, and a streaming model is the right tool. For a next-day transcript, the batch route is enough.
Sources
Related posts
More in Pricing
- Daily weather bulletins for six regions: a month of TTS, MAI vs Sume
Six regional bulletins of 260 characters, every day for 30 days: 46,800 characters, $0.70 on MAI Flash, $1.03 on MAI-Voice-2.1, $2.22 on Sume TTS.
- A daily YouTube Short for 90 days: $28.80 in render, captions, trim
One 59-second Short a day for 90 days costs $28.80 at Sume's public rates: $0.10 render, $0.20 captions, $0.02 trim each. Earnings are a separate matter.
- Deepgram Flux TTS: $0.045 per 1K characters after the free period
Deepgram's Flux TTS is listed at $0.045 per 1,000 characters, 1.5 times Aura-2. Trade press says the free period ended Sept 12 and launch was English only.
- Do Sume wallet credits expire? 365 days per top-up lot
Each Sume top-up becomes its own credit lot with a 365-day expiry. How to size a top-up so nothing lapses, and how that differs from monthly credits.
Written by Sume