Register Call
Mint a short-lived, single-use access token for opening a realtime Agent WebSocket connection. This is the recommended way to start a session from a browser or other client-side app: your API key stays server-side, and the browser only ever sees the short-lived token. (Server-side or trusted clients may instead connect to the WebSocket with a raw API key directly.)
Flow:
- Call this endpoint with your API key and the
agent_id(plus optionalmodeand per-callvariables). All session configuration is fixed here — it is baked into the returned token. - Open a WebSocket to
wss://api.smallest.ai/atoms/v1/agent/connect?token=<access_token>. Noagent_id,mode, orvariablesquery params are needed on the WebSocket — they come from the token.
The token is valid for expires_in seconds (30) and can be used for a
single connection. Request a fresh token for each connection.
Authentication
API key from the console ApiKey collection, sent as Bearer token. Also accepts session cookies for browser-based auth.
Request
Session mode. webcall = full voice pipeline (audio in +
audio out). chat = text-only pipeline. Defaults to webcall.
The format you will send, as one <encoding>_<rate> token
naming both the encoding and the rate. Defaults to PCM at the
output rate, so a client sending only sample_rate needs
nothing else.
The recogniser is configured at this rate and your audio is not resampled, so the token must match the bytes you send: a mismatch produces wrong transcripts and no error. G.711 exists only at 8000. Opus is raw packets, one per WebSocket message; Ogg-framed Opus is a different format and is refused.
A browser client can also declare this later, on the connect
URL, once its AudioContext reports the rate it actually got.
The format the agent sends back. Same token shape as
input_audio_format. Sending this together with sample_rate
is allowed only if they agree; disagreeing values are refused
rather than resolved by a precedence rule.
Per-call prompt variables that override the agent's
defaultVariables for this session only. Values must be
string, number, or boolean. Reserved system-variable
keys (call_id, conversation_type, agent_number,
user_number, current_date, current_time, current_day,
agent_gender, default_language, supported_languages,
timezone) are populated by the server and stripped if
supplied.
Deprecated. Use output_audio_format instead. Still
accepted, and will keep being accepted - existing
integrations do not need to change.
A bare rate meaning PCM at that rate, so sample_rate: 24000
and output_audio_format: "pcm_24000" are the same request.
It predates the one-token-per-direction contract and is the
reason two fields exist for one thing. 44100 is only rendered by the
lightning-v3.1 and lightning-v3.1-pro voices; asking for a
rate the agent's voice cannot render is refused here rather
than failing mid-call. This does not set the rate of the
audio you send - use input_audio_format.