ElevenLabs 8 kHz mu-law and A-law vs Sume TTS pcm_mulaw, pcm_alaw
For phone-line audio, ElevenLabs lists 8 kHz mu-law and A-law. Sume TTS 1.0 offers pcm_mulaw and pcm_alaw in a raw container at 8000 Hz.

Yes: Sume TTS 1.0 can return 8 kHz mu-law and A-law audio for telephony, using output_format with container: raw, encoding: pcm_mulaw or pcm_alaw and sample_rate: 8000. ElevenLabs lists the same two codecs at 8 kHz on its text-to-speech page, but also lists Opus at 48 kHz, which Sume does not.
ElevenLabs facts are from its text-to-speech page (read 2026-10-10). Sume facts are from the Sume OpenAPI contract.
The formats on each side
ElevenLabs lists MP3 at 22.05 to 44.1 kHz with 32 to 192 kbps, PCM S16LE at 16 to 44.1 kHz, mu-law and A-law at 8 kHz, and Opus at 48 kHz with 32 to 192 kbps. Sume's schema lets you choose a container (mp3, wav, raw), a sample rate from a fixed list, and for raw output an encoding.
| Need | ElevenLabs | Sume TTS 1.0 |
|---|---|---|
| 8 kHz mu-law | Listed | raw + pcm_mulaw + 8000 |
| 8 kHz A-law | Listed | raw + pcm_alaw + 8000 |
| 16 kHz PCM | Listed | raw + pcm_s16le + 16000 |
| Opus 48 kHz | Listed | Not offered |
| MP3 | 22.05 to 44.1 kHz | 8000 to 48000 Hz, 32000 to 192000 bps |
A request body for a phone prompt
A typical interactive voice response prompt is a few sentences. The body below asks for 8 kHz mu-law raw audio. Put your voice id in place of the placeholder UUID; it must be a UUID or a voi_ id.
import asyncio, os, httpx
async def main():
key = os.environ["SUME_API_KEY"]
body = {
"transcript": "Thanks for calling. Press one for support.",
"voice": {"id": "00000000-0000-0000-0000-000000000000"},
"output_format": {"container": "raw", "encoding": "pcm_mulaw",
"sample_rate": 8000},
}
async with httpx.AsyncClient(base_url="https://api.sume.com") as c:
r = await c.post("/v1/tts-1.0/generate", json=body,
headers={"Authorization": f"Bearer {key}"})
print(r.status_code, r.text[:200])
asyncio.run(main())Cost and limits for short prompts
A 45-character prompt is far below one cent of per-character cost, so the one-cent minimum per job applies. At $0.0475 per 1,000 characters, a 2,000 character script costs 9.5 cents before rounding, and Sume ceilings to whole cents, so 10 cents. The job maximum is 95 cents for a 20,000 character script.
What to check on your platform
Confirm which codec your telephony provider expects before choosing. North American carriers typically pair with mu-law and many other regions with A-law, but check your provider's documentation rather than relying on this post. Also confirm whether the provider wants a WAV header or headerless raw bytes; Sume's raw container has no header.
Sources
Related posts
More in Developers
- Exact 1080x1350 from Sume: ask for 4:5, then resize
Sume image models take an aspect ratio, not a pixel size. Ask for 4:5, check the returned size, then resize to 1080x1350 with Pillow. Which models list 4:5.
- Express 5.3 logs Error.cause: keep the Sume request_id
Express 5.3.0 prints the full error object, nested cause included. Wrap a failed Sume call so its code and request_id land in the log line you grep.
- Failed Format runs: a dead-letter table you can retry from
Keep a dead-letter table for failed Sume Format runs: run id, thread id, failure code, retry flag, and a new idempotency key, so retries stay safe.
- Sume failed job says [redacted_url]: what was removed
A [redacted_url] in a Sume job error is by design: URLs, provider ids, env names and secrets are masked, and the provider reason is capped at 300 characters.
Written by Sume