api_key (Auth ID) and auth_token (sent as X-Auth-ID and X-Auth-Token headers), TwiML answer documents become VobizXML with the same <Response> container and familiar verbs, and client.calls.create(...) becomes client.calls.make_call(...). Most of a migration is mechanical - swap the base URL to https://api.vobiz.ai/api/v1, pass an explicit auth_id, and rename a handful of methods. The matrix below maps each domain to its Vobiz home and rates the effort, then a recommended migration order tells you what to move first.
At-a-glance matrix
Twilio → Vobiz mapping
Two changes that unlock everything
Before touching any domain, land these two orientation swaps - they cover the majority of a Twilio port.1. Credentials and client
Same two secrets, moved into headers. Your Account SID is the Auth ID (api_key); your Auth Token is auth_token.
2. Outbound call + call instructions
client.calls.create(...) becomes client.calls.make_call(...): add an explicit auth_id, point url → answer_url, and make answer_method explicit. Your TwiML answer document becomes VobizXML - same <Response>, <Say> → <Speak>, <Gather> keeps numDigits/finishOnKey and gains inputType + executionTimeout.
Recommended migration order
Work outward from the two foundations above so every later step builds on working auth and a working answer flow.- Credentials and client - map Account SID/Auth Token →
api_key/auth_token, swap the base URL tohttps://api.vobiz.ai/api/v1, and add the explicitauth_id. See Voice Call API. - TwiML → VobizXML - port your answer documents:
<Say>→<Speak>, keep<Gather>(addinputType/executionTimeout),<Dial><Client>→<Dial><User>. See TwiML → VobizXML and/xml/gather. - Outbound calls and live control -
calls.create→calls.make_call, and move in-call actions toplay_audio/speak_text/dtmf/record_calls+live_calls. See Voice Call API. - Numbers and SIP trunking - search the inventory,
purchase_from_inventory, then wiretrunks/credentials/ip_access_control_list/origination_uri. See Phone numbers and SIP trunking. - Conferences and recordings - same
<Conference>/<Record>verbs; adopt theconference*andrecord_calls/recordingsnamespaces. See Conferences and Recordings. - Sub-accounts and KYC - recreate subaccounts with
sub_accounts, then layer onsub_account_kycfor India onboarding. See Sub-accounts. - Webhook validation - swap
X-Twilio-Signature/RequestValidatorforX-Vobiz-Signature+ the SDK validator, and readGatherinput from theactionURL. See Webhooks. - Reporting and SDK cleanup - repoint call-log queries to
cdr.list_cdrs/get_cdrand finish adopting the git-cloned SDKs. See SDKs.
Key differences
- Same two secrets, header auth. Vobiz sends your Auth ID and Auth Token as
X-Auth-IDandX-Auth-Tokenheaders (the SDK does this for you), instead of Twilio’s HTTP BasicAccount SID:Auth Token. - Explicit
auth_ideverywhere. Every account-scoped Vobiz method names the account it acts on, so multi-tenant and sub-account code reads unambiguously and is easy to audit. answer_url+answer_method. A Vobiz call fetches VobizXML from youranswer_url, with the HTTP method stated explicitly - the same webhook-driven model as TwiMLurl, made explicit.- Familiar XML, one rename. VobizXML keeps the
<Response>container and most verbs; the main change is<Say>→<Speak>.<Gather>keepsnumDigits/finishOnKeyand addsinputType,executionTimeout, anddigitEndTimeout(per-leg answer timeouts live on<Dial>/<Number>). - Dedicated in-call resources. Where Twilio updates a call to redirect or act on it, Vobiz exposes
live_calls,play_audio,speak_text,dtmf, andrecord_callsas first-class, strongly-typed resources keyed by(auth_id, call_uuid). - Imperative transfers via
<Redirect>. To move a call to a new flow, return<Redirect>from the answer URL - a clean, stateless hand-off that keeps your call logic in one place. - SIP trunking and India KYC are first-class in the SDK.
trunks/credentials/ip_access_control_list/origination_uriandsub_account_kyc(PAN/GST/CIN/DigiLocker/hosted sessions) are typed resources in all seven SDKs. - SDKs you git-clone. The seven Vobiz SDKs are cloned from
vobiz-ai/*and ship thevobizxmlbuilder in the box, so your REST calls and your answer-document generation come from one package.