Get all past meetings by range of 2 timestamps

Hi,
I want to create a new app for the App Marketplace that will get all the meetings a user participated in (for all users).
My preferred solution would be to once a week using an API call to get all the meetings a user participated in (using List meetings API). But I couldn’t find a way to limit the meetings I’ll get by a timestamp (only meetings between X date and time and Y date and time).
So I figured I need to have a webhook to notify me whenever a meeting end in that account, and later using the past meeting participants API to get the participates of the meeting.
Is there a better way of doing it? I need the meetings of specific known users for my app, but can get all the meetings in the organization, if possible, and filter the list.

Thanks!

Which Endpoint/s?
https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetings
https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/pastmeetingparticipants

Hey @maayan, thanks for posting and using Zoom!

Have you tried using the List Meetings endpoint? You can filter by to and from date.

Thanks,
Tommy

@tommy - Thanks, that will definetly get me the information I need!

And on the same subject - if I want my app (which will be deployed to the marketplace) to have only user permissions (not account-level permissions), Is there any API that I can use that will give me all past meetings of a specific user (the one who installed the app) in a specific range of time?
If not - should I use the webhooks on that case?

Thanks!

1 Like

Hey @maayan,

Unfortunately we do not have a User Level Past Meetings endpoint that is filterable by date.

Two solutions would be to save the Create Meeting response (or subscribe to meeting created / meeting updated webhook) to a meetings table, and query them by date from that table instead of from the Zoom API.

Thanks,
Tommy

@tommy Thanks for the quick response!

About the solutions you suggested - I will not be the one who will create the meetings for the users, just want to show them some statistical analysis. So I’ll be using the webhook - I thought of using the meeting end event, is there a reason I should prefer the meeting created/updated as you suggested?
When using the meeting ended webhook, I would be able to call right away to your API and get the details and participants in the meeting, no?

And using that way (API /past_meetings/{meetingUUID}/participants) - I can only get the participants who signed in the meeting and are on pro or higher plan, or all the participants?

And about the Dashboard list meeting you mentioned before - I see it’s only open for business or higher plans, so:

  1. Is it enough that whoever will install this app will be on the business plan and an admin? or for me to get information about the meetings of other users they also need to be in the business plan?
  2. If I’m on a free plan - can I test my app somehow? (currently I’m getting 405 when trying to access the API using the access key I got from the oAuth2 flow)
  3. In my app I want to ask for this scope - dashboard_meetings:read:admin - If the users are not on the business plan - will they be able to install the app? and if yes - only when I will query this API I’ll get a declined response from Zoom?
  4. will a regular user (not admin) will be able to install my account-level app?

To summarize - I want to get statistical information about the meetings, and what to see how I can get this information if not all my users are on the pro or higher plan :pray:

Sorry for the long list of questions, I’m trying to decide which flow to use… :slight_smile:
Thanks!

Hey @maayan,

Correct!

You will get all the participants from that meeting.

Yep, if the user has the admin permissions to install the app, and has the prereqs for the Dashboard features, the endpoint will work for them.

Which API gives you this error?

No, they will not be able to install your app. A message will be shown saying they do not have the dashboard feature.

If the regular user has the App Marketplace, integration, and dashboard permissions, then yes.

Let me know if that clears things up! :slight_smile:

Thanks,
Tommy

@tommy - Thanks for the super detailed reply!
It did help me understand better, and this time I only have few follow-up questions :wink:

I tested my app which needs the dashboard permissions (business account), and an admin to approve using my account (basic, not an admin).
So after I hit the authorize button, and got the access token for my user I tried to access this API - /metrics/meetings and got 405. I tried it multiple times, I remember at least one time where I got an error saying the token I got does not fit the scope for the API. there were also some other errors (maybe even other HTTP statuses)

When testing my own app (as described above), I could authorize it. Was it because the app was in test mode?

What do you mean by integration?

And another question - how long will it take for zoom to approve my request to upload an app to the marketplace?

And to make sure - let’s say some of my clients have dashboard access and some are only on the pro plan. I want to support both ways - webhooks for the pro plan and dashboard API for the business plan (I prefer the dashboard when I can cause it’s giving me access to all the users). I need to have two separate apps, right?

