Returns a single-use 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 (op-mak-…) 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, and Referer headers, while the subprotocol header is request-only.
Recommended (subprotocol header):
Fallback (query parameter) — only for environments that can’t set a subprotocol:
Replays return 401.
See also
Last modified on August 28, 2026