# 100 meetings/day limit

**URL:** <https://devforum.zoom.us/t/100-meetings-day-limit/69011>\
**Category:** Meetings\
**Created:** [May 16, 2022, 5:03am UTC](https://devforum.zoom.us/t/100-meetings-day-limit/69011 "2022-05-16T05:03:45Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![peter.kaufman](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/peter.kaufman/32/34189_2.png) [@peter.kaufman](https://devforum.zoom.us/u/peter.kaufman)\
**Post date:** [May 16, 2022, 5:03am UTC](https://devforum.zoom.us/t/100-meetings-day-limit/69011/1 "2022-05-16T05:03:45Z")

</div>

We are a coaching company which offers coaching classes that are conducted over zoom. As part of our administration, we have a system which assigns coaches to our classes, by creating a zoom meeting and then assigning the coach as the host for the meeting.

The way that we have implemented this is that we use a single account to create a zoom meeting and assign the coach as the host. Most of the time, this system works OK, but on some days, we try to create and assign more than 100 meetings and coaches in a single day, which means we hit on the limitation as described here:

> **[Zoom Developer Docs](https://marketplace.zoom.us/docs/api-reference/rate-limits/)**
>
> The Zoom Developer Platform is an open platform that allows third-party developers to build applications and integrations upon Zoom’s video-first unified communications platform.

Because the assignment is centralized (that is, our administrators assign the coaches to particular classes based on availability, history teaching similar classes, etc.) the coaches can’t assign themselves so there’s no way to get around using a centralized account like how are are doing it now. We also do sometimes change the data after the fact (for example, to assign a different coach or set another coach as a backup coach using the alternative\_host setting).

We can manage around this by (for example) keeping ourselves limited to just 100 classes per one day, and then setting the remainder on the following day, but this method introduces a manual step that isn’t strictly needed and can lead to operational mistakes on our end. So we want to set things up so that the administrators of the system can set more than 100 classes in a day without needing to resort to this.

The only way I could think of to come around this was to have a few administrator accounts (administrator+1, administrator+2, administrator+3, etc.) and then use these accounts round robin, but that feels very hacky.

(Of course, the easiest solution would be to just increase our API limit to a few hundred for the administrator account that we’re using, but I’m not sure if this is possible or not. I already tried contacting our sales representative, he directed us to here.)

Is there a recommended way to do what we want?

---

<div class="post-metadata">

**Author:** ![peter.kaufman](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/peter.kaufman/32/34189_2.png) [@peter.kaufman](https://devforum.zoom.us/u/peter.kaufman)\
**Post date:** [May 17, 2022, 2:29am UTC](https://devforum.zoom.us/t/100-meetings-day-limit/69011/2 "2022-05-17T02:29:56Z")

</div>

I might have found a really simple solution to my own problem. I decided to post in in case it helps someone else later.

Before, I using this URL format:

url = “[https://api.zoom.us/v2/users/adminaccount@example.com/meetings](https://api.zoom.us/v2/users/adminaccount@example.com/meetings)”

I changed it to this:

url = “[https://api.zoom.us/v2/users/coachaccount@example.com/meetings](https://api.zoom.us/v2/users/coachaccount@example.com/meetings)”

I didn’t realize that my JWT token would be useable on the coach API URLs too.

---

<div class="post-metadata">

**Author:** ![peter.kaufman](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/peter.kaufman/32/34189_2.png) [@peter.kaufman](https://devforum.zoom.us/u/peter.kaufman)\
**Post date:** [June 30, 2022, 2:34am UTC](https://devforum.zoom.us/t/100-meetings-day-limit/69011/3 "2022-06-30T02:34:52Z")

</div>

OK, that didn’t work as expected unfortunately. When I first create the meeting things work as expected. But if I later try to change the schedule\_for setting on the meeting, it seems that I can’t do it and I get a 3000 “You cannot schedule a meeting for [example@example.com](mailto:example@example.com)” error.

I tried a different approach, which also failed, but for the life of me I can’t understand why it would fail.

1. I create a meeting using the URL above:

url = “[https://api.zoom.us/v2/users/user1@example.com/meetings”](https://api.zoom.us/v2/users/user1@example.com/meetings%E2%80%9D)

This works as expected.

1. I set the meeting’s host to instead be the admin account. My idea was, if I can’t set it from [user1@example.com](mailto:user1@example.com) to [user2@example.com](mailto:user2@example.com) directly, I could instead set it from [user1@example.com](mailto:user1@example.com) to [admin@example.com](mailto:admin@example.com) first, and then set it to [user2@example.com](mailto:user2@example.com), assuming that I set all of the necessary assistant permissions.

The first part of this worked:

[user1@example.com](mailto:user1@example.com) → [admin@example.com](mailto:admin@example.com)

However, now I can’t do this:

[admin@example.com](mailto:admin@example.com) → [user2@example.com](mailto:user2@example.com)

It is very odd though, the host for the meeting now shows as [admin@example.com](mailto:admin@example.com), and [admin@example.com](mailto:admin@example.com) is listed as an assistant for [user2@example.com](mailto:user2@example.com). But when I try setting the host on the meeting again, I get this dreaded response:

{‘message’: ‘You cannot schedule a meeting for [user2@example.com](mailto:user2@example.com).’, ‘code’: 3000}

I have no idea why this would happen though. I tried setting [admin@example.com](mailto:admin@example.com) as an assistant for [user2@example.com](mailto:user2@example.com) and even tried the other way (setting [user2@example.com](mailto:user2@example.com) as an assistant for [admin@example.com](mailto:admin@example.com)) and neither worked. My guess is that, because the meeting was created under [user1@example.com](mailto:user1@example.com), the meeting is stuck to his account “somehow” despite me changing the host to [admin@example.com](mailto:admin@example.com)

Someone, please help!!! ☹

---

<div class="post-metadata">

**Author:** ![peter.kaufman](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/peter.kaufman/32/34189_2.png) [@peter.kaufman](https://devforum.zoom.us/u/peter.kaufman)\
**Post date:** [June 30, 2022, 3:14am UTC](https://devforum.zoom.us/t/100-meetings-day-limit/69011/4 "2022-06-30T03:14:35Z")

</div>

One more thing to note. If I login as [admin@example.com](mailto:admin@example.com), I can change the above meeting to [user2@example.com](mailto:user2@example.com) without a problem… so it seems to be some limitation of the API that the admin interface doesn’t have.

---

<div class="post-metadata">

**Author:** ![MultiplayerSession](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/multiplayersession/32/66446_2.png) [@MultiplayerSession](https://devforum.zoom.us/u/MultiplayerSession)\
**Post date:** [June 30, 2022, 2:19pm UTC](https://devforum.zoom.us/t/100-meetings-day-limit/69011/5 "2022-06-30T14:19:37Z")

</div>

We face similar levels of scale limitations to conserve the number of licensed users; what we do is maintain our own schedule of when each logical host user (from our perspective) is scheduled for a meeting and spoon feed Zoom only the next meeting information for each physical host user (from Zoom’s perspective). Once the previous meeting finishes, we edit that meeting to match the scheduling for the next logical host. If we reach an API rate limit, then we need to switch to another physical host that hasn’t reached a rate limit yet. Keeping the intended schedule on our side means that schedule changes don’t count against rate limits unless it was the next meeting.

For starting the meeting, we direct users to our own web site which figures out which physical host is being used and instructs the logical host which physical user to log in as (using an OAuth application to query Zoom to see which physical account they are currently signed in as in their web browser and instruct them to switch users if needed, or redirect them to the meeting if they’re already in the correct account).

You might be able to get additional ideas by searching for ways that people share Zoom licenses. I heard one technique involves disclosing the host key for the physical host and having the logical host use that to claim the host role when the meeting begins,

---

<div class="post-metadata">

**Author:** ![gianni.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/gianni.zoom/32/32523_2.png) [@gianni.zoom](https://devforum.zoom.us/u/gianni.zoom)\
**Post date:** [July 1, 2022, 12:35am UTC](https://devforum.zoom.us/t/100-meetings-day-limit/69011/6 "2022-07-01T00:35:57Z")

</div>

Hi @peter.kaufman ,

Can you please share patch request code you sent for assigning the assistant?

Try referencing these post for possible programmatic solutions:

> [@Cannot update schedule\_for](https://devforum.zoom.us/t/cannot-update-schedule-for/69247/4):
>
> I think I had to call other way around: PATCH [https://api.zoom.us/v2/users/{user2@email.com}/assistants](https://api.zoom.us/v2/users/%7Buser2@email.com%7D/assistants) with payload: { “assistants”: [{ “email”: “user1@email.com” }] } Now it seems to work fine: topic and start\_url have been updated, meeting starts from user2 name.

> [@Changing the scheduled host for an existing meeting using the update\_meeting API?](https://devforum.zoom.us/t/changing-the-scheduled-host-for-an-existing-meeting-using-the-update-meeting-api/59343/12):
>
> My issue was that I was attempting to swap a host for an alternate in one step. It doesn’t work. What does is the following: Step 1. Save the alternate hosts and PATCH to clear { settings: { alternative\_hosts: ‘’ } } Step 2. Update the host for the new host email or id { schedule\_for: new\_host } Step 3. Modify the alternate hosts to ensure the new host is removed from the list and then PATCH { settings: { alternative\_hosts: new\_list\_without\_new\_host } } You must have schedule pr…

Thank you,  
Gianni
