Skip to main content
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.