Video live interpretation model
Live interpretation is the spoken interpreter channel for a video room: a per-language audio track a participant listens to while a speaker is interpreted aloud into their language — the audio analog of the translated caption line. This page is the model behindPOST /api/v1/video/interpretation. The room itself is covered in
The video room model; here we cover the
interpretation surface.
What live interpretation is — and what it is not
Two video translation surfaces exist, and they are easy to conflate:
Live interpretation handles exactly two things per call: it interprets one
finalized caption/STT utterance from the speaker’s language into the
channel’s language, and it returns the spoken-ready line. It does not
place calls, send messages, or wire any outbound media — the only network
hop is one text machine-translation call (see the scope note at the end).
Topology: one interpretation audio track per language
Each interpretation channel is a dedicated LiveKit audio track inside the room the participant has already joined. The speaker’s own microphone track is untouched; the interpreter channel is an additional audio track that carries the interpreted speech. A participant chooses which channel — and therefore whichtarget_language — they listen to, and the room can carry
several channels at once (one per supported language in use). Because the
track lives inside the LiveKit room, listeners need no extra connection; a
client joins the room and publishes/subscribes to the interpretation track
with the same join-token flow the room model page describes.
Request flow: utterance → interpret → TTS handoff
One interpreted line moves through six steps:- Finalized utterance — the caption/STT pipeline (browser → Deepgram → LiveKit data channel) emits a final caption segment. Interpretation runs on finalized segments only, so partials never reach the server.
- POST
/video/interpretation— the speaker’s client posts the utterance text,source_language(the speaker’s caption language), andtarget_language(the interpretation channel’s language). An optionalspeaker_namelabel may accompany them for display attribution. - Validate — the body is validated against a strict schema. Language
values outside the whitelist are rejected with a
400 INVALID_LANGUAGE(see below); any other validation failure is400 INVALID_REQUEST. - Direction resolution — the server decides whether interpretation is
needed. When
source_languageequalstarget_language, it returns immediately withinterpreted: falseand echoes the original text — no LLM call is made (see the short-circuit below). - Interpret — the utterance goes through the platform’s LLM-spend plumbing, using the configured fast model and a spoken-language prompt (numbers, URLs, and names kept verbatim; nothing added or omitted). The spend is metered to your tenant wallet and passes the same daily-cap. and rate gates as every other AI translation surface.
- TTS handoff — the response carries
interpreted: trueplustranslated_textand the model id. Your client handstranslated_textto text-to-speech and publishes the audio onto the interpretation channel’s LiveKit track.speaker_nameis echoed back so the client can attribute the line on the channel (for example, “[interpreting Amira]”).
Language whitelist and the 400-on-unsupported contract
Bothsource_language and target_language are closed enums — the same
whitelist the broadcast-captions translation surface uses, so the two
translation surfaces can never drift to different supported sets:
400
with error.code: INVALID_LANGUAGE and a message listing the supported
set; any other body-validation failure gets 400 INVALID_REQUEST. This
closed whitelist exists on purpose: it keeps the billable LLM-spend surface
auditable, and it rejects a wrong value loudly instead of spending on it.
Deepgram’s code-switching multi transcription sentinel is deliberately
excluded — it is a valid transcription input mode, not a real language
you can interpret into.
Same-language short-circuit before any LLM spend
When the speaker already speaks the channel’s language (source_language == target_language), the server never calls the model.
It responds interpreted: false with the original text echoed in both
source_text and translated_text and model: null, so your client can
pass the original audio straight through — and no interpretation charge
accrued. Check interpreted on every response: when it is false, skip
TTS and leave the speaker’s own audio untouched.
Authentication, scopes, and rate limits
The endpoint sits under the same auth envelope as every video route:- Any valid API key needs
video:readorvideo:writeto reach it. - The interpret verb itself layers
video:writeplus theowner,admin, ordeveloperrole — a read-only key can discover the surface (and see 403/503 envelopes) but cannot burn billable LLM spend. - The endpoint is rate-limited under the authenticated-write bucket, the same budget other mutating video routes share.
Privacy posture: length-only logging
Spoken content in a meeting can carry PII, so the interpretation surface deliberately records as little as possible. The audit event written per interpretation stores the source and target language, the model id, and the source text length only — never the utterance text itself, andspeaker_name is never audited. That is enough for your SOC team to
reconcile an LLM-spend spike to interpretation volume without retaining
meeting content. The interpret service and its log hold the same posture:
no utterance text is persisted anywhere on this surface.
Audit and deletion notes
Each interpretation emits onevideo_room.interpreted audit event
(resource video_interpretation) carrying the language pair, the model
id, and the source character count. Because interpretation is stateless,
there is no per-line interpretation record to delete: retention and
deletion of actual meeting content belong to the post-meeting transcript
and summary pipeline, which owns the durable record. Deleting a room’s
session or transcripts through the normal retention sweep removes the
meeting record without touching interpretation audit entries, which were
always content-free.
Scope note: no outbound media leg
Live interpretation is text machine-translation only. It places no call, sends no message, and wires no outbound media provider; the interpreted audio is rendered client-side onto a LiveKit track inside the room the participant already joined. Orbit routes all outbound call and message termination through its own softswitch — the interpretation surface touches none of that by design.Related
The video room model
The room lifecycle, join tokens, recording and broadcast, analytics,
QA scoring — the surface interpretation runs inside.
Avatar bot dispatch queue
How in-room bot participants are dispatched — the queue that carries a
persona into the same LiveKit room model.
Transcript-verified video-only gate
How Orbit gates video publishing in audio-only rooms.
Video API reference
The endpoint-by-endpoint contract this model is implemented by.