Create a widget voice session
Mints short-lived credentials for a browser voice conversation with the widget’s agent: a signed
WebSocket URL, and when available a WebRTC conversation token (preferred, for echo cancellation and
noise removal; fall back to signed_url if WebRTC cannot connect). Only for widgets with
voice_enabled: true. No request body; call it per click and do not cache the result.
Credentials, origin check and limits are the same as POST /widget/init. It does not need a session.
Side effects. Calls the voice engine to mint the credentials for the agent’s voice profile. Minting records no usage by itself; the voice conversation that follows runs on the widget’s agent.
Idempotency. Each call mints fresh credentials; retrying is harmless, and unused URLs expire.
Access
- Required scope: None;
jl_API keys are not used. The widget credential plus a matchingx-widget-parent-originauthorise the call. - Rate limit: Widget public — 60 requests/min per IP, plus the widget’s
rate_limit_rpmper credential and 300 requests/min per workspace. See Rate limits. - Plan: Available on every plan.
Headers
Secret widget API key (plaintext_api_key from POST /api/widgets). Takes precedence over
x-widget-id and wid. Send one of the three. Never expose it in a browser.
Public widget id, the credential the embed script uses. Used when x-widget-api-key is absent.
Origin of the page embedding the widget. Must match one of the widget’s allowed_origins; see POST /widget/init.