Thanks! and have a good day (for me it’s past midnight :sleeping:)

Hey @maayan, you are welcome! :slight_smile:

Can you share the actual error message? Also please share your request url, 405 usually means something is setup wrong on requester end.

Do you have the dashboard feature enabled? Basically if you are able to choose the dashboard scopes in your app then you are good.

The permissions here:

Applications are reviewed on a first in first out type basis, and currently we are seeing a huge volume in submissions. So could take a few days. To expedite the process, make sure you have followed the submission checklist.

Currently yes, but we are working on conditional scopes which would make it possible to have one app.

Now it is past midnight for me haha! :slight_smile:

Let me know if you have additional questions.

Thanks,
Tommy

Hi @tommy, thanks again for the detailed response, and for replying when it was past midnight for you!
I worked on some other stuff during that time, so didn’t respond in few days :pray:

I found the error, I was using a POST request instead of a GET request.
now in the response, I see this message - Only available for paid account and enabled Dashboard feature.
My account is not a paid account, and I don’t have the dashboard available.
But my app specify this specific scope - dashboard_meetings:read:admin. So why am I able to press the authorize button while signed in to my account?
This is what you wrote about it before:

I have a basic account. Is there a way to test my app using this account?

Regarding the oAuth2 authentication flow:
I’m using multi-tenancy architecture, which means that for every client I have a subdomain
like - client1.myapp.com, client2.myapp.com, etc…
In my test zoom app, I set the redirect URL and whitelist URL to be https://*.myapp.com (I’m currently developing locally, so - https://*.ngrok.io).
I tested it using my app, and indeed when supplying a full redirect URL (like https://de842a95.ngrok.io/ which was my supplied ngrok URL at the time) to https://zoom.us/oauth/authorize it worked! I just want to make sure it will work for me when I will deploy my app :pray:

Another question - the OAuth flow will be started by a user clicking on some button on my site, and being redirected to https://zoom.us/oauth/authorize right? if so, I can insert whatever subdomain I want in that stage, and make sure the client will then be redirected to the correct subdomain and storing the data in the correct client’s DB schema.

I’m considering just for the Zoom and similar apps authentication flow to use a generic authentication app on my site. But if I’ll use this way - How can I tell which client just authenticated? I only get the access token and the refresh token. Can I somehow use those tokens to understand which user of which organization just authenticated? I saw there’s an option to pass some user state, and I can use it to pass the organization name/id but I wondered if there’s a better way :slight_smile:

And to sum up the previous questions about the app for different accounts:

  1. If a company have at least one user who is on the business plan and an admin (and integrated the dashboard) - I can ask this user to authenticate my app - then I’ll be able to call the dashboard/meetings API and get all the meetings of the organization of all the users in that organizations, right? also the ones on basic and pro plan?
  2. If my client has only a pro user, I will need to configure a webhook to notify myself of every ended meeting. If this is an account-level app, will it notify me of every ended meeting in the organization, right?
    Now I will need to get the list of participants in that meeting, can I use the token I got from the pro-user who authenticated the app to query the participants API? will it work even if that user did not host nor attended the meeting?

Thanks again for everything, and sorry for the never-ending stream of questions… As I continue to develop my app I come across new questions… :woman_shrugging:

Have a good day, as much as possible with the coronavirus… :confused:

1 Like

Hey @maayan,

Happy to hear you figured out the issue! :slight_smile:

Strange, I think since you are the app developer and a Zoom admin, you are able to choose the scopes, and install your app.

For the Dashboard endpoints to work, you can apply for a free trial: isv@zoom.us, or upgrade your account to business with dashboard feature.

Yep, that is the correct flow! I personally have not tested wildcards (*) before, just hard coding each sub domain in the whitelist, and then adding a default domain into the redirect URL.

Correct! You can simply supply the respective redirect URL. You can also set a state param to retain additional information throughout the install flow.

Yes, you can call the GET User endpoint to see who just authenticated. Note the me context.

Correct! :slight_smile:

Correct! Although I don’t think they will be able to install your app if they don’t have the dashboard feature.

Yes, since the app is authorized at the account level, you will be able to get participant data for anyone in the account.

Thanks, hope you have a good day too! :slight_smile:
Tommy