Skip to main content

Unpod Python SDK

Developer SDK for Unpod voice infrastructure — management, connectivity, and adapters for building voice agents that talk over real phone calls, browsers, and WebRTC.

Single architectural commitment: the wire between Unpod infrastructure and your code carries text, not audio. You bring the brain; Unpod brings the voice.

Installation

pip install unpod

# With superdialog integration (recommended)
pip install "unpod[dialog]"

# With LangChain adapter
pip install "unpod[langchain]"

# With MCP adapter
pip install "unpod[mcp]"

Or with uv: uv add unpod (extras: uv add "unpod[dialog]").

To install the latest unreleased code from source:

pip install "unpod @ git+https://github.com/unpod-ai/unpod-python-sdk"

What's Inside

unpod
├── Management SDK (REST)   numbers, voice profiles, speech pipes, calls,
│                           sessions, trunks, recordings, transcripts, api keys
├── Connectivity SDK (WSS)  AgentRunner, Session, CallContext, hooks
└── Adapters                superdialog, LangChain, OpenAI, Anthropic, HTTP, MCP
  • Management SDK — CRUD against the Unpod Control Plane: manage numbers (sync/attach/release), browse voice profiles, bind Speech Pipes, trigger and inspect calls.
  • Connectivity SDK — runtime for live calls: a long-lived AgentRunner receives plain-text turns over WSS and dispatches them to your agent, regardless of transport (phone, browser, WebRTC).
  • Adapters — plug any brain into a call: superdialog dialog machines, LangChain runnables, your own HTTP endpoint, or an MCP server.

Quick Example

from unpod import AsyncClient, AgentRunner, CallContext

client = AsyncClient()  # direct → supervoice; reads UNPOD_API_KEY from env

# Or go through the unpod backend-core proxy (platform JWT + org), same calls:
#   from unpod import JWTAuth
#   client = AsyncClient(base_url="https://app.unpod.ai/api/v2/platform/speech",
#                        auth=JWTAuth(token="<jwt>", org_handle="acme"))

# Management: pick a voice, bind a Speech Pipe to your agent
profiles = await client.voice_profiles.list(language="en")
pipe = await client.pipes.create(
    name="support-line",
    voice_profile=profiles[0].id,
    agent_id="my-voice-agent",
)


# Connectivity: handle every live call with your own logic
async def entrypoint(ctx: CallContext) -> None:
    await ctx.session.say("Hi! How can I help you today?")
    await ctx.session.run()


AgentRunner(entrypoint=entrypoint, agent_id="my-voice-agent").start()

Documentation

Guide What it covers
Overview What Unpod owns vs what you own, the three layers
Architecture Package structure, data flow, protocol details
Management SDK REST client API reference
Connectivity SDK AgentRunner, Session, hooks, controls
Adapters DialogAdapter protocol and bundled adapters
Quickstart 10 steps to your first phone call
Browser Quickstart Test in Chrome, no phone number needed

Full platform documentation: docs.unpod.ai

Development

git clone https://github.com/unpod-ai/unpod-python-sdk
cd unpod-python-sdk
uv sync --extra dev
uv run pytest

License

Apache-2.0

Metadata

Release files for unpod 0.1.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for unpod 0.1.10
File Size Uploaded
unpod-0.1.10.tar.gz 152.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for unpod 0.1.10
File Interpreter ABI Platform
unpod-0.1.10-py3-none-any.whl Python 3 none any Details

Total release size: 229.5 kB

Release files / unpod-0.1.10.tar.gz

Download URL unpod-0.1.10.tar.gz
Size 152.4 kB
Tags Source
SHA-256 checksum
How to use checksums
38b102e1fd8971c8e44a4d2d2053e428042f5adfdc259780f5abfd1e4f44bd1d
BLAKE2b-256 checksum
How to use checksums
3de04ce7871fe0aa92f29b067f895668d0041e92a78a2f7bd80780e70c47dbb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / unpod-0.1.10-py3-none-any.whl

Download URL unpod-0.1.10-py3-none-any.whl
Size 77.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b6bb4b20c3de80ca659efd1e9dd1f08a258f88f5b638eaf63db48c447017a52
BLAKE2b-256 checksum
How to use checksums
8b0d7ab92460f60a97384a89f7bad1df69485d5851244b15315031a9ea1d4384
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page