Skip to main content
The official Python SDK for the Vobiz Voice API. Make outbound calls, manage SIP trunks, handle phone numbers, and build dynamic call flows using VobizXML - all seamlessly integrated into your Python applications. Source code and reference: vobiz-ai/Vobiz-Python-SDK

Installation

The SDK is distributed from its GitHub repo (not a package registry). Clone it and install from source:
git clone https://github.com/vobiz-ai/Vobiz-Python-SDK.git
pip install ./Vobiz-Python-SDK

Quick start

Make an outbound call:
from vobiz import Vobiz

AUTH_ID = "YOUR_AUTH_ID"

client = Vobiz(api_key=AUTH_ID, auth_token="YOUR_AUTH_TOKEN")

response = client.calls.make_call(
    auth_id=AUTH_ID,
    from_="14155551234",                            # your Vobiz DID number or SIP URI
    to="+919876543210",                             # destination number
    answer_url="https://your-server.com/answer",    # server returning VobizXML
    answer_method="POST",
)

print("Call initiated:", response)
When the destination party answers, Vobiz makes a synchronous HTTP request to your answer_url to ask for instructions on what to do next.

Authentication

Vobiz uses your Auth ID and Auth Token. Find both in the Vobiz Console. The Vobiz client takes them directly — api_key maps to your Auth ID and auth_token to your Auth Token:
from vobiz import Vobiz

client = Vobiz(api_key="MA_XXXXXXXXXX", auth_token="your_token")
We recommend keeping credentials out of source by reading them from environment variables:
export VOBIZ_AUTH_ID=MA_XXXXXXXXXX
export VOBIZ_AUTH_TOKEN=your_token_here
import os
from vobiz import Vobiz

client = Vobiz(
    api_key=os.environ["VOBIZ_AUTH_ID"],
    auth_token=os.environ["VOBIZ_AUTH_TOKEN"],
)

Receiving calls (Flask server)

When an outbound call connects (or an inbound call arrives), Vobiz requests your answer_url to interpret the VobizXML instructions. Use the bundled vobizxml builder to construct the response — it handles escaping and schema validation for you:
from flask import Flask, request, Response
from vobiz import vobizxml

app = Flask(__name__)

@app.route('/answer', methods=['GET', 'POST'])
def answer():
    call_uuid = request.values.get('CallUUID')
    from_num = request.values.get('From')
    to_num = request.values.get('To')

    print(f"Incoming call {call_uuid}: {from_num}{to_num}")

    r = vobizxml.ResponseElement()
    r.add_speak(
        "Hello! You have reached our Python application.",
        voice="WOMAN",
        language="en-US",
    )
    r.add_hangup()

    return Response(r.to_string(), status=200, mimetype='application/xml')

if __name__ == '__main__':
    app.run(port=5001)

VobizXML

The Python SDK bundles a vobizxml module to construct robust IVR systems without manually formatting XML. Build a ResponseElement, add nested verbs, and serialize with to_string():
from vobiz import vobizxml

r = vobizxml.ResponseElement()

g = r.add_gather(
    action="https://your-server.com/gather-result",
    input_type="dtmf",
    num_digits=1,
    execution_timeout=10,
)
g.add_speak("Welcome to Acme Corp. Press 1 for Sales.")

r.add_hangup()

print(r.to_string())
Gather uses input_type and execution_timeout (not timeout). The timeout attribute belongs to Dial/Number elements only.
In a webhook handler you return the serialized string with an XML mimetype:
return Response(r.to_string(), mimetype="application/xml")

Common operations

Live calls

# List in-progress calls
client.live_calls.list_live_calls(auth_id=AUTH_ID)

# Fetch a single live call
client.live_calls.get_live_call(auth_id=AUTH_ID, call_uuid="CALL_UUID")

# Hang up a live call
client.live_calls.hangup_call(auth_id=AUTH_ID, call_uuid="CALL_UUID")

In-call actions

client.play_audio.call(auth_id=AUTH_ID, call_uuid="CALL_UUID", urls="https://cdn/audio.mp3")
client.speak_text.call(auth_id=AUTH_ID, call_uuid="CALL_UUID", text="Hello from Vobiz")
client.dtmf.send_dtmf(auth_id=AUTH_ID, call_uuid="CALL_UUID", digits="1234")
client.record_calls.start_recording(auth_id=AUTH_ID, call_uuid="CALL_UUID")

Phone numbers and account balance

# List the numbers on your account
client.phone_numbers.list_numbers(auth_id=AUTH_ID)

# Purchase a new number out of the public inventory
client.phone_numbers.purchase_from_inventory(auth_id=AUTH_ID)

# Fetch your account balance
balance = client.balance.get_balance(auth_id=AUTH_ID, currency="INR")
print(balance)

Call detail records (CDR)

cdrs = client.cdr.list_cdrs(auth_id=AUTH_ID)
recent = client.cdr.list_recent_cdrs(auth_id=AUTH_ID)
one = client.cdr.get_cdr(auth_id=AUTH_ID, call_id="CALL_ID")
Exact required parameters per method are listed in the SDK reference.md and at docs.vobiz.ai. Most write methods accept the same fields as the REST API reference.

Resources