# { "type": "JOIN\_MEETING\_FAILED", "reason": "Fail to join the meeting.", "errorCode": 200 }

**URL:** <https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989>\
**Category:** Web\
**Created:** [July 19, 2024, 7:50am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989 "2024-07-19T07:50:37Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![zoom312](https://avatars.discourse-cdn.com/v4/letter/z/ebca7d/32.png) [@zoom312](https://devforum.zoom.us/u/zoom312)\
**Post date:** [July 19, 2024, 7:50am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/1 "2024-07-19T07:50:37Z")

</div>

**Description** I am encountering a `JOIN_MEETING_FAILED` error with `errorCode: 200` when attempting to join a Zoom meeting using the Web Meeting SDK. Despite following the SDK documentation and ensuring all parameters are correctly configured, the error persists.

**Browser Console Error**

json

```auto
{
  "type": "JOIN_MEETING_FAILED",
  "reason": "Fail to join the meeting.",
  "errorCode": 200
}

```

**Which Web Meeting SDK version?** @zoomus/websdk: ^2.18.3

**Meeting SDK Code Snippets** Here is the relevant code causing the error:

javascript

```auto
import React, { useState } from 'react';
import Modal from 'react-modal';
import ZoomMtgEmbedded from '@zoomus/websdk/embedded';
import axios from 'axios';

Modal.setAppElement('#root');

const ZoomSession = () => {
  const [modalIsOpen, setModalIsOpen] = useState(false);
  const client = ZoomMtgEmbedded.createClient();

  const sdkKey = 'I88IuIk9RxCkFj6FsHrBCA';
  const meetingNumber = '84481362651';
  const passWord = '5fgt6U';
  const role = 0;
  const userName = 'f';
  const userEmail = '';
  const registrantToken = '';
  const zakToken = '';

  const generateSignature = async (meetingNumber, role) => {
    try {
      const response = await axios.post(`${process.env.REACT_APP_BASE_URL}/api/v1/zoom/authEndpoint`, {
        meetingNumber: meetingNumber,
        role: role
      });
      return response.data.signature;
    } catch (error) {
      console.error('Error generating signature:', error);
      throw error;
    }
  };

  const getSignature = async (e) => {
    e.preventDefault();
    try {
      const signature = await generateSignature(meetingNumber, role);
      startMeeting(signature);
    } catch (error) {
      console.error('Error getting signature:', error);
    }
  };

  const startMeeting = (signature) => {
    const meetingSDKElement = document.getElementById('meetingSDKElement');
    client.init({
      debug: true,
      zoomAppRoot: meetingSDKElement,
      language: 'en-US',
      patchJsMedia: true,
      leaveOnPageUnload: true
    }).then(() => {
      client.join({
        signature: signature,
        sdkKey: sdkKey,
        meetingNumber: meetingNumber,
        password: passWord,
        userName: userName,
        userEmail: userEmail,
        tk: registrantToken,
        zak: zakToken
      }).then(() => {
        console.log('Joined meeting successfully');
      }).catch((error) => {
        console.error('Error joining meeting:', error);
      });
    }).catch((error) => {
      console.error('Error initializing Zoom client:', error);
    });
  };

  return (
    <div className="App">
      <main>
        <h1>Zoom Meeting</h1>
        <button onClick={() => setModalIsOpen(true)}>Join Meeting</button>
        <Modal
          isOpen={modalIsOpen}
          onRequestClose={() => setModalIsOpen(false)}
          contentLabel="Zoom Meeting"
          style={{
            content: {
              top: '50%',
              left: '50%',
              right: 'auto',
              bottom: 'auto',
              marginRight: '-50%',
              transform: 'translate(-50%, -50%)',
              width: '80%',
              height: '80%'
            }
          }}
        >
          <div id="meetingSDKElement"></div>
          <button onClick={getSignature}>Start Meeting</button>
        </Modal>
      </main>
    </div>
  );
};

export default ZoomSession;

```

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZGtLZXkiOiJJODhJdUlrOVJ4Q2tGajZGc0hyQkNBIiwibW4iOiI4NDQ4MTM2MjY1MSIsInJvbGUiOjAsImlhdCI6MTcyMTM3MjU2OSwiZXhwIjoxNzIxNDQ0NTY5LCJhcHBLZXkiOiJJODhJdUlrOVJ4Q2tGajZGc0hyQkNBIiwidG9rZW5FeHAiOjE3MjE0NDQ1Njl9.5IiscW75oRQACUtXbKja5OZr97i\_glVcW589sV4RaB4

GpL23CzMZvb1MF8yPw88MhTEVlFDFE8z - client secret

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [July 19, 2024, 8:47am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/2 "2024-07-19T08:47:38Z")

</div>

> [@zoom312](#):
>
> `84481362651`

@zoom312 this meeting belongs to an external user, you cannot join an external meeting with Meeting SDK unless your Meeting SDK App is published.

---

<div class="post-metadata">

**Author:** ![zoom312](https://avatars.discourse-cdn.com/v4/letter/z/ebca7d/32.png) [@zoom312](https://devforum.zoom.us/u/zoom312)\
**Post date:** [July 19, 2024, 10:17am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/3 "2024-07-19T10:17:22Z")

</div>

I created this meeting using server-to-server authentication from same account. Can you explain the difference between external and internal users? and how do I create internal users

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [July 19, 2024, 12:24pm UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/4 "2024-07-19T12:24:16Z")

</div>

> [@zoom312](#):
>
> 84481362651

@zoom312  
The creator of this meeting is not a user under the tenant of the developer.

---

<div class="post-metadata">

**Author:** ![zoom312](https://avatars.discourse-cdn.com/v4/letter/z/ebca7d/32.png) [@zoom312](https://devforum.zoom.us/u/zoom312)\
**Post date:** [July 22, 2024, 5:43am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/5 "2024-07-22T05:43:56Z")

</div>

How do I make this internal?

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [July 22, 2024, 6:28am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/6 "2024-07-22T06:28:18Z")

</div>

Goto [zoom.us](http://zoom.us), users tab and add users.

You will need minimally pro account to add users in your tenant.

The meetings which these users create are considered internal

---

<div class="post-metadata">

**Author:** ![zoom312](https://avatars.discourse-cdn.com/v4/letter/z/ebca7d/32.png) [@zoom312](https://devforum.zoom.us/u/zoom312)\
**Post date:** [July 22, 2024, 7:14am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/7 "2024-07-22T07:14:59Z")

</div>

Lets say I created a meeting through Server-To-Server OAuth and used this api  
``https://api.zoom.us/v2/users/${userId}/meetings``  
where I used a user from my app to create the meeting link, would you say that this meeting was created by an internal user?

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [July 22, 2024, 8:44am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/8 "2024-07-22T08:44:29Z")

</div>

@zoom312 only if the user is under your tenant, then this will work

---

<div class="post-metadata">

**Author:** ![zoom312](https://avatars.discourse-cdn.com/v4/letter/z/ebca7d/32.png) [@zoom312](https://devforum.zoom.us/u/zoom312)\
**Post date:** [July 22, 2024, 10:36am UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/9 "2024-07-22T10:36:24Z")

</div>

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

As you can see the User is already added in the user list and same email can be seen when meeting is created.

````created_at
: 
"2024-07-22T10:17:02Z"
duration
: 
60
encrypted_password
: 
"Azvqzu3AnQFfpqxJtKY1uEMbFEYvbK.1"
h323_password
: 
"066157"
host_email
: 
"zoom3@mastersunion.org"
host_id
: 
"XuF6p54KQL6-oqJ5n1MTqw"
id
: 
92503957879
join_url
: 
"https://zoom.us/j/92503957879?pwd=Azvqzu3AnQFfpqxJtKY1uEMbFEYvbK.1"
password
: 
"066157"
pre_schedule
: 
false```

My motive is to create meeting and add my student who are in my class as registrants or participants. Whats happening is I am able to create meeting but students are not able to join in meeting sdk

Am I missing something regarding how meetings are created? please let me know asap.
````

---

<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:** [August 21, 2024, 8:36pm UTC](https://devforum.zoom.us/t/type-join-meeting-failed-reason-fail-to-join-the-meeting-errorcode-200/113989/10 "2024-08-21T20:36:41Z")

</div>

Closed on August 21, 2024, 8:36pm UTC

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