Skip to main content
POST
Start a live voice call between a browser and an agent. The browser creates a WebRTC offer (an SDP string); you send it here and get back an answer that the browser uses to finish connecting. The response is 201 Created with the call and the answer.
Send the offer from your server, never from the browser. The request needs your API key (scope agents). Have your frontend send the offer to your backend, call this endpoint from there, and return only the answer and the call id to the browser.
Costs: AI credits for speech, LLM and memory, like a phone call. No Dialer balance or phone line is used. The workspace must have an active plan.

Request

Headers

string
required
Bearer token with your API key (scope agents)
string
required
application/json

Path

string
required
The agent id (UUID)

Body

string
required
The finished SDP offer from the browser, 1 to 32,768 characters, starting with v=0. It must contain an audio track and a data channel, and ICE gathering must be complete (wait for iceGatheringState === "complete" before reading localDescription)

Response

201 Created
The call is trimmed above; see Get call for every field. Pass answer to RTCPeerConnection.setRemoteDescription({ type: "answer", sdp }). The call moves to in_progress when the browser connects, and finishes with the usual call.completed event. Browser calls are not shown by polling the runtime, so use Get call or the events.

Limits

  • Up to 3 browser calls at once per workspace.
  • A call lasts up to 5 minutes.
  • No call transfer and no keypad (DTMF). Audio is phone quality.

Errors

Example