> ## 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 Conferences to Vobiz: XML + API Migration Guide

> Map Plivo's Conference XML element and Conference/Member REST APIs to Vobiz. Side-by-side attribute and endpoint mapping, before/after code for join, mute, kick, play, and record.

Plivo and Vobiz model conferences the same way: callers join a **named room** through a `<Conference>` XML element, and you control participants out-of-band through a REST API (mute, kick, play, record). The XML verb and most attributes line up one-to-one — the main differences are **header auth**, the **SDK resource split** (`conference`, `conference_members`, `conference_recording`), and a few Plivo-only attributes.

## Plivo → Vobiz mapping

### XML element & attributes

| Plivo `<Conference>`                                                                                                    | Vobiz `<Conference>`                | Notes                                                                                                            |
| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `<Conference>RoomName</Conference>`                                                                                     | `<Conference>RoomName</Conference>` | Identical. Room name is the element text, case-sensitive. Vobiz auto-creates the room.                           |
| `muted`                                                                                                                 | `muted`                             | Same boolean. Join muted.                                                                                        |
| `startConferenceOnEnter`                                                                                                | `startConferenceOnEnter`            | Same. Default `true` on both.                                                                                    |
| `endConferenceOnExit`                                                                                                   | `endConferenceOnExit`               | Same. Moderator-leaves-ends-call pattern.                                                                        |
| `maxMembers`                                                                                                            | `maxParticipants`                   | **Renamed.** Vobiz default `200`.                                                                                |
| `waitSound`                                                                                                             | `waitSound` (+ `waitMethod`)        | Hold audio while waiting to start.                                                                               |
| `enterSound` / `exitSound` (`beep:1`, `beep:2`, URL)                                                                    | `beep` *(boolean)*                  | Vobiz collapses both into one on/off beep; no custom URLs.                                                       |
| `record` + `recordFileFormat`                                                                                           | `record` *(boolean)*                | Vobiz `record` is boolean only; format is fixed at the room level. Use the Record API for `mp3`/`wav` choice.    |
| `timeLimit`                                                                                                             | `timeLimit`                         | Max conference duration in seconds.                                                                              |
| `callbackUrl` / `callbackMethod`                                                                                        | `callbackUrl` / `callbackMethod`    | Lifecycle events. See [Conference Callbacks](/xml/conference/conference-callbacks).                              |
| `digitsMatch` + `action` / `method`                                                                                     | *(no equivalent)*                   | In-conference DTMF capture isn't a Conference attribute on Vobiz — use a separate [`<Gather>`](/xml/gather) leg. |
| `stayAlone`, `recordWhenAlone`, `floorEvent`, `relayDTMF`, `hangupOnStar`, `transcriptionType/Url/Method`, `sendDigits` | *(no equivalent)*                   | No direct Vobiz attribute. See [gaps](#what-has-no-direct-equivalent).                                           |

### REST API (room + member operations)

Vobiz base URL: `https://api.vobiz.ai/api/v1`. Auth via `X-Auth-ID` + `X-Auth-Token` **request headers** (Plivo uses HTTP Basic with the same Auth ID/Token).

| Plivo (path / Python method)                                    | Vobiz path                                                | Vobiz Python SDK                                                                                      |
| --------------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `GET /Conference/` · `conferences.list`                         | `GET /Account/{auth_id}/Conference/`                      | `client.conferences.list_conferences(auth_id)`                                                        |
| `GET /Conference/{name}/` · `conferences.get`                   | `GET /Account/{auth_id}/Conference/{conference_name}/`    | `client.conferences.get_conference(auth_id, conference_name)`                                         |
| `DELETE /Conference/{name}/` · `conferences.hangup`             | `DELETE /Account/{auth_id}/Conference/{conference_name}/` | `client.conferences.delete_conference(auth_id, conference_name)`                                      |
| `DELETE /Conference/` · `conferences.hangup_all`                | `DELETE /Account/{auth_id}/Conference/`                   | `client.conferences.delete_all_conferences(auth_id)`                                                  |
| `POST .../Member/{id}/Mute/` · `conferences.member_mute`        | `POST .../Member/{member_id}/Mute/`                       | `client.conference_members.mute_member(auth_id, conference_name, member_id)`                          |
| `DELETE .../Member/{id}/Mute/` · `conferences.member_mute_stop` | `DELETE .../Member/{member_id}/Mute/`                     | `client.conference_members.unmute_member(auth_id, conference_name, member_id)`                        |
| `POST .../Member/{id}/Kick/` · `conferences.member_kick`        | `POST .../Member/{member_id}/Kick/`                       | `client.conference.kick_member(auth_id, conference_name, member_id)`                                  |
| `DELETE .../Member/{id}/` · `conferences.member_hangup`         | `DELETE .../Member/{member_id}/`                          | `client.conference.hangup_member(auth_id, conference_name, member_id)`                                |
| `POST .../Member/{id}/Deaf/` · `conferences.member_deaf`        | `POST .../Member/{member_id}/Deaf/`                       | `client.conference.deaf_member(auth_id, conference_name, member_id)`                                  |
| `DELETE .../Member/{id}/Deaf/` · `conferences.member_deaf_stop` | `DELETE .../Member/{member_id}/Deaf/`                     | `client.conference.undeaf_member(auth_id, conference_name, member_id)`                                |
| `POST .../Member/{id}/Play/` · `conferences.member_play`        | `POST .../Member/{member_id}/Play/`                       | `client.conference.play_audio_member(auth_id, conference_name, member_id, url=...)`                   |
| `DELETE .../Member/{id}/Play/` · `conferences.member_play_stop` | `DELETE .../Member/{member_id}/Play/`                     | `client.conference.stop_audio_member(auth_id, conference_name, member_id)`                            |
| `POST /Conference/{name}/Record/` · `conferences.record`        | `POST .../Conference/{conference_name}/Record/`           | `client.conference_recording.start_conference_recording(auth_id, conference_name, file_format="mp3")` |
| `DELETE /Conference/{name}/Record/` · `conferences.record_stop` | `DELETE .../Conference/{conference_name}/Record/`         | `client.conference_recording.stop_conference_recording(auth_id, conference_name)`                     |
| `POST .../Member/{id}/Speak/` · `conferences.member_speak`      | *(no equivalent)*                                         | No conference member TTS endpoint — see [gaps](#what-has-no-direct-equivalent).                       |

## Before / after: join a moderated conference (XML)

**Plivo** — `plivoxml` builder:

```python theme={null}
from plivo import plivoxml

resp = plivoxml.ResponseElement()
resp.add(
    plivoxml.ConferenceElement(
        "WeeklyStandup",
        start_conference_on_enter=False,   # participants wait
        max_members=10,
        wait_sound="https://yourapp.com/hold-music",
        callback_url="https://yourapp.com/conf-events",
    )
)
print(resp.to_string())
```

**Vobiz** — `vobizxml` builder (bundled in every Vobiz SDK):

```python theme={null}
from vobizxml import ResponseElement

r = ResponseElement()
r.add_conference(
    "WeeklyStandup",
    start_conference_on_enter=False,       # participants wait
    max_participants=10,                   # was max_members
    wait_sound="https://yourapp.com/hold-music",
    callback_url="https://yourapp.com/conf-events",
)
print(r.to_string())
```

Both emit the same XML shape:

```xml theme={null}
<Response>
  <Conference startConferenceOnEnter="false" maxParticipants="10"
              waitSound="https://yourapp.com/hold-music"
              callbackUrl="https://yourapp.com/conf-events">WeeklyStandup</Conference>
</Response>
```

## Key differences & gotchas

* **Auth.** Plivo uses HTTP Basic; Vobiz uses `X-Auth-ID` / `X-Auth-Token` request headers (the SDK sets these, but raw `curl`/HTTP clients must switch).
* **Member ops are split across SDK resources.** `client.conference` (kick / hangup / play / deaf), `client.conference_members` (mute / unmute), `client.conferences` (room list / get / delete), `client.conference_recording` (start / stop) — but the REST paths stay under one `/Conference/...` tree.
* **Rename `maxMembers` → `maxParticipants`** and note `enterSound`/`exitSound` collapse into a single `beep` boolean; recording format moves from XML to `start_conference_recording(file_format=...)`.
* **Callback params differ in name.** Vobiz posts `ConferenceAction` (`enter`/`exit`/`start`/`end`), `ConferenceUUID`, `ConferenceName`, `CallUUID`, `ConferenceCurrentSize`, and `RecordingUrl`. See [Conference Callbacks](/xml/conference/conference-callbacks).

## What has no direct equivalent

* **Speak text to a single member** — Plivo's `member_speak` has no Vobiz endpoint. Pre-render the prompt to audio and use `play_audio_member(url=...)`.
* **In-conference DTMF capture** — Plivo's `digitsMatch` + `action`/`method` isn't a Vobiz Conference attribute. Run a separate [`<Gather>`](/xml/gather) leg for menu input.
* **Conference transcription attributes** — Plivo's `transcriptionType`/`transcriptionUrl`/`transcriptionMethod` have no Vobiz equivalent; record the room and transcribe downstream.
* **`stayAlone`, `recordWhenAlone`, `floorEvent`, `relayDTMF`, `hangupOnStar`, `sendDigits`** — these per-member behavior flags are not exposed on the Vobiz Conference element today.
