Skip to main content
The conferencing layer gives a PAL its own email identity so it can be invited to meetings just like a human teammate. Schedule it on a future calendar event, or invite it to a meeting that’s already running.

How it works

When you set a username on the conferencing layer, Tavus provisions a real, invitable email address for the PAL (for example ada@tavusinvite.com). From there:
  1. You (or anyone on the PAL’s allowlist) send a Google Calendar invite to that email, with a Google Meet link attached.
  2. Tavus receives the invite, validates the sender, and replies Accepted to the organizer.
  3. For a scheduled meeting, the PAL joins the Google Meet call about one minute before the start time. For a meeting already in progress, it joins shortly after the invite is accepted (see Joining a meeting that’s already in progress).
  4. The PAL participates with its face’s likeness and voice.

Prerequisites

  • A PAL with a default_face_id. This is required whenever the conferencing layer is provided - the face supplies the likeness and voice the PAL uses in the meeting. A request that sets the conferencing layer without a default face is rejected with a 400.
  • A standard full pipeline PAL (system prompt, LLM, TTS, etc.) configured as you would for any CVI conversation.

Configuring the conferencing layer

Add a conferencing object to layers when you create a PAL:
{
  "pal_name": "Anna",
  "system_prompt": "You are Anna, a helpful meeting assistant who takes notes and answers questions.",
  "pipeline_mode": "full",
  "default_face_id": "r90bbd427f71",
  "layers": {
    "conferencing": {
      "username": "anna",
      "allowlist": ["alex@acme.com", ".*@acme\\.com"]
    }
  }
}
A successful create returns the derived email so you know what address to invite:
{
  "pal_id": "pcb7a34da5fe",
  "pal_name": "Anna",
  "created_at": "2026-06-11T12:00:00Z",
  "conferencing_email": "anna@tavusinvite.com"
}

username

The local part of the PAL’s meeting email. The full address is rendered as <username>@tavusinvite.com. Rules:
  • Length & characters: must be 2+ characters, start and end with an alphanumeric character, and may contain ., _, or - in between (pattern: ^[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]$).
  • Case-insensitive: usernames are stored and matched in lowercase. Anna and anna are the same identity.
  • Reserved names: usernames matching botN (e.g. bot1, bot42) are reserved for internal use and rejected.
  • Global uniqueness: see Username uniqueness & limitations below.

allowlist

An optional list controlling who is allowed to invite the PAL to meetings. Each entry is either:
  • an exact email address - e.g. "alex@acme.com", or
  • a regular expression matched against the sender’s email - e.g. ".*@acme\\.com" to allow anyone at acme.com.
Behavior:
  • If allowlist is empty or omitted, any sender can invite the PAL.
  • If allowlist is set, calendar invites from senders that don’t match any entry are rejected (the PAL declines), and the invite never schedules a join.
  • Google’s forwarding address (forwarding-noreply@google.com) is always permitted internally; you don’t need to add it.
Use the allowlist to keep a PAL’s meeting identity private to your team or customers. Pair an exact-match list for known contacts with a domain regex (.*@yourcompany\.com) to cover everyone in your org.

Checking availability before you commit

Before saving a username, you can check whether it’s free with Check Conferencing Username Availability:
curl --request GET \
  --url 'https://tavusapi.com/v2/pals/check-username?username=anna' \
  --header 'x-api-key: <api-key>'
{ "available": true }
If the name is taken or invalid, available is false with a reason:
{ "available": false, "reason": "Username is already taken." }

Username uniqueness & limitations

All non-whitelabel PALs share a single email domain (tavusinvite.com), so the username is a global namespace:
  • A username must be unique across the entire tavusinvite.com domain, not just within your account. If another PAL - including one owned by a different customer - already uses anna, you cannot also use anna; you’ll get a 400 telling you to choose a different username.
  • This is first-come, first-served. Pick a distinctive username (for example, prefix it with your product or company name like acme-anna) to avoid collisions and to reserve the identity you want.
  • Renaming a PAL’s username frees the old name and provisions the new one. Any calendar invites that were sent to the old address will no longer reach the PAL, so prefer choosing a stable username up front.

Join a Google Meet via API

Instead of sending a calendar invite, you can have a PAL join an existing Google Meet by passing the Meet link when you Create Conversation:
curl --request POST \
  --url https://tavusapi.com/v2/conversations \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '{
    "face_id": "r90bbd427f71",
    "pal_id": "pcb7a34da5fe",
    "meeting_url": "https://meet.google.com/xgq-epxn-ccp"
  }'
