This is the shortest path from zero to a voice agent that talks to a real caller. On managed cloud, ClutchCall runs the media engine, the SIP trunking edge, and the agent runtime for you. You get an API key and make one call. In a few minutes you will have one of two results: an AI agent that phones a number over the PSTN, or a click-to-talk voice agent in the browser.
Managed cloud is a single production environment. There is no separate sandbox tenant. Test against your own numbers and a low-volume trunk before you scale up. If you need an isolated stack, see On-Prem / Self-Hosted.

Before you start

1

Create a workspace and API key

Sign in at portal.clutchcall.dev. Create (or pick) a workspace. Mint an API key under Settings → API keys. Keep the key server-side. This key can originate calls and read call data.Your workspace automatically gets a per-tenant SIP edge (<workspace-id>.sip.clutchcall.dev) and a browser media endpoint (<workspace-id>.webrtc.clutchcall.dev).
2

Configure a trunk and a number (for phone calls)

In the voice console at agent.clutchcall.dev, add an outbound SIP trunk. Claim or bring a phone number. Note the trunk id. You pass it as trunkId. Skip this step if you only want the browser agent below.
3

Build an agent

Still in agent.clutchcall.dev, create a voice agent:
  1. Pick a speech-to-speech or ASR→LLM→TTS provider.
  2. Give the agent a system prompt.
  3. Note the agent’s id (e.g. appointment-reminder).
You reference the agent by id when you originate. See Build a voice agent for the full walkthrough.

Install the SDK

Put your key in the environment, so it never lands in source:

Path A — an AI agent on a phone call

Originate an outbound call and attach a server-side agent. When the callee answers, the engine connects the audio bridge to your agent automatically. Your process never touches the media. This is the whole app.
1

Originate with an agent attached

Pass agent to originate(). The engine attaches the runtime on answer.
2

Wait for connect or failure

The control plane is request/response. Poll calls.get() until the call leaves the ringing states.
The agent drives both legs of the conversation. Turn-taking, barge-in, and tool calls all run server-side. Tune that behavior in Turn detection and Tool calling.

Path B — a browser voice agent

This path needs no phone number. Capture the mic in the browser. Publish the audio as encoded Opus. Play the agent’s reply back. Media rides QUIC end to end, so this path has no WebRTC transport and no SFU. Use a browser-scoped key (minted in the console with browser origin restrictions). Never use your server key.
1

Originate a browser-legged call

Get a sid from the control plane.
2

Start playback

Create and start() an OpusPlayer for the downlink.
3

Attach as the caller

attachCaller() subscribes downlink and publishes uplink.
4

Capture the mic

captureMicrophone() forwards encoded frames onto the uplink.
captureMicrophone runs the browser’s own echo-cancellation, gain control, and noise suppression. It then diverts the encoded Opus frames onto the uplink track. Raw PCM never crosses the wire. This works today in Chromium-based browsers. Safari and UDP-blocked networks fall back to a WebSocket/WebRTC media leg. See Browser compatibility.

Next steps

Build a voice agent

Prompt, providers, and tools for the agent that you attached above.

Recipes

End-to-end worked examples: outbound sales, browser agent, human handoff.

Calls API

Full signatures for originate, get, transfer, and hangup.

Outbound telephony

Trunks, numbers, and the dialer behind Path A.