Skip to main content
client.pipes is deprecated. Every method now raises a DeprecationWarning naming client.agents.voice as the replacement. New code should use Agents - one agent_id, one brain, N voices. Pipes and agents write the same rows, so nothing you already created is lost.

Why It Changed

A Speech Pipe bundled five concerns into one row: a voice, an agent_id, a recording flag, a duration cap, and a fallback URL. The agent model separates them: That last row also changed a signature: client.numbers.attach() no longer takes pipe_id - it takes agent_id. Supervoice stopped storing the pipe pin and resolves the pipe from the agent instead.

Migration

client.sessions.create_token(pipe_id=...) is unchanged - browser sessions still mint a token against a pipe id. See Browser & WebSocket.

Reference (existing code)

Kept for code that has not migrated yet. create / get / list / update / delete all still work and all warn.

Pipe fields

Deleting a pipe does not automatically detach phone numbers. Detach them first to avoid orphaned routing.

How a Call Reaches Your Brain

Unchanged by the rename, and it applies to a Runner() brain today. The platform never calls your brain over HTTP. On every call the orchestrator dispatches the session to a worker, and the worker connects to your AgentRunner over a WebSocket bridge (text in / text out). Under the default dial_out transport the runner never listens - it registers, then dials out to a per-call bridge when a call is assigned. The orchestrator picks a registered, least-loaded runner per call, and you never expose a URL, a tunnel, or a webhook. See AgentRunner. The legacy serve transport - where the runner serves a fixed wss:// URL set as the pipe’s agent_endpoint - is deprecated. It is a WebSocket URL, not an HTTP webhook: the orchestrator does not POST to it.

Bridging a Remote HTTP Brain

Two ways, depending on who initiates: Unpod calls you - the Endpoint brain, no process of yours to run:
That endpoint must be OpenAI-compatible chat completions. Your runner calls you - the HTTPAdapter, if your API is not OpenAI-shaped:
Streaming, assist(), and error surfaces: Adapters.

Next Steps

Agents

The surface that replaces this one - brain union, voices, numbers.

AgentRunner & Sessions

Run the worker a Runner() brain points at.