Skip to main content
The DeepL Voice API transcribes and translates spoken audio in real time over a WebSocket connection. Within a single streaming session, you can:
  • Send one audio stream
  • Receive transcripts in the source language
  • Receive translations in multiple target languages
  • Receive translated speech
Speech-to-text (real-time transcription and text translation) and speech-to-speech (translated TTS output) are available to all customers with a paid DeepL API subscription.The provisions applying to DeepL API Enterprise subscriptions also apply to Voice API speech-to-text, with additions to the Terms and Conditions, Service Specification, and Data Processing Agreement (new sub-processors have been added to serve specific languages).

Start here

Real-Time Voice Quickstart

Create a session, stream audio over WebSocket, and handle reconnections, with a complete Python example.

Understanding Voice Sessions

Understand the session flow, token lifecycle, and how audio and results are delivered.

Message Encoding

Choose between JSON and MessagePack for WebSocket messages.

Supported Voice Languages

Check transcription, translation, and translated speech availability per language.

Voice API Requirements

Check supported audio codecs and containers, chunk sizes, and session limits.

API reference

Full request, message, and response schemas for the Voice API endpoints.

Customization

Two optional features let you tailor transcription and translation to your domain:

Glossaries in realtime Voice

Because Voice translates in real time, glossary terms are matched against the source transcription as it’s produced, not against a complete text as in batch text translation. The transcription arrives incrementally, so a glossary term is applied only when its full source term appears in the streamed transcription. This matters most for multi-word glossary terms. Since the source is transcribed piece by piece, a multi-word term is matched only when its words are transcribed together. In most cases they are, and the term is applied, but a term whose words are concluded across separate transcription segments can occasionally be missed, and the longer the term, the higher that chance. Single-word terms aren’t affected in the same way. This is inherent to streaming transcription, not a temporary limitation. For languages written without spaces between words, such as Japanese, Chinese, and Thai, the transcription also determines where each term begins and ends, so a glossary’s source term must correspond to what the transcription produces. Each glossary must contain a dictionary for the session’s source and target language pair. If the source language is detected rather than fixed, and it resolves to a language a glossary has no dictionary for, that glossary isn’t applied.

Code examples

A reference implementation in Python is available in the DeepL Python library repository. The official DeepL SDKs don’t integrate the Voice API yet, but you can use any WebSocket client library to interact with it.