500 store-specific 180-character ad reads: Sume vs MAI-Voice-2.1 cost
Five hundred local ad reads of 180 characters cost $5.00 on Sume, $1.98 on MAI-Voice-2.1 and $1.35 on Flash. Why the one-cent minimum decides it.

Five hundred separate 180-character ad reads cost $5.00 on Sume (1 cent each), $1.98 on MAI-Voice-2.1 and $1.35 on MAI-Voice-2.1-Flash. At that script length Sume's one-cent minimum, not the per-character rate, sets the bill.
Arithmetic
A 180-character read is 180 x $0.0475 / 1,000 = $0.00855 unrounded, which Sume rounds up to the 1-cent minimum. Five hundred jobs are 500 x $0.01 = $5.00. On Microsoft's rates, 180 characters at $22 per million is $0.00396 and at $15 per million is $0.0027; times 500 that is $1.98 and $1.35.
| Option | Per read | 500 reads | Basis |
|---|---|---|---|
| Sume TTS Router | $0.01 | $5.00 | One-cent minimum per job |
| MAI-Voice-2.1 | $0.00396 | $1.98 | $22 per 1M characters |
| MAI-Voice-2.1-Flash | $0.0027 | $1.35 | $15 per 1M characters |
Submitting 500 jobs safely
Sume jobs are async: the submit response carries data.request_id, and you read GET /v1/jobs/:id/status and /result. Send an Idempotency-Key derived from the row so a retry after a network failure returns the same job (data.idempotency_hit) instead of billing twice. The loop below reads reads.tsv (store id, tab, text) and prints one request id per row.
while IFS=$'\t' read -r id text; do
curl -sS -X POST https://api.sume.com/v1/tts-router/generate \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: store-$id-v1" \
-d "$(jq -n --arg t "$text" '{model:"sonic-3.6",transcript:$t,avatar_handle:"product_host",language:"en"}')" \
| jq -r --arg id "$id" '[$id, .data.request_id, .data.idempotency_hit] | @tsv'
done < reads.tsvPack to cut the bill
If your reads do not need separate files, joining them reduces the rounding penalty. Five reads of 180 characters joined with blank lines are 900 characters, a 5-cent job, so 100 jobs cost $5.00 as well; the saving only appears once the packed script is long enough to exceed the minimum meaningfully. At 1,000 characters a job costs 5 cents, the same price as five separate 200-character reads. Packing therefore pays only if you need fewer files, not if you want a lower price per read.
What this leaves out
Concurrency limits apply when workers move jobs to processing, and queued is a normal state, so a 500-row batch will drain over time rather than finish at once. Poll with exponential backoff and never resubmit a paid request that is merely queued.
Sources
Related posts
More in Pricing
- A/B/C tiered video budget for a 300-SKU catalog: three models, $511.27
Top 30 SKUs on Seedance 2.5 at 8 s, next 90 on Seedance 2, last 180 on Wan 3.0: $511.27 for 300 videos at 720p, against $1,476.72 for all Seedance 2.5.
- AI API pricing units decoded: credits, tokens, characters, hours
Five vendors, five units. Convert Runway credits, Google tokens, ElevenLabs and MAI characters and per-hour rates into dollars, with a Python helper.
- AI video generator API pricing: where to read what a Sume clip costs
Three places show Sume video prices: the catalog before you submit, the reservation at submit, and usage.cost after. What each number means and when to use it.
- Amazon peak fees start Oct 15: re-check your sale price cards
Amazon's holiday peak fees run Oct 15, 2026 to Jan 14, 2027 (avg +$0.32 a unit, plus a 3.5% surcharge). Check which sale prices hold. Read 2026-10-05.
Written by Sume