> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vobiz.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Plivo to Vobiz: Recordings & Transcription Migration

> Map Plivo's Record XML, Recording API, and transcription to Vobiz. Side-by-side endpoints, SDK methods, the Record verb, and the gotchas when migrating call recording from Plivo to Vobiz.

Vobiz mirrors Plivo's recording model closely — same `Record` XML verb, same `Record/` and `Recording/` REST endpoints, and webhook-delivered transcription. Migration is mostly a base-URL (`https://api.vobiz.ai/api/v1`), auth-header (`X-Auth-ID` + `X-Auth-Token`, not Basic auth), and SDK-namespace swap.

## Plivo → Vobiz mapping

| Plivo                                                                                                            | Vobiz                                                                                      |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `Record` XML element                                                                                             | `<Record>` XML element (VobizXML)                                                          |
| `<Record>` attrs `action`, `method`, `fileFormat`, `maxLength`, `timeout`, `playBeep`, `finishOnKey`, `redirect` | Same attribute names and semantics                                                         |
| `<Record recordSession="true">`                                                                                  | `<Record recordSession="true">`                                                            |
| `<Record startOnDialAnswer="true">` (nested in Dial)                                                             | `<Record startOnDialAnswer="true">`                                                        |
| `<Record transcriptionType="auto\|hybrid">`, `transcriptionUrl`, `transcriptionMethod`                           | Same attributes, values `auto` / `hybrid`                                                  |
| `<Record recordChannelType="mono\|stereo">`                                                                      | `record_channel_type` on the REST `Record/` call (mono/stereo); not a Record-XML attribute |
| `POST /v1/Account/{id}/Call/{call_uuid}/Record/` (start)                                                         | `POST /api/v1/Account/{auth_id}/Call/{call_uuid}/Record/`                                  |
| `DELETE /v1/Account/{id}/Call/{call_uuid}/Record/` (stop)                                                        | `DELETE /api/v1/Account/{auth_id}/Call/{call_uuid}/Record/`                                |
| `POST /v1/Account/{id}/Conference/{name}/Record/`                                                                | `POST /api/v1/Account/{auth_id}/Conference/{name}/Record/`                                 |
| `DELETE /v1/Account/{id}/Conference/{name}/Record/`                                                              | `DELETE /api/v1/Account/{auth_id}/Conference/{name}/Record/`                               |
| `GET /v1/Account/{id}/Recording/` (list all)                                                                     | `GET /api/v1/Account/{auth_id}/Recording/`                                                 |
| `GET /v1/Account/{id}/Recording/{recording_id}/`                                                                 | `GET /api/v1/Account/{auth_id}/Recording/{recording_id}/`                                  |
| `DELETE /v1/Account/{id}/Recording/{recording_id}/`                                                              | `DELETE /api/v1/Account/{auth_id}/Recording/{recording_id}/`                               |
| Python `client.calls.record(...)` / `start_recording(...)`                                                       | `client.record_calls.start_recording(...)`                                                 |
| Python `client.calls.stop_recording(call_uuid)`                                                                  | `client.record_calls.stop_recording(...)`                                                  |
| Python `client.conferences.record(...)`                                                                          | `client.conference_recording.start_conference_recording(...)`                              |
| Python `client.recordings.list()`                                                                                | `client.recordings.list_recordings(...)`                                                   |
| Python `client.recordings.get(recording_id)`                                                                     | `client.recordings.get_recording(...)`                                                     |
| Python `client.recordings.delete(recording_id)`                                                                  | `client.recordings.delete_recording(...)`                                                  |
| Node `client.calls.record(callUuid)`                                                                             | `client.recordCalls.startRecording(...)`                                                   |
| Node `client.recordings.list/get/delete`                                                                         | `client.recordings.listRecordings/getRecording/deleteRecording`                            |

## Before / after — record a voicemail in XML

Plivo (PlivoXML) and Vobiz (VobizXML) share the verb and attribute names verbatim:

```xml Plivo theme={null}
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Speak>Please leave a message after the beep.</Speak>
    <Record action="https://yourapp.com/voicemail" method="POST"
            maxLength="120" timeout="10" finishOnKey="#" playBeep="true"
            fileFormat="mp3"/>
</Response>
```

```xml Vobiz theme={null}
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Speak>Please leave a message after the beep.</Speak>
    <Record action="https://yourapp.com/voicemail" method="POST"
            maxLength="120" timeout="10" finishOnKey="#" playBeep="true"
            fileFormat="mp3"/>
</Response>
```

The action-URL callback params also match: `RecordUrl`, `RecordingID`, `RecordingDuration`, `RecordingDurationMs`, `RecordingStartMs`, `RecordingEndMs`. Vobiz adds `RecordingEndReason` (`RecordingTimeout` / `maxLength` / `FinishedOnKey` / `HungUp`).

## Key differences & gotchas

* **Recording namespace split.** Plivo puts in-call recording on `client.calls`; Vobiz splits it into `client.record_calls` (live call) and `client.conference_recording` (conference). Stored-asset list/get/delete lives on `client.recordings` on both sides.
* **`recordChannelType` location.** On Vobiz, mono/stereo is set via `record_channel_type` on the REST `Record/` call, not on the `<Record>` verb.
* **Transcription delivery.** Both support `auto` and `hybrid`. Vobiz posts the result to `transcriptionUrl` (XML) or the recording `callback_url` (REST) — there is no polling endpoint, so wire up the webhook.
* **`timeout` default differs.** `timeout` is the trailing-silence cutoff (Vobiz default 60s, Plivo default 15s); re-check your Plivo values after migrating.

## What has no Vobiz equivalent

* **`transcriptionType="manual"` and `transcriptionReportType` (`full`/`compact`).** Vobiz transcription is machine ASR only (`auto` / `hybrid`) — no human/manual tier and no report-type toggle.
* **Rich recording-list filters.** Plivo's `recordings.list()` filters by `call_uuid`, `from_number`, `to_number`, `conference_name`, MPC details, and `add_time`. Vobiz's `GET /Recording/` pages with `limit`/`offset` only — filter client-side.
* **Standalone Transcription resource.** Plivo exposes a separate Transcription GET/DELETE API; Vobiz returns transcription only via the webhook payload, with no independently addressable record.
* **MPC participant-level pause/resume recording.** Vobiz recording is start/stop at the call or conference level — no per-participant pause.
