Skip to main content
This page defines every Unpod term once. Other pages link here instead of redefining things. If a definition seems to conflict elsewhere, this page wins. Unpod is the communication backend for agentic apps. Everything in it hangs off one data plane - the spine.

The Spine

Read it as: channels deliver to an entity; every touch belongs to a channel-neutral conversation; each call, message, or email is an interaction; each interaction produces a structured outcome; every change emits an event. Context underlies entity through outcome. Agents and Flows act on the spine; Teams and Policies govern it.

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:
Animated Unpod voice stack diagram showing phone, browser, and mobile entrypoints flowing through the managed speech layer into your AgentRunner, dialog machine, and tools.
Read it as: a Caller enters through a phone number, browser, or mobile app. For phone calls, the Number routes into Unpod’s managed speech layer - over Unpod’s own carrier capacity, or over a Trunk you registered if you brought your own number. Unpod transcribes the audio with the call’s voice profile (STT) and sends plain text across the Bridge over a WebSocket to your AgentRunner. Your runner hands each turn to your Agent (your brain). Your reply text crosses back over the Bridge, Unpod synthesises it (TTS), and the caller hears it. SuperDialog is one option for the brain - powerful, but optional. You own everything from the AgentRunner down. Everything above it is managed. On the spine, the whole call is one interaction: it belongs to a conversation, resolves to an entity, and reports a structured outcome when it ends.

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 or profile_id when creating an agent voice. See Voice Profiles.

Agent

An agent is one agent_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 the agent_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 SuperDialog DialogMachine, 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 a CallContext 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 as ctx.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

The unpod 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.
Connectivity API is for the call itself: your 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.
agent_id is the one that must match. The agent_id you pass to AgentRunner(...) must exactly match the agent_id you created the agent with, or a call rings and no runner claims it.
Wiring it correctly:
If a call rings but your runner never wakes up, check this match first.

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.