Swiss German speech-to-text
Swiss German in, clean Standard German text out, with word timings and confidence. Stream audio live for voice bots, or send recordings of any length as batch jobs.
Realtime CHF 2.20 per hour, batch CHF 1.35 per hour. Billed per second.
Realtime over WebSocket
Partial transcripts every 250 ms while the caller speaks, and the final text about 0.1 s after they stop.
Batch files and long recordings
Up to 25 MB in a single request, up to 200 MB as a job. Long recordings are transcribed at about a third of real time.
Language detection
Give up to eight candidate languages, or "auto" for German, French, Italian and English. Every result reports the language spoken.
Your own vocabulary
Up to 200 names, products and place names per request, so your terms come out right the first time.
Word timings and confidence
Every word with its start, end and confidence, ready for subtitles, search and quality checks.
Telephone audio
Works with narrow-band 8 kHz call audio as well as studio recordings. All common audio containers are accepted.
Transcribe a file
curl -X POST https://api.suisse-speech.ch/v1/stt \
-H "X-API-Key: $SUISSE_SPEECH_KEY" \
-F audio=@call.wav \
-F lang=de-CH \
-F 'vocabulary=["Rüegg", "Bircher", "Glasfaser"]'What comes back
{
"text": "Grüezi Herr Meier, wie kann ich Ihnen helfen?",
"lang": "de-CH",
"duration_s": 3.82,
"words": [
{ "w": "Grüezi", "start": 0.12, "end": 0.65, "conf": 0.98 },
{ "w": "Herr", "start": 0.70, "end": 0.95, "conf": 0.99 },
{ "w": "Meier", "start": 0.98, "end": 1.40, "conf": 0.97 }
]
}Stream live audio
import WebSocket from 'ws';
const ws = new WebSocket('wss://api.suisse-speech.ch/v1/stt/stream', {
headers: { 'X-API-Key': process.env.SUISSE_SPEECH_KEY },
});
ws.on('open', () => {
// Candidates: the spoken language is detected and reported per result.
ws.send(JSON.stringify({ type: 'config', lang: 'de-CH,fr-CH,en' }));
// Then send 16 kHz mono PCM16 as binary frames, at real-time pace,
// and finish with {"type": "audio.end"}.
});
ws.on('message', (data, isBinary) => {
if (isBinary) return;
const msg = JSON.parse(data.toString());
if (msg.type === 'transcript.partial') showLive(msg.text);
if (msg.type === 'transcript.final') answer(msg.lang, msg.text);
});How dialect becomes text
Swiss German has no standard spelling. Two people from Bern would write the same sentence in two different ways. The API therefore writes what was said in Standard German. That keeps transcripts searchable and consistent, and it is exactly what downstream language models and analytics expect. The dialect itself is not reported: which variety to answer in is up to you.
Frequently asked questions
Which audio formats can I send?
Any common container: WAV, MP3, Ogg/Opus, FLAC, AAC and raw PCM16. For the realtime stream, send 16 kHz mono PCM16.
How accurate is it on Swiss German?
That depends on your audio: microphone, line quality, background noise, vocabulary. We do not publish a single accuracy figure. Test it on your own recordings with the 60 free minutes.
Can it tell Zürich German from Bernese?
No. Recognition reports the language (for example de-CH), not the regional dialect. If you want to answer in a dialect, you choose it per deployment, line or region.
Can one conversation switch between languages?
Yes. With several candidate languages, every partial and final result carries the language of that stretch of speech, so a switch is visible as it happens.
Try it on your own audio
Get 60 free minutes of speech-to-text and text-to-speech. No credit card required.