Connect to Zoom API with OAuth2.0

Please forgive me as I’m trying to learn…

I work for a school district and we’re beginning to send more and more students home for remote learning. We use Zoom for remote learning.

My goal is to create a flow where I can periodically identify inactive users on my Zoom account and change their user type from “licensed” to “basic” so that we don’t run out of available licenses. I’ve already created a JWT app in Zoom, but I’m hoping I can generate my token programmatically so I don’t have to go to Zoom and copy/paste my token each time I want to run my workflow.

Is this possible? If so, how would you recommend going about doing this?

Hey @Ryan_Fitzpatrick :wave:

Good question! Good new and bad new – we unfortunately can’t dynamically update the JWT token, however we can integrate with Zoom using a different form of authentication: OAuth2.0

While it’s a bit more involved, this method for authentication will not require you to make manual updates allowing you to run the flow on a recurring schedule. I’d recommend checking out Zoom’s documentation on OAuth2.0, as well as their Create an OAuth App guide.

Hopefully by referencing their documentation along with our guide for using OAuth2.0 in Parabola, you’ll be able to successfully authenticate this connection.

NOTE: You’ll want to pass over any of their optional code_challenge parameters.

OAuth is definitely a bit tricky, so feel free to let us know if you run into any questions!


Update: Be sure to review @daniel’s post below for a more detailed implementation guide!

It’s definitely a bit tricky. I’ve made my OAuth 2.0 app in Zoom and followed the guide that you shared multiple times, but so far I’ve been unsuccessful. I’m not getting an error when I try to authorize.

An error occurred during authorization: Unable to grab access token from API response.

Hey @Ryan_Fitzpatrick

Before we start, we’ll need to register an app. To register your app, visit the Zoom App Marketplace and click Develop in the dropdown menu in the top-right corner of the page. Select Build App. A new page will appear displaying the available app types. Click Create in the OAuth option to continue.

After creating your application, your Client ID and Client Secret will be generated. Those tokens will be used to authorize your API requests.

Zoom API - OAuth 2.0 Instructions

:white_check_mark: Step 1: Authorization Request URL

Enter this URL into the Authorization Request URL input field. Be sure to insert your real client id as a URL Parameter: https://zoom.us/oauth/authorize?response_type=code&client_id=YOUR+CLIENT+ID&redirect_uri=https%3A%2F%2Fparabola.io%2Fapi%2Fsteps%2Fgeneric_api%2Fcallback

:white_check_mark: Step 2: Access Token Request URL

Enter this URL into the Access Token Request URL. Be sure to add “code” as a URL parameter key with a blank value: https://zoom.us/oauth/token

Next, select “POST” as the method. You’ll also want to add 2 custom headers:

  1. Set the first Header Key value to " Authorization "
  2. Set the Header Value to “Basic client_id:client_secret”
  3. Be sure to base64 encode “client_id:client_secret”
  4. Set the second Header Key value to " Content-Type "
  5. Set the Header Value to “application/x-www-form-urlencoded”

:white_check_mark: Step 3: Refresh Token Request URL

Enter this URL into the Refresh Token Request URL. Be sure to add “refresh_token” as a URL parameter key with a blank value: https://zoom.us/oauth/token

Next, select “POST” as the method. You’ll also want to add 2 custom headers:

  1. Set the first Header Key value to " Authorization "

  2. Set the Header Value to “Basic client_id:client_secret”

  3. Be sure to base64 encode “client_id:client_secret”

  4. Set the second Header Key value to " Content-Type "

  5. Set the Header Value to “application/x-www-form-urlencoded”

Please let me know if you have any questions! Hope this helps. :slightly_smiling_face:

1 Like

I ended up getting it working. The piece I was missing was to base64 encode “client_id:client_secret”

Thanks for your help! This will save me so much time!

1 Like

Glad to hear it, @Ryan_Fitzpatrick!