> ## 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.

# Conference Callbacks

> Vobiz fires webhook events to your callbackUrl when participants enter or exit a conference room and when the conference starts or ends.

<Info>
  **Prerequisites**

  Set `callbackUrl` (and optionally `callbackMethod`) on the `<Conference>` element. Vobiz sends an HTTP request to this URL for each lifecycle event.
</Info>

## Events

Vobiz sends a callback for each of the following events:

| `ConferenceAction` value | When it fires                                                                                         |
| ------------------------ | ----------------------------------------------------------------------------------------------------- |
| `enter`                  | A participant joins the conference room                                                               |
| `exit`                   | A participant leaves the conference room                                                              |
| `start`                  | The conference starts (first `startConferenceOnEnter="true"` participant arrives)                     |
| `end`                    | The conference ends (last participant leaves, `endConferenceOnExit` fires, or `timeLimit` is reached) |

## Parameters sent to callbackUrl

These parameters are included in every callback request.

| Parameter               | Description                                                                            |
| ----------------------- | -------------------------------------------------------------------------------------- |
| `ConferenceAction`      | The event that triggered the callback. **Values:** `enter`, `exit`, `start`, `end`     |
| `ConferenceUUID`        | Unique identifier for this conference session                                          |
| `ConferenceName`        | The room name set in the `<Conference>` element                                        |
| `CallUUID`              | Unique identifier for the individual call leg that triggered the event                 |
| `From`                  | Caller's phone number for the leg that triggered the event                             |
| `To`                    | Called phone number for the leg that triggered the event                               |
| `ConferenceCurrentSize` | Number of participants currently in the conference at the time of the event            |
| `Timestamp`             | When the event occurred                                                                |
| `RecordingUrl`          | URL of the conference recording. **Only present on `end` events when `record="true"`** |

## Examples

### Handling callbacks in Node.js

```javascript Express handler for conference events theme={null}
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));

app.post('/conference-events', (req, res) => {
  const {
    ConferenceAction,
    ConferenceUUID,
    ConferenceName,
    CallUUID,
    From,
    ConferenceCurrentSize,
    RecordingUrl
  } = req.body;

  switch (ConferenceAction) {
    case 'enter':
      console.log(`${From} joined ${ConferenceName} (${ConferenceCurrentSize} participants)`);
      // Notify other participants, update dashboard, etc.
      break;

    case 'exit':
      console.log(`${From} left ${ConferenceName} (${ConferenceCurrentSize} remaining)`);
      break;

    case 'start':
      console.log(`Conference ${ConferenceName} started - UUID: ${ConferenceUUID}`);
      // Begin any server-side session tracking
      break;

    case 'end':
      console.log(`Conference ${ConferenceName} ended`);
      if (RecordingUrl) {
        console.log(`Recording available at: ${RecordingUrl}`);
        // Store recording URL, notify participants, etc.
      }
      break;

    default:
      console.log(`Unknown conference event: ${ConferenceAction}`);
  }

  res.status(200).send('OK');
});
```

### Handling callbacks in Python

```python Flask handler for conference events theme={null}
from flask import Flask, request

app = Flask(__name__)

@app.route('/conference-events', methods=['POST'])
def conference_events():
    action = request.form.get('ConferenceAction')
    conference_name = request.form.get('ConferenceName')
    conference_uuid = request.form.get('ConferenceUUID')
    call_uuid = request.form.get('CallUUID')
    caller = request.form.get('From')
    size = request.form.get('ConferenceCurrentSize')
    recording_url = request.form.get('RecordingUrl')

    if action == 'enter':
        print(f"{caller} joined {conference_name} ({size} participants)")

    elif action == 'exit':
        print(f"{caller} left {conference_name} ({size} remaining)")

    elif action == 'start':
        print(f"Conference {conference_name} started: {conference_uuid}")

    elif action == 'end':
        print(f"Conference {conference_name} ended")
        if recording_url:
            print(f"Recording: {recording_url}")
            # Persist URL, send email notification, etc.

    return 'OK', 200
```

## Example callback payload

```http Enter event theme={null}
POST /conference-events HTTP/1.1
Host: yourapp.com
Content-Type: application/x-www-form-urlencoded

ConferenceAction=enter
ConferenceUUID=3f9a1b2c-44de-4f0a-b832-7c0a12345678
ConferenceName=WeeklyStandup
CallUUID=9a0e0208-d01a-4572-9a04-fe583a05ac53
From=918071387423
To=919624705678
ConferenceCurrentSize=3
Timestamp=2026-05-19 10:32:15
```

```http End event with recording theme={null}
POST /conference-events HTTP/1.1
Host: yourapp.com
Content-Type: application/x-www-form-urlencoded

ConferenceAction=end
ConferenceUUID=3f9a1b2c-44de-4f0a-b832-7c0a12345678
ConferenceName=WeeklyStandup
CallUUID=9a0e0208-d01a-4572-9a04-fe583a05ac53
From=918071387423
To=919624705678
ConferenceCurrentSize=0
RecordingUrl=https://recordings.vobiz.ai/conf-3f9a1b2c.mp3
Timestamp=2026-05-19 10:58:47
```
