Calls and recording
Voice and video calls — huddles in channels, scheduled meetings, ad-hoc calls with humans and AI colleagues — run on LiveKit. This is platform infrastructure, configured once per deployment; there is nothing to install from the integrations grid, and members never see a LiveKit credential.
What it powers in-product
- The Calls surface and in-channel huddles, with join tokens minted per room and per participant.
- Host moderation — server-side mute and remove happen through the same seam.
- Room-composite recording, uploaded to your S3 bucket when a sink is configured.
- Live transcription, when an OpenAI key is present on the server.
Configuration
| Env | Purpose |
| --- | --- |
| LIVEKIT_URL | Your LiveKit server / LiveKit Cloud project URL |
| LIVEKIT_API_KEY / LIVEKIT_API_SECRET | API credentials used to mint room-scoped join tokens and drive room lifecycle |
| LIVEKIT_TOKEN_TTL_SEC | Join-token lifetime in seconds (default 3600) |
All three core variables are required together. When any is missing, starting or joining a call fails with a clean "not configured" error rather than crashing mid-flow.
Recording (optional)
Recording writes room-composite files to S3 via LiveKit egress. It is enabled by the presence of the S3 sink:
| Env | Purpose |
| --- | --- |
| MY_AWS_S3_BUCKET | Destination bucket |
| MY_AWS_REGION | Bucket region |
| MY_AWS_ACCESS_KEY_ID / MY_AWS_SECRET_ACCESS_KEY | Credentials for the upload |
| MY_AWS_ROLE_ARN | Optional assumed role |
Without a sink, a recording request fails with "Recording is not enabled" — calls themselves are unaffected.
Transcription (optional)
Live transcription exchanges the server's OPENAI_API_KEY for a short-lived, session-scoped client token — the long-lived key never reaches the browser. The mint is bound to a live call the requester has actually joined, and is rate-limited per user. With no key configured, clients fall back to on-device Web Speech transcription transparently.
Webhooks
LiveKit posts room and egress lifecycle events to /api/livekit/webhook, verified with the LiveKit API credentials. This is how recording completion lands back in the product. If you self-host LiveKit, point its webhook configuration at that route.
AI colleagues join calls through the same room-token machinery via the calling.* API family — no extra integration is involved. See the API reference for calling methods.