The Spine
The Four Layers
The Components
Each component has its own page under Core Engine, opening with the same mental model listed here.
Statuses vary by component: the Calling Engine, Agent Workforce, Outcomes,
and Teams & Policies carry production traffic today; Conversations and
Flows & Journeys are in build; the Context Graph is early access. Each
linked page carries its own status line.
The rest of this page is the speech stack - the Calling Engine’s developer
surface, and the part of Unpod a Python dev builds against first. The rule
that explains it is SuperDialog’s defining rule:
the wire carries text, not audio - you own the brain. Unpod owns the
phone call, the speech, and the carriers. You own the brain that decides what
to say. That rule is SuperDialog’s, not the whole platform’s - a WhatsApp or
email agent never touches audio in the first place - but the text/audio split
still governs everything the speech stack hands your code: text in, text out.
Use It Like a Model
Train an agent on your use case, then use it like a model - a playbook + any third-party model, or - in early access - a small model trained on your workflows (Intelligence), over whichever surface fits your stack:
Not sure which? Getting Started.
Architecture at a Glance
A single inbound call, end to end - the Transport layer’s voice path, as the speech stack exposes it:Glossary
One canonical definition each. Headings are anchor-able, so other pages can deep link (for example/get-started/core-concepts#pipe). These are the speech
stack’s terms; the spine’s terms (entity, conversation, interaction, outcome,
event, context) are defined on their Core Engine
pages.
Number
A phone number callers dial. Inbound calls arrive on a number and route to the agent it is attached to. Numbers come from Unpod directly or you bring your own (BYON). You never configure a carrier. See Numbers.Trunk
The SIP connection between your own carrier and Unpod - only needed for BYON (bringing a number you already own). Numbers provisioned from Unpod need no trunk and no carrier account. If you do bring your own, you register the trunk once with its SIP credentials and then work with numbers, not SIP. See Trunks.Voice Profile
A bundle of STT + TTS provider configuration: which providers recognise and synthesise speech, which language and voice, latency, and failover order. Profiles are a read-only catalog you pick from - you reference one by name orprofile_id when creating an agent voice. See
Voice Profiles.
Agent
An agent is oneagent_id, one brain, and one or more voices. The
brain answers turns; each voice is a voice profile the agent speaks with. The
brain belongs to the agent, so editing it reaches every voice. Numbers attach to
an agent; outbound calls dispatch to an agent. See
Agents.
Brain
What answers a turn, named explicitly when you create the agent - exactly one of four sources:Pipe (deprecated)
A Speech Pipe was the configuration entity that bound a call together: a name, a voice profile, recording and duration settings, and theagent_id that
pointed at your runner. It is the predecessor of a single agent-voice row -
client.pipes still writes the same rows but warns on every call. One place it
survives: client.sessions.create_token(pipe_id=...) for browser sessions. See
Speech Pipe for the migration table.
Bridge
The text-routing seam inside Unpod between the speech pipeline and your code. Transcribed caller text crosses the Bridge to your AgentRunner; your reply text crosses back to be synthesised. The Bridge is why your code never touches audio. It is Unpod-internal infrastructure - you do not configure it; you’ll see the term in WebSocket frame names and in the legacy Bridges API.Agent (Brain)
Your conversation logic - whatever decides what to say next. It can be a SuperDialogDialogMachine, a LangChain chain, a plain HTTP endpoint, or custom
Python. Unpod is brain-agnostic: it routes text in and text out. “Agent” and
“brain” mean the same thing here. See
Bring Your Agent.
AgentRunner
A long-lived Python process you run. It registers with the Unpod orchestrator over WebSocket, advertises capacity, and serves a per-call bridge that Unpod dials into. For each call it builds aCallContext and invokes your entrypoint.
You identify it with an agent_id (see IDs You’ll Meet). See
SDK Setup.
Session
Your control interface for one live call, reached asctx.session. It exposes
controls (say(), transfer_to_human(), end(), recording controls), hooks,
metrics, and the dialog_machine slot where you plug in your brain. Calling
session.run() keeps the call alive and routes each transcribed turn to your
brain. See Session Controls.
CallContext
The per-call metadata envelope your entrypoint receives:async def entrypoint(ctx: CallContext). It carries call_id, session_id,
agent_id, direction ("inbound" or "outbound"), user_number, any
instructions and data from dispatch, and the live session you control the
call through. It also exposes runner_id - the runner’s own configured
agent_id. On a multi-tenant runner the call’s agent_id (the agent the call
was dispatched to) and runner_id can differ; use runner_id when you need to
know which pool this process registered under.
Space
A Platform concept, not an SDK one. A Space is a workspace container in the Unpod Platform that organises agents, tasks, runs, and data. The Platform’s REST API addresses a space by its space token. You only meet spaces when you use the hosted Platform or its REST API - the voice SDK does not require one.Two APIs
Theunpod SDK package contains two distinct halves. Know which one you are
using.
Management API is for setup and orchestration: register a trunk, sync
numbers, create an agent, trigger an outbound call, fetch transcripts and
analytics. You construct a
Client (sync) or AsyncClient (async); it reads
UNPOD_API_KEY from the environment.
AgentRunner holds a
persistent WSS connection to the orchestrator, and each call gives you a live
Session to act on.
IDs You’ll Meet
Four identifiers cause most first-run failures. They are not interchangeable.
Wiring it correctly:
Naming: The Four Product Terms
Unpod is one company with one platform, described at four altitudes. Use these terms precisely.
In the docs, Core Engine names the communication backend as a whole - the
spine and the components at the top of this page. Start at the
Core Engine overview.
Next Steps
Core Engine
The spine, the four layers, and every component’s page.
Run Your Own Brain
Wire a number, an agent, and a runner end to end.
Speech Stack
Agents, numbers, voice profiles, and the AgentRunner SDK.
SuperDialog
The optional framework for structured conversation flows.
AgentRunner & Sessions
Act on a live call - say, transfer, end, record.