Skip to content

Authenticating Zoom Meetings accounts with Nylas

Authenticate users with Zoom to automatically add conferencing to events. You create a Zoom OAuth app, connect it to Nylas as a conferencing connector, then authenticate individual users.

  1. Sign in to your Zoom account and go to the Zoom App Marketplace.
  2. From the Develop menu at the top-right, select Build app.
  3. Select General app, then click Create.
  4. Copy the client ID and client secret and store them securely. You’ll need these when you create the Nylas connector.
  5. Optionally, click the pencil symbol to rename your Zoom app.
  6. For the management option, select User-managed. This lets your users authenticate without organization-wide admin approval.
  7. On the Basic Information page, scroll to OAuth information and add your redirect URI:
    • If you’re using Nylas Hosted OAuth, enter the URI for your region:
      • U.S.: https://api.us.nylas.com/v3/connect/callback
      • E.U.: https://api.eu.nylas.com/v3/connect/callback
    • If you have Nylas applications in both regions, add one in the OAuth redirect URI field and the other in the allowlist further down the page.
    • If you’re using Bring Your Own Authentication, enter your project’s callback URI.
  8. Enable both Use Strict Mode for Redirect URLs and Subdomain Check for security.
  9. In the left navigation, select Scopes, then click Add scopes and select:
    • meeting:write:meeting (create a meeting for a user)
    • meeting:update:meeting (update a meeting)
    • meeting:delete:meeting (delete a meeting)
    • user:read:user (view a user)
  10. Click Done, then Add app now.

You don’t need to publish your Zoom app on the Marketplace if you’re only authenticating users from your own organization. If you need users from multiple domains, you must go through the Zoom app review process.

  1. Create a Zoom connector either:
    • From the Nylas Dashboard: Click Connectors, click the plus sign next to Zoom, and enter the client ID and client secret from your Zoom app.
    • By API: Make a POST /v3/connectors request with the client_id and client_secret. Don’t include scopes in the connector request. Scopes are configured directly on your Zoom OAuth app.
  2. (Optional) To redirect users to a specific URL after Zoom authentication, add that URL to your application from the Nylas Dashboard or by making a POST /v3/applications/redirect-uris request.

The user must already have a valid Nylas grant ID before you connect them to Zoom. You can use Hosted OAuth or Bring Your Own Authentication.

First, redirect the user to the Zoom authorization URL:

After the user authorizes, Zoom redirects to your callback with a code parameter. Exchange it for a Zoom grant ID:

Save the returned grant ID as the user’s conf_grant_id.

Connect to Zoom using Bring Your Own authentication

Section titled “Connect to Zoom using Bring Your Own authentication”

If you already have Zoom credentials, follow the Zoom OAuth documentation to get a refresh_token, then pass it to Nylas:

curl --request POST \
--url 'https://api.us.nylas.com/v3/connect/custom' \
--header 'Content-Type: application/json' \
--header 'Authorization: <NYLAS_API_KEY>' \
--data '{
"provider": "zoom",
"settings": {
"refresh_token": "<ZOOM_REFRESH_TOKEN>"
}
}'

Save the returned grant ID as the user’s conf_grant_id.

Once a user has a Zoom conf_grant_id, pass it in the autocreate object when creating an event. Nylas contacts Zoom to create the meeting, then attaches the conferencing details to the event. Note that Nylas uses the provider value zoom for authentication and connectors, but Zoom Meeting in the event conferencing object.

curl --request POST \
--url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/events?calendar_id=<CALENDAR_ID>' \
--header 'Accept: application/json, application/gzip' \
--header 'Authorization: Bearer <NYLAS_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"title": "Philosophy Club Zoom Meeting",
"status": "confirmed",
"busy": true,
"conferencing": {
"provider": "Zoom Meeting",
"autocreate": {
"conf_grant_id": "<USER_ZOOM_GRANT_ID>"
}
},
"participants": [
{
"name": "Leyah Miller",
"email": "[email protected]"
},
{
"name": "Nyla",
"email": "[email protected]"
}
],
"description": "Come ready to talk philosophy!",
"when": {
"start_time": 1674604800,
"end_time": 1722382420,
"start_timezone": "America/New_York",
"end_timezone": "America/New_York"
}
}'

You can also customize Zoom meeting settings like waiting rooms, recording, and muting. For the full details, see Adding conferencing to events.

You can also attach Zoom conferencing to bookings created through Nylas Scheduler. The setup is the same: create a Zoom OAuth app, connector, and authenticate users as described above. Then pass the conf_grant_id in the Scheduler configuration instead of individual event requests.

To configure Zoom on a Scheduler booking page, see Add conferencing to bookings. If you’re using the Scheduler Editor component, you can pass the Zoom grant ID through the conferenceProviders prop. See the Scheduler Editor component reference for details.

  • Create/update failures are atomic. When Nylas creates or updates a Zoom conference for an event, the entire operation fails if the Zoom call fails. The parent event is not modified.
  • Field sync on updates. If you update an event’s time, timezone, duration, title, or description, Nylas updates those fields on the Zoom conference too.
  • Deletes are best-effort. Nylas deletes the provider event first, then contacts Zoom to delete the conference (requires the meeting:delete:meeting scope). If the Zoom delete fails, the event is still removed but the orphaned Zoom meeting persists.
  • Past events. If you create or modify an event to occur in the past, Nylas can update the provider event, but Zoom schedules the conference for the time of the request instead.