The PAL begins joining shortly after the API returns a successful response. Use this when you already have a live Google Meet link and want to dispatch the PAL programmatically (for example from your own scheduling UI or an ad hoc demo). The calendar invite flow below is better when you want the PAL to accept invites and join on a schedule.
This path does not use the conferencing allowlist - authorization is your API key.

Scheduling calls via Google Calendar invites

Once a PAL has a conferencing email, scheduling it into a meeting is exactly like inviting a coworker:
  1. Create a Google Calendar event and add a Google Meet link to it (Google Calendar’s “Add Google Meet video conferencing”).
  2. Invite the PAL’s email (e.g. anna@tavusinvite.com) as a guest.
  3. Send the invite. The PAL replies Accepted to the organizer once the invite is received and authorized.
  4. The PAL joins the Google Meet call about one minute before the start time and participates with its face’s likeness and voice.
The invite must include a Google Meet link. If a calendar invite has no Google Meet link, the PAL replies with a Declined, since there is nothing to join.

Joining a meeting that’s already in progress

You don’t have to schedule the PAL ahead of time. If a Google Meet is already running, invite the PAL’s conferencing email to that calendar event the same way you would for a future meeting - add the PAL’s address (for example anna@tavusinvite.com, from its configured username) as a guest on the event that holds the active Google Meet link. The PAL accepts the invite and joins the call shortly after, rather than waiting until one minute before a future start time. The same rules apply: the event must include a Google Meet link, and the sender must pass the PAL’s allowlist if one is set.

Recurring meetings

Recurring calendar events are supported. The PAL will join each occurrence of the series at its scheduled time. Editing or cancelling occurrences is reflected automatically (see below).

Updates, reschedules, and cancellations

The system stays in sync with changes you make in Google Calendar:
  • Reschedule (new time) or change the meeting link → the join is automatically rescheduled to the new time/URL.
  • Other edits (title, description, guest list) → metadata is updated without disrupting the scheduled join.
  • Cancel the event → the scheduled join is cancelled. For a recurring series, cancelling a single occurrence cancels only that one; cancelling the series cancels all remaining occurrences.

Allowlist enforcement at invite time

If the PAL has an allowlist, the invite’s sender (the calendar event organizer) must match it. Invites from senders not on the allowlist are silently rejected and no join is scheduled. With no allowlist, anyone who can email the PAL’s address can schedule it.

Supported meeting platforms

Currently, PALs can only join Google Meet calls. The invite must contain a Google Meet link.
Zoom and Microsoft Teams support is coming soon. Invites with Zoom or Teams links are recognized, but the PAL cannot join those calls yet - only Google Meet is live today.

Modifying conferencing on an existing PAL

Use Patch PAL to add, change, or remove conferencing settings with JSON Patch operations:
# Give an existing PAL a meeting identity
curl --request PATCH \
  --url https://tavusapi.com/v2/pals/{pal_id} \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '[
    { "op": "add", "path": "/layers/conferencing/username", "value": "anna" }
  ]'

# Update the allowlist
curl --request PATCH \
  --url https://tavusapi.com/v2/pals/{pal_id} \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '[
    { "op": "replace", "path": "/layers/conferencing/allowlist", "value": ["alex@acme.com", ".*@acme\\.com"] }
  ]'
Changing the username changes the PAL’s email identity. Calendar invites sent to the previous address will no longer reach the PAL, so re-invite the PAL using its new email after a rename.

End-to-end example

// 1. Create a PAL with a meeting identity
{
  "pal_name": "Anna",
  "system_prompt": "You are Anna, a meeting assistant. Greet attendees, take notes, and answer questions about the agenda.",
  "pipeline_mode": "full",
  "default_face_id": "r90bbd427f71",
  "layers": {
    "conferencing": {
      "username": "acme-anna",
      "allowlist": [".*@acme\\.com"]
    }
  }
}
// Response - invite this address from any @acme.com calendar
{
  "pal_id": "pcb7a34da5fe",
  "pal_name": "Anna",
  "conferencing_email": "acme-anna@tavusinvite.com"
}
Then, from an @acme.com Google account, create a calendar event with a Google Meet link and invite acme-anna@tavusinvite.com. Anna replies Accepted, and joins the call automatically a minute before it begins.
See Create PAL and Patch PAL for the full request schema.