Skip to main content

Overview

The platform telephony plane (client.telephony.*) maps your phone numbers to voice agents on backend-core’s /api/v2/platform/telephony/* surface. The primary flow is attach a number to an agent — what telephony calls the Leg-B termination (Unpod’s SuperSBC routes the inbound call through to your agent on LiveKit). You list your org’s numbers, then attach one or many to an agent. The underlying voice bridge is resolved for you (hidden) — you work with numbers and agents, not bridges.
This plane (client.telephony.*) is distinct from the Speech Stack management plane at client.numbers / client.trunks. The telephony plane is Org-Handle-scoped and requires proxy/JWT auth — it is not reachable in direct/Bearer mode.

Concepts


Authenticate

The telephony plane is org-scoped. Authenticate with a JWT and your org handle:

List Numbers

Number fields

Every verb on this plane takes the E.164 number — the internal id is not exposed.

Attach Numbers to an Agent

Map one or more numbers to an agent by E.164 number (not id — Django resolves it). The bridge is resolved automatically; each number reports its own outcome (partial-success), so one bad number never fails the rest.

Result fields

Each NumberResult:
The agent attach returns the per-number lifecycle — there is no carrier origin_endpoint. That belongs to the BYO-carrier (Leg-A) path below.

agent_id is optional

Omit agent_id to wire a number for agent use without binding an agent yet — bind one later by calling attach again with the same number and an agent_id:

Attach to a pipe instead of an agent

Pass attach_type="pipeline" with a pipe_id to terminate the number on a Speech Pipe rather than an agent. attach_type defaults to "agent".

Detach Numbers

Release numbers by E.164 number — the inverse of attach. The termination, agent, and pipe are read from the stored record. The number is released, not deleted, so it stays available for a later re-attach.

Check the Lifecycle


Bring Your Own Carrier (Leg A) — Future / Beta

Bringing your own SIP carrier (client.telephony.trunks.*) wires the Leg-A carrier leg. Today that leg is the hardcoded SuperSBC default, so this surface is future/beta — prefer the agent attach above for production. When enabled, the flow is: create a trunk, attach numbers, and point your carrier at the returned origin endpoint.

Common Patterns

Attach the first available number to an agent

Attach many numbers to one agent


Next Steps

Agents

Build the agent your numbers route to.

Numbers

Acquire and manage numbers from the dashboard.