Skip to main content
Plivo splits number management across PhoneNumber (search the carrier catalog and buy) and Number (manage numbers you own); Vobiz folds both into a single phone_numbers resource backed by an inventory model — you buy by E.164 from Vobiz’s pre-provisioned stock. Note the two big behavioural gaps: there is no port-in, and a 15-day DID cool-off applies on sub-account moves.

Plivo → Vobiz mapping

OperationPlivo (endpoint / Python SDK)Vobiz (endpoint / Python SDK)
Search available numbersGET /v1/Account/{auth_id}/PhoneNumber/ · client.numbers.search(country_iso, type, pattern, ...)GET /api/v1/Account/{auth_id}/inventory/numbers · client.phone_numbers.list_inventory_numbers(auth_id, country=, search=)
Buy / rent a numberPOST /v1/Account/{auth_id}/PhoneNumber/{number}/ · client.numbers.buy(number, app_id, ...)POST /api/v1/Account/{auth_id}/numbers/purchase-from-inventory · client.phone_numbers.purchase_from_inventory(auth_id, e164, currency=)
List owned numbersGET /v1/Account/{auth_id}/Number/ · client.numbers.list(...)GET /api/v1/Account/{auth_id}/numbers · client.phone_numbers.list_numbers(auth_id, limit=, offset=)
Get one number’s detailsGET /v1/Account/{auth_id}/Number/{number}/ · client.numbers.get(number)No dedicated endpoint — read the item from list_numbers (see gaps)
Update a number (app, alias, subaccount)POST /v1/Account/{auth_id}/Number/{number}/ · client.numbers.update(number, app_id=, subaccount=, alias=)Per-action endpoints — assign_number_to_trunk / assign_did_to_subaccount
Release / unrent a numberDELETE /v1/Account/{auth_id}/Number/{number}/ · client.numbers.delete(number)DELETE /api/v1/Account/{auth_id}/numbers/{e164} · client.phone_numbers.unrent_number(auth_id, e164)
Attach number to an app / route inboundupdate(number, app_id=...) (Plivo Application)POST /api/v1/Account/{auth_id}/numbers/{phone_number}/assign · client.phone_numbers.assign_number_to_trunk(auth_id, phone_number, trunk_group_id)
Detach inbound routingupdate(number, app_id="")DELETE /api/v1/Account/{auth_id}/numbers/{phone_number}/assign · client.phone_numbers.unassign_number_from_trunk(auth_id, phone_number)
Assign a number to a sub-accountupdate(number, subaccount=...)POST /api/v1/account/{auth_id}/numbers/{e164}/assign-subaccount · client.phone_numbers.assign_did_to_subaccount(auth_id, e164, sub_account_id)
Remove a number from a sub-accountupdate(number, subaccount="")DELETE /api/v1/account/{auth_id}/numbers/{e164}/assign-subaccount · client.phone_numbers.unassign_did_from_subaccount(auth_id, e164, force=)
Port a number inManual port-in (console / LOA, no self-serve REST)No equivalent — Vobiz does not support port-in (see below)

Before / after: buy a number

Plivo POSTs to the specific {number} path and can attach a Plivo Application at buy time. Vobiz POSTs the E.164 (with the leading +) to a single purchase-from-inventory endpoint, which debits setup_fee + monthly_fee from your balance (for an SA_ sub-account, the parent MA_ is charged). After purchase the number is owned but not yet routed — assign it to a trunk before it takes inbound calls.
Plivo
client.numbers.buy(
    number="14155551234",
    app_id="2087965050567",   # attach to a Plivo Application at buy time
)
Vobiz
client.phone_numbers.purchase_from_inventory(
    auth_id="MA_XXXXXX",
    e164="+14155551234",
    currency="USD",            # defaults to the number's currency or USD
)

Key differences & gotchas

  • E.164 formatting is inconsistent across endpoints. purchase_from_inventory takes the number with the leading + in the body; unrent_number takes it without the + in the path; trunk/sub-account assignment endpoints take it URL-encoded (%2B14155551234).
  • Routing is by trunk, not by Application. There is no app_id on a Vobiz number — inbound routing is an explicit assign/unassign to a trunk_group_id (a UUID), and a freshly purchased number routes nowhere until you assign it.
  • 15-day DID cool-off on sub-account moves. unassign_did_from_subaccount returns 409 did_cool_off_in_effect if the DID took a call in the last 15 days; never-used DIDs move immediately, and admins can bypass with force=true.
  • Sub-account assignment uses a lowercase account path (/api/v1/account/...), unlike the capital-Account of every other number endpoint — the SDK hides this, but raw HTTP callers must match the casing.

What has no Vobiz equivalent

  • Number porting (port-in). You cannot port or transfer a Plivo number to Vobiz — there is no port-in flow via API or console. Treat the migration as a fresh provision: buy new Vobiz numbers, re-point your flows, run in parallel, then release the Plivo numbers. See Phone numbers (you can’t port from Plivo).
  • Get-one-number endpoint. No GET .../numbers/{e164} detail call — read the number’s fields from the list_numbers page (each item carries the full object).
  • CNAM / alias / 10DLC & toll-free registration fields on the number. The Vobiz number resource carries none of Plivo’s editable cnam, alias, compliance_application_id, or 10DLC/toll-free attributes; compliance is handled out-of-band.
  • Plivo numbers.create (add carrier/hosted numbers). No equivalent — every Vobiz number originates from its managed inventory.