End-to-end encryption

How E2EE rooms and their keys work.

E2EE is available on every plan. An end-to-end-encrypted room is opaque to the server side: media cannot be recorded, streamed, or transcribed, and server-side AI features refuse to start. Requesting recording or AI features together with enableE2EE at room create is rejected as a caller bug.

Pass the key in the URL fragment

The encryption key rides the URL fragment (fragments are never sent to any server, so the key stays between you and the participant's browser):

…/join?token=…&url=…#e2ee_key=<base64url-key>

The fragment parameter is named exactly e2ee_key (#e2ee= is also accepted — an earlier revision of this guide documented that name).

Because the platform never sees the key, it can never be part of a server-composed URL — append it to the returned joinUrl yourself.

The hosted page enforces the gate

If the room has enableE2EE: true and you omit the key, the hosted page refuses to join and says the key is missing, rather than connecting you to an encrypted room in the clear where you would be unintelligible to everyone.

Embedding caveat

When embedding /join in an iframe, the parent page must not strip the URL fragment, or E2EE rooms lose their key.

On this page