Before your first call routes to your agent, complete these four steps once.
1. Pick a Voice Profile
Copy a profile_id (vp_...) for step 2. See
Voice Profiles for filtering and fields.
2. Create an Agent
agent_id is a string you choose, and it must match everywhere.The agent_id you pass here must exactly match AgentRunner(agent_id=...) in
step 4. Mismatching them is the most common first-run failure - the call arrives
and no runner claims it.
Other options (greeting, recording, max_call_duration_s, max_concurrent)
and the other three brain sources are in Agents.
3. Attach a Phone Number
Numbers attach to an agent_id, not to a pipe id.
client.numbers.attach() used to take pipe_id=. It takes agent_id now -
supervoice resolves the pipe from the agent. client.agents.numbers.attach(agent_id, number)
does the same thing keyed by the E.164 number instead of the id.
No numbers yet, or bringing your own carrier? See
Phone Numbers and Trunks.
4. Start Your Runner
Full Setup Script
Then start your runner in a separate process:
Environment Variables
Which URL setting to use
UNPOD_BASE_URL - management API and runner share one host.
UNPOD_SERVICE_BASE_URL - management REST override only.
UNPOD_ORCHESTRATOR_URL - runner WebSocket override only.
base_url= / orchestrator_base_url= in code - one script or test overrides .env.
Production values and the serve-transport extras: Deploy.