client_secret your browser uses to open a /v3/realtime WebSocket. Browsers can’t set an Authorization header on a WebSocket constructor, so this endpoint exists to bridge the gap: the customer’s backend authenticates with its normal API key, optionally pre-binds session config fields, and returns the ticket to the browser.
See the Realtime voice guide for the end-to-end flow.
Authentication
Standard bearer auth with a project-scoped runtime API key. Management keys (opmak-…) are rejected.
Request body
Pre-binding
Bound fields win over whatever the browser sends — this is the safety guarantee tickets provide. Recommended minimum binding:model. Tighter setups also bind instructions, tools, and voice.
Response
Errors
Redemption
The browser presents the ticket on the WebSocket upgrade. Two transports are accepted; prefer the subprotocol header — credentials in the URL query string end up in access logs, browser history, andReferer headers, while the subprotocol header is request-only.
Recommended (subprotocol header):
401.
See also
- Realtime protocol — full WebSocket event vocabulary.
- Realtime voice guide — pre-binding, lifecycle, billing.