# Creating/Hosting concurrent meetings through API (Server-to-Server App)

**URL:** <https://devforum.zoom.us/t/creating-hosting-concurrent-meetings-through-api-server-to-server-app/117101>\
**Category:** API and Webhooks\
**Tags:** webhooks, api\
**Created:** [September 8, 2024, 4:28pm UTC](https://devforum.zoom.us/t/creating-hosting-concurrent-meetings-through-api-server-to-server-app/117101 "2024-09-08T16:28:10Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![PhasedConnect\_dev](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/phasedconnect_dev/32/63135_2.png) [@PhasedConnect\_dev](https://devforum.zoom.us/u/PhasedConnect_dev)\
**Post date:** [September 8, 2024, 4:28pm UTC](https://devforum.zoom.us/t/creating-hosting-concurrent-meetings-through-api-server-to-server-app/117101/1 "2024-09-08T16:28:10Z")

</div>

Currently, I’m using **Server-to-Server App** ’s Credentials (Account ID, Client ID and Client Secret) to get my **Bearer access token** and to **connect** to **Zoom API** :

 ![image](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/3X/0/f/0f5f71321465f5563c78fdc7aba96550f1ed328a.png)

```auto
// Server-to-Server App's Credentials
const accountId = 'asLtmaTbqk...';
const clientId = 'oE_OzyRAWK...';
const clientSecret = '2a0GjdyXtZ5Va0...';

 async createZoomMeeting(subject: string, startTime: Date) {
  const authData = `${clientId}:${clientSecret}`;

  // First, I get my access_token through my Server-to-Server App
  const access_token = await axios.post<ZoomServerTokenResponse>(
   `https://zoom.us/oauth/token?grant_type=account_credentials&account_id=${accountId}`,
   undefined,
   {
    headers: {
     Authorization: `Basic ${base64Encode(authData)}`,
    },
   },
  );

  // And then using that access_token I'm creating a meeting through Zoom's API
  const response = await axios.post<CreateZoomMeetingResponse.Root>(
   'https://api.zoom.us/v2/users/me/meetings/',
   createZoomMeetingRequest(startTime, subject),
   {
    headers: {
     Authorization: `Bearer ${access_token }`,
    },
   },
  );
  return response.data;
 }
}

```

And this works fine, as long as a user that created this Server-to-Server app **hosts one meeting at a time**. But, when I want to host **2 or more meetings concurrently (at the same time)**, I **can’t** , and that is Zoom’s restriction and I’m fully aware of it.

But, today I bought a **Pro** account subscription and **created 9 Basic users** (with no licensed plan) **under this Pro account**.

‎  
**What I want to achieve:**  
I would like to create a code that will somehow iterate through those users’ credentials (or their App credentials), check if a user currently has a meeting running as a host, if it has, skip to next user, and if it doesn’t - create and host a meeting.

**My questions are:**

1. **Can those multiple Basic users somehow use the same one Server-to-Server app to get their Bearer access\_token to access Zoom’s API and create a meeting?** _([This post](https://devforum.zoom.us/t/add-collaborators-to-server-to-server-oauth-or-webhook-apps-account-level-apps/75206/2) from 2022. **denies** that if I understood it correctly, but maybe something changed since 2022.)_
2. If first question’s answer is no, **should I then create a Server-to-Server App on every of those 9 accounts and generate the Bearer access token through these apps**? _Or maybe there’s a better way to achieve this?_
3. **What’s the best way to check if a user already has a hosting meeting running at the moment?** _(I’m thinking about Event Subscriptions (Webhooks) maybe?)_

‎  
If any of you achieved similar behaviour like this, please let me know in comments or link me a post/s that will help me achieve this.

---

<div class="post-metadata">

**Author:** ![elisa.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/elisa.zoom/32/47836_2.png) [@elisa.zoom](https://devforum.zoom.us/u/elisa.zoom)\
**Post date:** [September 13, 2024, 7:37pm UTC](https://devforum.zoom.us/t/creating-hosting-concurrent-meetings-through-api-server-to-server-app/117101/3 "2024-09-13T19:37:08Z")

</div>

Hi @PhasedConnect_dev  
Thanks for reaching out to us!  
I am happy to help here!

To answer your questions:

> Can those multiple Basic users somehow use the same one Server-to-Server app to get their Bearer access\_token to access Zoom’s API and create a meeting? (This post 1 from 2022. denies that if I understood it correctly, but maybe something changed since 2022.)  
> Yes, you can use the same S2S app to get an access token and create a meeting for each user.

You could check the User presence status using the [Get a user presence status endpoint](https://developers.zoom.us/docs/api/rest/reference/user/methods/#operation/getUserPresenceStatus)

> **[Zoom User API](https://developers.zoom.us/docs/api/rest/reference/user/methods/#operation/getUserPresenceStatus)**
>
> API Reference for /docs/api/rest/reference/user/methods

Or you could also set up a webhook event that will let you know whenever the users presence status changes

> **[Zoom API Events - User](https://developers.zoom.us/docs/api/rest/reference/user/events/#operation/user.presence_status_updated)**
>
> API Reference for /docs/api/rest/reference/user/events

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/3X/6/1/614bdd549b610bbaa46ff934617683a02bdaa03c.png) [@system](https://devforum.zoom.us/u/system)\
**Post date:** [September 21, 2025, 3:01pm UTC](https://devforum.zoom.us/t/creating-hosting-concurrent-meetings-through-api-server-to-server-app/117101/5 "2025-09-21T15:01:40Z")

</div>

Closed on September 21, 2025, 3:01pm UTC

This topic was automatically closed 368 days after the last reply. New replies are no longer allowed.
