Skip to main content
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 (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, 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