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.

Agents on calls

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.