Skip to main content
If you already run on Plivo, the migration to Vobiz is mostly mechanical. Vobiz mirrors Plivo’s REST resource layout and ships SDKs whose method names match Plivo’s, so in most cases you change only how you construct the client. This page maps each Plivo resource and method to its Vobiz equivalent, then shows a before/after for the most common operation: placing an outbound call.

The short version

  • The REST paths share the same shape: /api/v1/Account/{auth_id}/... with PascalCase resource segments (/Account/.../Call/, identical to Plivo).
  • The SDK methods share names and signatures. client.calls.create(...) takes the same arguments on both platforms; only the client init and base URL differ.
  • The make-call response carries the same fields: request_uuid (equivalent to call_uuid), api_id, and message (Vobiz returns "Call fired").
  • Bulk dialing is unchanged: both Plivo and Vobiz accept multiple destinations in a single to_ separated by < (for example, a<b<c).
A drop-in compatibility shim is coming soon: vobiz-plivo-compat (Python) and @vobiz/plivo-compat (Node). It keeps your existing plivo.RestClient(...) calls working against Vobiz, so you can point at Vobiz with zero code changes and migrate at your own pace. Until it ships, follow the explicit mapping below.

Resource and method mapping

The table covers the resources most teams use. The Vobiz REST path assumes the base https://api.vobiz.ai and your account auth_id. SDK methods are shown in their Python form; the Node SDK uses the same names in camelCase (for example, calls.create).
Plivo resource / methodVobiz REST pathVobiz SDK method
Calls
Make a call (POST /Call/)POST /api/v1/Account/{auth_id}/Call/client.calls.create(from_, to_, answer_url, ...)
Get a live callGET /api/v1/Account/{auth_id}/Call/{call_uuid}/client.calls.get(call_uuid)
List callsGET /api/v1/Account/{auth_id}/Call/client.calls.list(...)
Hang up a callDELETE /api/v1/Account/{auth_id}/Call/{call_uuid}/client.calls.hangup(call_uuid)
Transfer a callPOST /api/v1/Account/{auth_id}/Call/{call_uuid}/client.calls.transfer(call_uuid, ...)
Play / speak / send digitsPOST /api/v1/Account/{auth_id}/Call/{call_uuid}/Play/ (etc.)client.calls.play_music(...), client.calls.speak_text(...), client.calls.send_digits(...)
Applications
Create / list / get / update / deletePOST|GET|DELETE /api/v1/Account/{auth_id}/Application/client.applications.create(...), .list(...), .get(app_id), .update(app_id, ...), .delete(app_id)
Attach / detach a numberPOST /api/v1/Account/{auth_id}/Number/{number}/client.numbers.update(number, app_id=...)
Numbers
Search inventoryGET /api/v1/Account/{auth_id}/PhoneNumber/client.phone_numbers.search(...)
Buy a numberPOST /api/v1/Account/{auth_id}/PhoneNumber/{e164}/client.phone_numbers.purchase_from_inventory(e164, currency)
List owned numbersGET /api/v1/Account/{auth_id}/Number/client.numbers.list(...)
Release a numberDELETE /api/v1/Account/{auth_id}/Number/{number}/client.numbers.release(number)
Recordings
List / get / deleteGET|DELETE /api/v1/Account/{auth_id}/Recording/client.recordings.list(...), .get(recording_id), .delete(recording_id)
Conferences
Get / list / member opsGET /api/v1/Account/{auth_id}/Conference/{name}/client.conferences.get(name), then .kick_member(...), .mute_member(...), .record(...)
Sub-accounts
Create / list / get / update / deletePOST|GET|DELETE /api/v1/Account/{auth_id}/Subaccount/client.subaccounts.create(...), .list(...), .get(sub_auth_id), .update(...), .delete(...)
Use the canonical reference pages for exact request and response fields. The make-call contract is documented in full at Make an Outbound Call.

Before / after: making a call

The make-call signature is the same on Plivo and Vobiz. You change the import and how you build the client; the calls.create(...) arguments stay put.
# --- Before: Plivo ---
import plivo

client = plivo.RestClient(
    auth_id="MA_PLIVO_ID",
    auth_token="plivo_token",
)

response = client.calls.create(
    from_="+911234567890",
    to_="+919876543210",                          # bulk: "a<b<c"
    answer_url="https://your-server.com/answer",
    answer_method="GET",
)
print(response.request_uuid)


# --- After: Vobiz ---
import vobiz

client = vobiz.RestClient(
    auth_id="MA_VOBIZ_ID",
    auth_token="vobiz_token",
)

response = client.calls.create(
    from_="+911234567890",
    to_="+919876543210",                          # bulk: "a<b<c"  (unchanged)
    answer_url="https://your-server.com/answer",
    answer_method="GET",
)
print(response.request_uuid)                        # == call_uuid
The same applies to ring_url, hangup_url, fallback_url, machine_detection, sip_headers, and time_limit: pass them exactly as you did on Plivo.

Raw HTTP equivalent

If you call the REST API directly instead of through an SDK, the change is also small: swap the base host to https://api.vobiz.ai, send your Vobiz auth_id in the path, and authenticate with the X-Auth-ID and X-Auth-Token headers. The path casing (/Account/.../Call/) is identical to Plivo’s. See Authentication & base URL for the exact credentials and host swap.

Beyond parity

A few Vobiz resources have no direct Plivo counterpart and are worth knowing about as you migrate:
  • Trunk — Vobiz exposes SIP trunking as a first-class resource, with credentials, IP-ACL, and origination-URI management, rather than folding it into the endpoint model.
  • DID cool-off — released numbers enter a 15-day cool-off before they re-enter inventory, so plan number churn accordingly.
  • Granular capacity — the account object surfaces per-account concurrency and calls-per-second (CPS) limits you can read and reason about directly.

Next

Migrate your XML

Map Plivo XML verbs to VobizXML and update your answer-URL responses.

Plivo to Vobiz overview

Back to the full migration guide and checklist.