klangzeile
Menu

Text to speech · Speech to text · EU-hosted

Text becomes voice. Voice becomes text.

Press Enter to hear a line spoken by the klangzeile API.

Five voices for your product, and protocols of every conversation: speakers, summary, subtitles, translation. One API. Servers in the EU; results deleted after one fetch.

36 / 200 charactersNo account · nothing is kept · 6 tries a minute

Voices · tap to listen

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.

Protocol · two real recordings, unedited API output

From a recording to a protocol.

One request to POST /v1/transcriptions — speakers, word timestamps and a translation switched on — and this is the answer, byte for byte. Scroll down: each step is one part of it. Pick the English or the German interview.

01 · Audio

A recording goes in.

A meeting, an interview, a voice memo — German or English, up to three hours per file. This one went in exactly as it is.

7:14 min · German · 8 minutes billed

02 · Transcript

Every word, with its time.

Segments with start and end — and with timestamps=word, every single word. Press play: the text follows the audio.

Ja, hallo und herzlich willkommen zu einer weiteren Ausgabe vom Flying Circus TV.
03 · Speakers

Who said what.

Voices come back as S1, S2 — the API never guesses a name. You assign them when you fetch the result: GET …?speaker_names=S1:Host,S2:Guest.

S1 42 % · S2 58 % of the talking

04 · Summary

The gist, in fields.

Title, abstract, outline, decisions and open points — structured JSON, ready for your own template.

Interview with Maria Spilka from Mädchenflohmarkt.de on Startup Experiences and Female Foundership

05 · Translation

And in the other language.

translate=en or translate=de adds one translated segment for every original one, with the same timing.

Yes, hello and welcome to another episode of Flying Circus TV.
06 · Subtitles

Subtitles, ready to use.

SRT and VTT, cut from the word timestamps: short lines, two per cue at most. These are the real files of this run.

1
00:00:04,400 --> 00:00:07,300
S1: Ja, hallo und herzlich willkommen zu
einer weiteren Ausgabe vom Flying Circus
07 · Glossary

Names spelled right.

Terms you keep in your dashboard glossary — or send as vocabulary — go with every transcription, by API or by e-mail. The same sentence, without and with them:

  • Mädchenflohmarkt
  • Flying Circus TV

Without glossaryDa stand, Mädchenflomag startet demnächst hier, meldet euch doch schon mal an.

With glossaryDa stand, Mädchenflohmarkt startet demnächst hier, meldet euch doch schon mal an.

Speakers come back as S1, S2; nothing here was edited. Recording: Gründerin Maria Spilka im Gespräch mit Tobias Kollmann, zoomm.me / Flying Circus TV, CC BY. 434 s of audio → transcript, speakers, summary, word timestamps and the English translation, 8 minutes billed. Data: interview.json, audio: interview.mp3.

Or just send it by e-mail. Switch on "Protocol by e-mail" in your dashboard, then mail a recording to protokoll@klangzeile.com.

Attach the recording — mp3, m4a, wav, ogg … up to 25 MB per mail (about 18 MB of audio, roughly 40 minutes of a voice memo) — and send it from the address on your account. "en" or "de" in the subject asks for a translation.

A few minutes later one mail comes back: "Your protocol is ready (7:14 min) · Dein Protokoll ist fertig". It carries a link, never the transcript. Billed like the API, minute by minute.

The link shows summary, speakers and downloads (text, SRT, VTT) — opened once, then deleted on our side. Save what you need.

Speech to text · your voice

Your turn. Say something.

Record up to 10 seconds. It goes to our EU transcription, comes back as text with a speaker label and a one-line summary, and is deleted right after.

No microphone at hand? Send a file instead — the quickstart has it running in two minutes.

Record with your microphone?

Record up to 10 seconds. It goes to our EU transcription, comes back as text with a speaker label and a one-line summary, and is deleted right after. Privacy

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. Usage is counted in characters, nothing else.
Idempotency-KeyRetry the same POST within 24 hours and it is billed once — the audio is generated again, not cached.
application/problem+jsonEvery error is RFC 7807 with a request_id you can send us.
MCPFor AI agents: the same API as tools in Claude, Cursor and VS Code — set it up.
Protocol · audio in, transcript and summary out

Listen, transcribe, summarize.

Upload a recording — a meeting, an interview, a voice memo — and get the transcript back with timestamps, speaker labels on request, plus a structured summary: title, abstract, outline, decisions, open points. German and English. Up to three hours per file; an hour of audio is back in about two minutes. Word timestamps and SRT/VTT subtitles on request. Translation de↔en on request.

curl -X POST https://klangzeile.com/v1/transcriptions \
  -H "Authorization: Bearer $KEY" \
  -F "file=@meeting.mp3" -F "language=de" -F "summary=true" \
  -F "speakers=true" -F "vocabulary=Mädchenflohmarkt,Flying Circus TV"
# → 202 {"id": "tr_…", "status": "queued", "duration_seconds": 1834, …}

curl "https://klangzeile.com/v1/transcriptions/tr_…?speaker_names=S1:Host,S2:Guest" \
  -H "Authorization: Bearer $KEY"
# → 200 {"status": "done", "text": "…",
#        "segments": [{"start": 0.0, "end": 4.2, "text": "…", "speaker": "Host"}],
#        "dialogue": "Host: …\nGuest: …", "speaker_count": 2,
#        "summary": {"title": "…", "abstract": "…", "outline": [], "decisions": [], "open_points": []},
#        "minutes_billed": 31}

Poll GET or pass webhook_url and we call you when it is done — the webhook is a notification only: it carries the job id and status, never the transcript, and it is unauthenticated, so always fetch the result with GET /v1/transcriptions/{id} and your API key (signature verification is a documented follow-up). The result is delivered once: the first successful GET deletes it from our side; unread results expire after 24 hours. Billing is per started minute of audio, at the moment the job finishes — a failed job costs nothing. Speech-to-text, speaker labels and the summary are produced by Mistral AI in the EU under a zero-data-retention agreement: audio and transcript are used to answer your request and are not stored there. Speakers come back as S1, S2, …; GET …/speakers shows who said what first, then fetch the result with speaker_names=S1:Anna to have the labels replaced — we never guess a name.

Principles
  • Deleted after one fetch.Text in, audio out — nothing remains but a count and a SHA-256 of the request. Uploaded recordings live in memory only — never on disk — until they are handed to the transcription engine; the transcript is stored encrypted only until you fetch it (24 h at most), then both are gone.
  • No voice cloning.Five fixed voices under permissive licences. We will not build a "sound like anyone" feature.
  • Hosted in the EU.Servers in Nuremberg. Voices run on our own infrastructure; speech-to-text and summaries run at Mistral AI in the EU under zero data retention — audio and text are processed for your request and not kept.
  • 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 free monthly allowance and any credit run out the API answers 402. Nothing beyond what you have is ever billed.
  • Boring, on purpose.Bearer keys, JSON, standard headers. Nothing to install, nothing to learn twice.
Pricing · pay as you go · no subscription · no VAT charged (§ 19 UStG, German small-business rule)
Free
  • 10,000 characters a month
  • 30 minutes a month
Start free
Prices
  • €0.01 per 1,000 characters
  • €0.025 per minute (€1.50 per hour)
Credit
  • Credit from €10.00
  • no subscription · no term
Top up

Need more than the free allowance, or an invoice instead of a card? Write to us.