<Record> verb for TwiML-style flows, an imperative API to start and stop recording on a live call, a recordings collection to list / fetch / delete, and transcription delivered to a callback URL. Migration is mostly a base-URL swap to https://api.vobiz.ai/api/v1, an auth-header swap (X-Auth-ID + X-Auth-Token in place of HTTP Basic), and a few renamed SDK methods that each take an explicit auth_id.
Set your credentials once:
AUTH_ID is your Vobiz Auth ID (MA_…) and AUTH_TOKEN is your Auth Token. In the Vobiz SDK, api_key is the Auth ID (sent as X-Auth-ID), and every account-scoped method takes that auth_id explicitly as its first argument.Twilio → Vobiz mapping
| Twilio | Vobiz |
|---|---|
<Record> TwiML verb | <Record> VobizXML verb (reference) |
<Record action= method=> | <Record action= method=> — same names, POST default |
<Record maxLength=> (hard cap) | <Record maxLength=> (hard cap on length) |
<Record timeout=> (silence ends recording) | <Record timeout=> (silence ends recording) |
<Record playBeep=> | <Record playBeep=> |
<Record finishOnKey=> | <Record finishOnKey=> |
<Record trim="trim-silence|do-not-trim"> | <Record fileFormat="mp3|wav"> plus post-processing on your side |
<Record recordingStatusCallback= recordingStatusCallbackEvent=> | <Record callbackUrl= callbackMethod=> (fired when the file is ready) |
<Record transcribe="true" transcribeCallback=…> | <Record transcriptionType="auto|hybrid" transcriptionUrl= transcriptionMethod=> |
Record whole call (Dial + record="record-from-answer") | <Record recordSession="true"> / <Record startOnDialAnswer="true"> |
Action-URL params RecordingUrl, RecordingSid, RecordingDuration, Digits | RecordUrl, RecordingID, RecordingDuration, RecordingEndReason |
transcribeCallback params TranscriptionText, TranscriptionStatus, TranscriptionUrl, RecordingSid | Transcription-URL params transcription, transcription_url, transcription_id, recording_id |
POST /Calls/{sid}/Recordings.json (start on live call) | POST /api/v1/Account/{auth_id}/Call/{call_uuid}/Record/ |
POST /Calls/{sid}/Recordings/{rsid}.json Status=paused|stopped | DELETE /api/v1/Account/{auth_id}/Call/{call_uuid}/Record/ (stop) |
GET /Recordings.json (list) | GET /api/v1/Account/{auth_id}/Recording/ |
GET /Recordings/{sid}.json (fetch) | GET /api/v1/Account/{auth_id}/Recording/{recording_id}/ |
DELETE /Recordings/{sid}.json | DELETE /api/v1/Account/{auth_id}/Recording/{recording_id}/ |
Conference recording (Conference record=) | POST/DELETE /api/v1/Account/{auth_id}/Conference/{name}/Record/ |
Python client.recordings.list() | client.recordings.list_recordings(auth_id) |
Python client.recordings(sid).fetch() | client.recordings.get_recording(auth_id, recording_id=…) |
Python client.recordings(sid).delete() / .remove() | client.recordings.delete_recording(auth_id, recording_id=…) |
Python client.calls(sid).recordings.create(...) | client.record_calls.start_recording(auth_id, call_uuid, …) |
Python client.calls(sid).recordings(rsid).update(status="stopped") | client.record_calls.stop_recording(auth_id, call_uuid) |
Node client.recordings.list() / .fetch() / .remove() | client.recordings.listRecordings / getRecording / deleteRecording |
Node client.calls(sid).recordings.create() | client.recordCalls.startRecording(...) |
Conference client.conferences(...).recordings | client.conferenceRecording.startConferenceRecording / stopConferenceRecording |
Before / after — record a voicemail in XML
Twilio’s<Record> and Vobiz’s <Record> share the verb name and most attributes. The main renames: recordingStatusCallback → callbackUrl, and transcription is enabled with transcriptionType + transcriptionUrl instead of transcribe + transcribeCallback.
vobizxml builder (same ResponseElement + add_* pattern you may know from PlivoXML):
Before / after — start & stop recording on a live call
Twilio starts an in-call recording by POSTing to the call’sRecordings sub-resource and stops it by updating that recording’s Status. Vobiz gives each action a dedicated method keyed by (auth_id, call_uuid), so you never have to track a separate recording SID just to stop it.
Before / after — list, fetch, and delete recordings
The recordings collection maps almost one-to-one. Twilio addresses a recording asrecordings(sid); Vobiz passes the id as recording_id and (as everywhere) an explicit auth_id.
Transcription callbacks
Both platforms deliver the transcript to a URL you own rather than blocking the call. Twilio poststranscribeCallback parameters; Vobiz posts to the transcriptionUrl you set on <Record> (or via transcription_type='auto' on start_recording). Point Vobiz at your existing endpoint and remap a few field names:
| Twilio field | Vobiz field |
|---|---|
TranscriptionText | transcription |
TranscriptionUrl | transcription_url |
RecordingSid | recording_id |
| (transcript id in resource URL) | transcription_id |
Vobiz · Flask (transcription webhook)
Key differences
- Stopping a recording is a single call. Vobiz’s
record_calls.stop_recording(auth_id, call_uuid)stops the active recording by call — you address the call, not a separate recording SID, so there’s less state to carry through your app. - One
<Record>for whole-call capture. Where Twilio recording is split across TwiML attributes and REST resources, Vobiz’s<Record recordSession="true">captures the entire session (including laterSpeak/Playand bridged legs), andstartOnDialAnswer="true"begins capture the moment the far leg answers. - Transcription is a two-tier
auto/hybridchoice.transcriptionType="auto"uses the default Vobiz engine;hybridblends Vobiz for common languages with a third-party provider for the long tail — a single attribute covers broad language coverage. - A dedicated callback for file readiness. Vobiz’s
callbackUrlfires when the recording file is actually downloadable, so your download/processing job starts on a real signal instead of polling after theactionURL returns. - Explicit
auth_ideverywhere. Every recording method takes the accountauth_idas its first argument, which makes multi-account and sub-account workloads explicit and easy to route. - Auth headers instead of Basic auth. Vobiz authenticates with
X-Auth-ID+X-Auth-Tokenheaders againsthttps://api.vobiz.ai/api/v1; the SDK sets these for you fromapi_key/auth_token. - Familiar verb and attribute names.
action,method,maxLength,timeout,playBeep, andfinishOnKeykeep their Twilio meanings on the Vobiz<Record>verb, so most of your recording XML ports with only the callback/transcription attributes renamed.
<Record> reference, pair recording with a menu using <Gather>, or go back to the Twilio → Vobiz overview.