One line of text. One line of sound. Click to hear this headline · voice en-heart · unedited API output
Text-to-speech for products that talk. German and English voices, MP3, WAV or OGG, one POST request. Hosted in Germany. Never cloned, never stored.
Try it · no account · nothing is kept
0 / 200
The demo caps at 200 characters and a few requests a minute. The API takes 5,000 characters per request.
Voices · each row spoken by that voice
Five voices, two engines. Each one is exactly what it is.
Kokoro (Apache-2.0) for English, Piper (MIT) for German. No cloning, no "make it sound like X" — that door stays closed on purpose.
Code · one request, audio back
curl -X POST https://klangzeile.com/v1/tts \ -H "Authorization: Bearer sk_live_…" \ -H "Idempotency-Key: order-4711-confirmed" \ -H "Content-Type: application/json" \ -d '{"text": "Your order is on its way.", "voice": "en-heart", "format": "mp3"}' \ -o confirmation.mp3 # response headers Content-Type: audio/mpeg X-Characters-Billed: 25
import httpx r = httpx.post("https://klangzeile.com/v1/tts", headers={"Authorization": "Bearer sk_live_…", "Idempotency-Key": "order-4711-confirmed"}, json={"text": "Your order is on its way.", "voice": "en-heart", "format": "mp3"}) r.raise_for_status() open("confirmation.mp3", "wb").write(r.content) print(r.headers["X-Characters-Billed"]) # 25
const r = await fetch("https://klangzeile.com/v1/tts", { method: "POST", headers: { Authorization: "Bearer sk_live_…", "Idempotency-Key": "order-4711-confirmed", "Content-Type": "application/json" }, body: JSON.stringify({ text: "Your order is on its way.", voice: "en-heart", format: "mp3" }) }); if (!r.ok) throw await r.json(); // RFC 7807 problem+json, with request_id const audio = new Audio(URL.createObjectURL(await r.blob())); audio.play();
X-Characters-BilledWhat this call cost, on every response. Quotas are counted in characters, nothing else.Idempotency-KeyRetry the same POST for 24 hours and get the same audio back — billed once.application/problem+jsonEvery error is RFC 7807 with a request_id you can send us.Principles
- Nothing is stored.Text in, audio out. What remains is a character count and a SHA-256 of the request — no text, no audio, no logs with content.
- No voice cloning.Five fixed voices under permissive licences. We will not build a "sound like anyone" feature.
- Hosted in Germany.Servers in Nuremberg. No third-party AI providers behind the API; the models run on our machines.
- Pinned engines.Kokoro 82M v1.0 and Piper are version-pinned by hash. The same text gives the same audio until we say otherwise.
- Limits, not surprises.When the monthly quota is used up the API answers 402. Overage is never billed.
- Boring, on purpose.Bearer keys, JSON, standard headers. Nothing to install, nothing to learn twice.
Pricing · monthly · cancel anytime · excl. VAT
free
€0 forever
- 10,000 characters a month
- 10 requests a minute
- All voices, MP3 / WAV / OGG
hobby
€9 / month
- 100,000 characters a month
- 30 requests a minute
- All voices, MP3 / WAV / OGG
pro
€49 / month
- 1,000,000 characters a month
- 120 requests a minute
- All voices, MP3 / WAV / OGG
Need more than a million characters, or an invoice instead of a card? Write to us.