# Connect to Zoom API with OAuth2.0

**URL:** <https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233>\
**Category:** Ask a question\
**Created:** [January 18, 2022, 10:39pm UTC](https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233 "2022-01-18T22:39:23Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ryan\_Fitzpatrick](https://sea2.discourse-cdn.com/flex020/user_avatar/community.parabola.io/ryan_fitzpatrick/32/1813_2.png) [@Ryan\_Fitzpatrick](https://community.parabola.io/u/Ryan_Fitzpatrick)\
**Post date:** [January 18, 2022, 10:39pm UTC](https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233/1 "2022-01-18T22:39:23Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![Adam\_R](https://sea2.discourse-cdn.com/flex020/user_avatar/community.parabola.io/adam_r/32/2207_2.png) [@Adam\_R](https://community.parabola.io/u/Adam_R)\
**Post date:** [January 19, 2022, 1:21am UTC](https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233/2 "2022-01-19T01:21:28Z")

</div>

Hey @Ryan_Fitzpatrick 👋

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](https://marketplace.zoom.us/docs/guides/auth/oauth), as well as their [Create an OAuth App](https://marketplace.zoom.us/docs/guides/build/oauth-app) guide.

Hopefully by referencing their documentation along with our [guide for using OAuth2.0 in Parabola](https://parabola.io/integration/api#using-oauth-2-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!

---

<div class="post-metadata">

**Author:** ![Ryan\_Fitzpatrick](https://sea2.discourse-cdn.com/flex020/user_avatar/community.parabola.io/ryan_fitzpatrick/32/1813_2.png) [@Ryan\_Fitzpatrick](https://community.parabola.io/u/Ryan_Fitzpatrick)\
**Post date:** [January 19, 2022, 9:29pm UTC](https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233/3 "2022-01-19T21:29:20Z")

</div>

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.

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

```

---

<div class="post-metadata">

**Author:** ![daniel](https://sea2.discourse-cdn.com/flex020/user_avatar/community.parabola.io/daniel/32/732_2.png) [@daniel](https://community.parabola.io/u/daniel)\
**Post date:** [January 19, 2022, 9:40pm UTC](https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233/4 "2022-01-19T21:40:30Z")

</div>

Hey @Ryan_Fitzpatrick

Before we start, we’ll need to register an app. To register your app, visit the [Zoom App Marketplace](https://marketplace.zoom.us/) 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

✅ Step 1: Authorization Request URL

 ![image (2)](https://us1.discourse-cdn.com/flex020/uploads/parabola/original/2X/0/085b64fb7d1ab2937c62627e82a4e517a5408cc3.png)

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**](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)

✅ Step 2: Access Token Request URL

 ![image (3)](https://us1.discourse-cdn.com/flex020/uploads/parabola/original/2X/b/b097568756a75e85384d294f56464d60f9c5f984.png)

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**](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](https://www.base64encode.org/) “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”

✅ Step 3: Refresh Token Request URL

 ![image (4)](https://us1.discourse-cdn.com/flex020/uploads/parabola/original/2X/1/118a85980efa7e0a95bd08accc4c9fe85aa60997.png)

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**](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](https://www.base64encode.org/) “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. 🙂

---

<div class="post-metadata">

**Author:** ![Ryan\_Fitzpatrick](https://sea2.discourse-cdn.com/flex020/user_avatar/community.parabola.io/ryan_fitzpatrick/32/1813_2.png) [@Ryan\_Fitzpatrick](https://community.parabola.io/u/Ryan_Fitzpatrick)\
**Post date:** [January 19, 2022, 10:14pm UTC](https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233/5 "2022-01-19T22:14:48Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![daniel](https://sea2.discourse-cdn.com/flex020/user_avatar/community.parabola.io/daniel/32/732_2.png) [@daniel](https://community.parabola.io/u/daniel)\
**Post date:** [January 19, 2022, 10:34pm UTC](https://community.parabola.io/t/connect-to-zoom-api-with-oauth2-0/2233/6 "2022-01-19T22:34:56Z")

</div>

Glad to hear it, @Ryan_Fitzpatrick!
