Skip to main content
This is the shortest path to a working voice loop. Pick the tab that matches where your code runs, copy the snippet, and swap in your API key. For the full protocol (events, config fields, per-provider notes, billing, transcription, tool flow), see the Realtime protocol.

Run your first session

1

Get an API key

Create a project-scoped runtime API key in the Opper dashboard.
2

Open a session

Server-side clients connect directly with a bearer token. This is the quickest way to check that the endpoint works.
3

Watch the events

On a successful open:
From here, stream audio in with audio.append (base64-encoded PCM16 at input_sample_rate), and the assistant’s audio comes back in audio.delta frames at output_sample_rate. If a tool fires you get a tool.call and reply with tool.result. When the session ends you get session.terminating followed by a clean WebSocket close.

Switch providers

The protocol is the same across providers. Change one string: See Per-provider notes for voice lists and quirks.

What’s next

Realtime protocol

Every config field, event, and per-provider note.

Models

The full list of supported realtime model IDs.

Mint endpoint

POST /v3/realtime-sessions request and response schema.

Cookbook example

A complete browser voice app with microphone capture and tool calls.