Web Call
Mint a LiveKit access token + auto-dispatch directive for a browser call.
The browser passes the returned access_token to livekit-client's connect(livekit_url, access_token). LiveKit creates the room and auto-dispatches the voice-worker into it. The selected agent-or-team binding is JWT-signed and tamper-proof. A single-agent call uses the agent's active revision, or assistant_revision_id when the caller pins a draft; a team call pins the current active team revision and its roster. An unpinned member still follows that member's active assistant revision when the call's turn plan resolves. The session is created with session_type="test" so post-processing is gated by test_features (see src.conversation.test_features).
This route is reachable by an org-scoped API key (unlike /test-chat, which is dashboard/Clerk-only) — it depends only on Permission.RUNTIME_EXECUTE. So identity resolution + policy is resolved HERE, in the router, rather than in the voice service, which is deliberately auth-free: resolve_test_features raises ValidationError (422) up front for a bad/team-incompatible request, and select_test_session_end_user raises ValidationError (422) when identity_resolution=true and the caller (e.g. an API key) has no clerk_user_id — both short-circuit before any LiveKit work.
Request body
Response
Successful Response