# Adding conferencing to events

Source: https://developer.nylas.com/docs/v3/calendar/add-conferencing/

While online calendar events _can_ reflect in-person meetings, they're often used to schedule virtual and phone conferencing meetings. The Nylas Calendar API allows you to read conferencing details from an event, and create conferences automatically when you create events.

![A new Google Calendar event. Its subject is "Let's Celebrate", and a Zoom link is in the Conferencing section.](/_images/calendar/conference-sync-beta.png "Google Calendar event with conferencing")

Nylas can [natively read conferencing information](#read-conferencing-details), and you can [manually write conferencing details](#manually-add-conferencing-to-an-event) into an event when you create it. You can also use a provider connector to [automatically create and attach conferencing information](#enable-auto-conferencing) when you create an event.

> **Info:** 
> **Nylas supports automatic conference creation with Google Meet, Microsoft Teams, and Zoom**. You need an active Microsoft 365 subscription to create conferencing details for Microsoft Teams.

## The Conferencing object

Events contain conference details in the `conferencing` sub-object, as in the JSON snippet below.

```json
"conferencing": {
  "provider": "Google Meet",
  "details": {
    "url": "https://meet.google.com/***-****-***",
    "pin": "xyz",
    "phone": [
      "+1 234 555 6789"
    ]
  }
}
```

Each conferencing service provider structures the details differently, so the content of the `conferencing` object can vary. See the [Create Event schema](/docs/v3/api-references/ecc/#post-/v3/grants/-grant_id-/events) for per-provider details.

## Read conferencing details

Nylas automatically reads conferencing details on an event when they're available. (Remember, not all events will have an associated conference!) Regardless of how they're formatted on the provider's Event, Nylas parses them into the `conferencing` object for easier reading.

Nylas can currently read conferencing details from the following providers:

- Google Meet
- GoToMeeting
- Skype for Business
- Skype for Consumer
- Teams for Business
- WebEx
- Zoom Meeting

## Manually add conferencing to an event

You can manually add conferencing to a meeting that you create by adding the `conferencing` object with the required details — usually the provider and URL. This option requires no additional set up steps, and can be the most flexible if you work with many different conferencing providers.

When you manually add conferencing details, you must first create the conference on the provider, then copy the required details to the event request payload*before* you make a [Create Event request](/docs/v3/api-references/ecc/#post-/v3/grants/-grant_id-/events). Nylas does not create the conference instance for you when you manually add the information.

```bash

curl --compressed --request POST \
  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/events?calendar_id=<CALENDAR_ID>' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "title": "Annual Philosophy Club Meeting",
    "busy": true,
    "conferencing": {
      "provider": "Google Meet",
      "details": {
        "url": "https://meet.google.com/***-****-***",
        "pin": "xyz",
        "phone": ["+1 234 555 6789"]
      }
    },
    "participants": [
      {
        "name": "Leyah Miller",
        "email": "leyah@example.com"
      },
      {
        "name": "Nyla",
        "email": "nyla@example.com"
      }
    ],
    "description": "Come ready to talk philosophy!",
    "when": {
      "start_time": 1674604800,
      "end_time": 1722382420,
      "start_timezone": "America/New_York",
      "end_timezone": "America/New_York"
    },
    "location": "New York Public Library, Cave room",
    "recurrence": [
      "RRULE:FREQ=WEEKLY;BYDAY=MO",
      "EXDATE:20211011T000000Z"
  ],
}'

```

> **Warn:** 
> **Nylas validates only that the required fields are included and that they contain a value in the expected format**. Nylas cannot validate that the details are valid conference lines or URLs.

You can create events that contain [metadata](/docs/dev-guide/metadata/). Nylas' response includes the conferencing details object.

## Enable auto-conferencing

You can create connectors for conferencing providers so Nylas can automatically create conferences for you when you create events. Nylas currently supports auto-conferencing for Google Meet, Microsoft Teams, and Zoom.

If you already have a Google or Microsoft auth connector, you can use that same auth connector to connect to Google Meet and Microsoft Teams, respectively. To automatically create Zoom meetings, you must first [create a Zoom application and connector](/docs/provider-guides/zoom-meetings/).

When you have your connectors set up, you specify the provider as usual, but include `autocreate` in the `conferencing` object instead of passing the `details` object. Depending on the provider you might need to specify setting in the `autocreate` object.

```json
"conferencing": {
  "provider": "Google Meet",
  "autocreate": {}
}
```

The `autocreate` object is an optional dictionary of parameters that you can use to customize the conference. Because these are provider-specific and may be subject to rules set by your organization, Nylas does not validate any additional parameters that you pass in this object.

### Autocreate scopes

OAuth providers use the concept of "scopes" to define what items a third party can access. To use autocreate, you might need to add the following scopes to your OAuth provider application.

- **Microsoft**: `OnlineMeetings.ReadWrite`.
- **Google**: No extra scopes required, conferencing is considered part of the event.
- **Zoom Meetings**: `meeting:write:meeting`, `meeting:update:meeting`, `meeting:delete:meeting`, and `user:read:user`. Set these on your Zoom OAuth application. Do not set them on your Nylas Zoom connector.

### Customize Zoom Meetings

You can customize settings for your autocreated Zoom meetings by including the `conf_settings` object in your [Create Event request](/docs/reference/api/events/create-event/). The `conf_settings` object contains a `settings` property where you can pass parameters from [Zoom's Create a Meeting API](https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#operation/meetingCreate).

> **Warn:** 
> **Nylas does not validate the parameters you pass in `conf_settings`**. Test these settings thoroughly because they override the default Nylas settings.

```bash {7-15}
curl --request POST \
  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/events?calendar_id=<CALENDAR_ID>' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --data '{
    "title": "Customized Zoom Meeting",
    "conferencing": {
      "provider": "Zoom Meeting",
      "autocreate": {
        "conf_grant_id": "<NYLAS_GRANT_ID>",
        "conf_settings": {
          "settings": {
            "join_before_host": true,
            "waiting_room": false,
            "mute_upon_entry": true,
            "host_video": true,
            "participant_video": false,
            "auto_recording": "cloud",
            "meeting_authentication": true
          }
        }
      }
    }
  }'
```

Review your organization's security requirements when using `conf_settings`, as some options (like disabling waiting rooms) reduce security. For Zoom setup instructions and provider-specific behaviors, see [Authenticating Zoom Meetings accounts](/docs/provider-guides/zoom-meetings/).

## Get event conference information

When available, Nylas fetches conferencing information from the `conferenceData` field on Google Calendar, or from `location/description` on Microsoft Graph. It then parses that data into the `conferencing` object in Nylas.

To view the `conferencing` object, make either a [Get Events request](/docs/v3/api-references/ecc/#get-/v3/grants/-grant_id-/events) or a [Get Event request](/docs/v3/api-references/ecc/#get-/v3/grants/-grant_id-/events/-event_id-).

The following examples show a Get Event request and a response from Nylas with the conference details.

```bash
curl --compressed --request GET \
  --url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/events?calendar_id=<CALENDAR_ID>&start=<TIMESTAMP>&end=<TIMESTAMP>' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json'

```

```json [getConfv3-Response (JSON)]

{
  "request_id": "cbd60372-df33-41d3-b203-169ad5e3AAAA",
  "data": [
    {
      "busy": true,
      "calendar_id": "primary",
      "conferencing": {
        "details": {
          "meeting_code": "ist-****-tcz",
          "url": "https://meet.google.com/ist-****-tcz"
        },
        "provider": "Google Meet"
      },
      "created_at": 1701974804,
      "creator": {
        "email": "anna.molly@example.com",
        "name": ""
      },
      "description": null,
      "grant_id": "1e3288f6-124e-405d-a13a-635a2ee54eb2",
      "hide_participants": false,
      "html_link": "https://www.google.com/calendar/event?eid=NmE0dXIwabQAAAA",
      "ical_uid": "6aaaaaaame8kpgcid6hvd0q@google.com",
      "id": "6aaaaaaame8kpgcid6hvd",
      "object": "event",
      "organizer": {
        "email": "anna.molly@example.com",
        "name": ""
      },
      "participants": [
        {
          "email": "jenna.doe@example.com",
          "status": "yes"
        },
        {
          "email": "anna.molly@example.com",
          "status": "yes"
        }
      ],
      "read_only": true,
      "reminders": {
        "overrides": null,
        "use_default": true
      },
      "status": "confirmed",
      "title": "Holiday check in",
      "updated_at": 1701974915,
      "when": {
        "end_time": 1701978300,
        "end_timezone": "America/Los_Angeles",
        "object": "timespan",
        "start_time": 1701977400,
        "start_timezone": "America/Los_Angeles"
      }
    }
  ]
}


```

## Conferencing limitations

- Nylas can read, but cannot create, Zoom, WebEx, and GoToMeeting conference details.
- Nylas doesn't support autocreate for cross-platform conferencing. This means that if you create a Google Calendar event, you cannot autocreate a Microsoft Teams conference for the event, and vice versa. Zoom conferencing is platform-agnostic.
  - If you need to create a cross-platform conference, you can [manually add the conferencing details](#manually-add-conferencing-to-an-event) instead.

You can also add conferencing to bookings created through [Nylas Scheduler](/docs/v3/scheduler/add-conferencing/).