# Interpreter API

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

The Interpreter API translates one live source-language audio stream into a target language over WebSocket. It returns translated text and synthesized speech, with optional source-language transcription.

Use the Interpreter API for multilingual meetings, live events, virtual classrooms, and customer-support experiences.

## Key features

-   Translates live speech continuously and returns translated text and synthesized speech as you stream
-   Returns optional source-language transcription
-   Returns final text and audio that are never revised
-   Supports nine languages as source or target, with a female and a male voice for each target language
-   Uses one source language, one target language, and one voice per connection

## How it works

1. Connect to the Interpreter WebSocket endpoint with the required `interpreter.zoom.v1` subprotocol.
2. Send `session.update` as the first client event to select the source language, target language, and voice.
3. Wait for `session.updated`, then stream Base64-encoded PCM audio in `session.input_audio_buffer.append` events.
4. Receive translated text, translated audio, and the optional source transcript while you stream.
5. Send `session.close` after the last audio chunk, and keep receiving until `session.closed` arrives.

For connection details, event schemas, and a JavaScript example, see [Live mode](/docs/ai-services/interpreter/live-mode/).

## Languages and voices

Set `session.audio.input.language` and `session.audio.output.language` to different BCP-47 language tags, and set `session.audio.output.voice` to a voice that supports the target language. All three fields are required and have no default.

The Interpreter API supports the following languages as source or target languages. Automatic source-language detection and multiple target languages per connection aren't supported.

| Language tag | Language   |
| ------------ | ---------- |
| `en-US`      | English    |
| `ar-AE`      | Arabic     |
| `de-DE`      | German     |
| `es-ES`      | Spanish    |
| `fr-FR`      | French     |
| `it-IT`      | Italian    |
| `ja-JP`      | Japanese   |
| `pt-PT`      | Portuguese |
| `zh-CN`      | Chinese    |

Language tags are case-insensitive, and `session.updated` returns them in normalized form.

Each target language has one female and one male voice. Set `session.audio.output.voice` to one of the voices listed for the target language.

| Target language | Voice IDs          |
| --------------- | ------------------ |
| `en-US`         | `sarah`, `cole`    |
| `ar-AE`         | `layla`, `omar`    |
| `de-DE`         | `helena`, `felix`  |
| `es-ES`         | `sofia`, `carlos`  |
| `fr-FR`         | `camille`, `marc`  |
| `it-IT`         | `elena`, `luca`    |
| `ja-JP`         | `hana`, `kenji`    |
| `pt-PT`         | `beatriz`, `tiago` |
| `zh-CN`         | `lin`, `bo`        |

Voice IDs are case-insensitive: `Sofia`, `SOFIA`, and `sofia` select the same voice, and `session.updated` returns the lowercase value. To translate English to Spanish, use `en-US` as the source language, `es-ES` as the target language, and `sofia` as the voice. To change the configuration, open a new connection.

## Audio format and limits

Input and output audio use the same fixed format. Convert audio to this format before sending it; the API doesn't resample input.

| Setting           | Value                                                                                                                         |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Encoding          | `pcm_s16le`: signed 16-bit little-endian PCM                                                                                  |
| Sample rate       | 16,000 Hz                                                                                                                     |
| Channels          | Mono                                                                                                                          |
| Container         | None; no WAV or RIFF header                                                                                                   |
| Wire format       | Base64 within JSON text events                                                                                                |
| Audio per message | 100–200 ms recommended (3,200–6,400 bytes); 500 ms (16,000 bytes) maximum, before Base64 encoding, in complete 16-bit samples |

A session lasts up to 120 minutes and closes after 30 seconds without a message from the client. Your account can have lower limits. For details, see [Session limits](/docs/ai-services/interpreter/live-mode/#session-limits).

## Resources

AI Services are part of the [Zoom Build platform](/docs/build/). Use [Zoom.ai](https://zoom.ai/) to discover, purchase, build with, and manage AI Services products. You can also create projects, get credentials, start a free trial, purchase a plan, and monitor usage.
