Listing narration in 3 languages: 1,200 characters, $0.17 on Sume
A 1,200-character listing description spoken in three languages is 3,600 characters of Sume TTS at $0.0475 per 1,000, which is $0.17 per listing.

Speaking a 1,200-character listing description in three languages costs $0.171 per listing on Sume TTS 1.0, which is 3,600 characters at $0.0475 per 1,000 characters. If you translate with Bilibili's free Index-Translate API, the speech is the only cost.
The 1,200 characters per language is an assumption: translated text can be longer or shorter than the English source, so use the real length after translation. Spaces and punctuation count, and one request takes up to 20,000 characters, per the pricing page and API reference, read 2026-10-05.
What a batch of listings costs
The cost is linear in characters, so a month of listings is easy to budget.
| Listings | Languages | Characters | Sume TTS cost |
|---|---|---|---|
| 1 | 3 | 3,600 | $0.17 |
| 10 | 3 | 36,000 | $1.71 |
| 50 | 3 | 180,000 | $8.55 |
| 200 | 3 | 720,000 | $34.20 |
One voice per language
A TTS voice has a primary language. If the voice you select does not match the language you request, the API answers 409 tts_voice_language_mismatch before it creates a job or charges anything, so choose a Spanish voice for Spanish, and so on. Select a voice with voice.id (a TTS voice UUID), avatar_handle or avatar_id.
Run it
This translates one description and speaks it with a matching voice, reading the voice ids from environment variables.
import os, time, requests
API = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def translate(text, lang):
p = f"Translate the following English text into {lang}, output only the translation without explanation.\n\n{text}"
r = requests.post("https://index-translate.bilibili.com/v1/chat/completions", timeout=120,
json={"model": "Index-Translate-35B-A3B", "temperature": 0,
"messages": [{"role": "user", "content": p}]})
r.raise_for_status()
return r.json()["choices"][0]["message"]["content"].strip()
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 not requests.get(job["status_url"], headers=H, timeout=30).json()["data"]["terminal"]:
time.sleep(2)
res = requests.get(job["result_url"], headers=H, timeout=30)
res.raise_for_status()
return res.json()["data"]["result"]
text = "Sunny two-bedroom near the park, new kitchen, ten minutes to the station."
for lang, code in (("Spanish", "es"), ("German", "de")):
out = run("/v1/tts-1.0/generate", {"transcript": translate(text, lang), "language": code,
"voice": {"mode": "id", "id": os.environ[f"VOICE_{code.upper()}"]}}, f"listing-0412-{code}")
print(code, out["artifacts"][0]["url"])
Sources
Related posts
More in Pricing
- Lyria 3.5 costs $0.08 a song at Google; Sume charges $0.125
Google lists Lyria 3.5 at $0.08 a song; Sume's Music Router bills a fixed $0.125 per accepted generation. The gap is $4.50 per 100 songs. What it covers.
- MAI-Transcribe-2-Streaming $0.54/hour vs Scribe v2 Realtime $0.39
MAI-Transcribe-2-Streaming is $0.54 per hour (intro, through 2026), Scribe v2 Realtime $0.39, AssemblyAI Realtime $0.45. Sume has no live STT.
- MAI-Voice-2.1 at $22 per million characters: a 60-second script
MAI-Voice-2.1 lists $22 per million characters. What a 60-second avatar script costs in speech, against Sume TTS 1.0, and why the avatar seconds cost more.
- MAI-Voice-2.1-Flash '60% cheaper': what the claim compares to
Microsoft says Flash is ~60% cheaper than comparable models. Against its own MAI-Voice-2.1 the gap is 31.8%. Here is the math and the Sume per-character rate.
Written by Sume