Another "joining fail" error

Joining Meeting timeout: joining fail

Using Web API with JWT authentication pursuing to integrate with an existing web app. Pro account, upgraded from Basic a couple of hours ago.

While trying to launch the session joining we are getting the “Joining Meeting timeout” error message on screen.

Console info:

zoom-meeting-1.7.2.min.js:2 Zoom support you browser. Chrome/80.0.3987.132
zoom-meeting-1.7.2.min.js:2 You browser support below features
index.js:4 {“browserInfo”:“Chrome/80.0.3987.132”,“browserName”:“Chrome”,“browserVersion”:“80.0.3987.132”,“features”:[“viewSharing”,“screenShare”,“computerAudio”,“computerVideo”,“callIn”,“callOut”,“chat”,“closedCaption”,“QA”]}

  1. method: “join”, status: false, errorCode: 1, errorMessage: “joining fail”, result: null}

  2. method: “join”

  3. status: false

  4. errorCode: 1

  5. errorMessage: “joining fail”

  6. result: null

Using a real room (personal meeting room) already started before launching the API call. Meeting room options: no password required, all user types allowed (no previous authentication required), allow joining before host and waiting room enabled.

PHP app with html5, ccs3 and JS/JQuery for the frontend. PHP generated signature passed through global variable to index.js along with meeting number & username, following the JS coding:



  ZoomMtg.setZoomJSLib('', '/av');



  var API_KEY = '***';

      leaveUrl: '',
      isSupportAV: true,
      success: function () {
                  meetingNumber: meetingNumber,
                  userName: userName,
                  signature: signature,
                  apiKey: API_KEY,
                  userEmail: '',
                  passWord: "",
                  success: function(res){
                      console.log('join meeting success');
                  error: function(res) {
      error: function(res) {

Also, when clicking on the OK option at the confirm screen, another error arises:

react-dom.min.js:17 Uncaught TypeError: f.e.close is not a function
at zoom-meeting-1.7.2.min.js:2
at redux-thunk.min.js:1
at dispatch (redux.min.js:1)
at zoom-meeting-1.7.2.min.js:2
at redux-thunk.min.js:1
at redux.min.js:1
at onCancel (zoom-meeting-1.7.2.min.js:2)
at k (zoom-meeting-1.7.2.min.js:2)
at _ (zoom-meeting-1.7.2.min.js:2)
at (react-dom.min.js:164)
(anonymous) @ zoom-meeting-1.7.2.min.js:2
(anonymous) @ redux-thunk.min.js:1
dispatch @ redux.min.js:1
(anonymous) @ zoom-meeting-1.7.2.min.js:2
(anonymous) @ redux-thunk.min.js:1
(anonymous) @ redux.min.js:1
onCancel @ zoom-meeting-1.7.2.min.js:2
k @ zoom-meeting-1.7.2.min.js:2
_ @ zoom-meeting-1.7.2.min.js:2
sh @ react-dom.min.js:164
rh @ react-dom.min.js:13
uh @ react-dom.min.js:13
Ge @ react-dom.min.js:15
vh @ react-dom.min.js:165
ad @ react-dom.min.js:15
cd @ react-dom.min.js:17
Uh @ react-dom.min.js:39
Zg @ react-dom.min.js:158
Xe @ react-dom.min.js:23
oc @ react-dom.min.js:40
(anonymous) @ react-dom.min.js:159
unstable_runWithPriority @ react.min.js:27
ah @ react-dom.min.js:159
xf @ react-dom.min.js:40

Thanks in advance for your help, much appreciated!


We keep on looking for the failure and it seems to be located in the php sample code for generating the signature.

We have modified index.js in order to generate the signature inside the same file instead of generating it on PHP and passing the value through a global var. Doing it this way it works and we can join the room without any problems, so the issue is clearly at the PHP part.

Code used for generating the signature in PHP comes directly from the Zoom API documentation, as follows:

function generate_signature ( $api_key, $api_secret, $meeting_number, $role){

	$time = time() * 1000; //time in milliseconds (or close enough)

	$data = base64_encode($api_key . $meeting_number . $time . $role);

	$hash = hash_hmac('sha256', $data, $api_sercet, true);

	$_sig = $api_key . "." . $meeting_number . "." . $time . "." . $role . "." . base64_encode($hash);

	//return signature, url safe base64 encoded
	return rtrim(strtr(base64_encode($_sig), '+/', '-_'), '=');

Then called like

$zoom_signature = generate_signature ( $DGLOBAL[zoom_api_key], $DGLOBAL[zoom_api_secret], $meeting_number, $role);

The result is passed by like

<script type="text/javascript">
  var signature = 'SFRJSnYtUXBRSW1mZGEySkZyR1VOZy44NzkzNjc2MTE4LjE1ODQ4OTczOTIwMDAuMC5Sa3JjRHdaNkVwemJmaVlKQzdCY00ycVVxVEJzVmxYd3VLUW9BVFB2b21vPQ';
  var meetingNumber = '***';
  var userName = 'Tests';

Of course we logged to the console the received data at index,js and everything is ok.

Looking forward to hear from you, its good to know that generating the signature directly over the JS file we can make it work, but security wise is far from ideal and breaks our achitecture concept. Thanks in advance.


Hey @invistart, thanks for posting and using Zoom!

Sorry to hear you are having some trouble generating the Web SDK signature with the Sample PHP Code.

I will look into why it isn’t working. In the meantime, can you use the Node.js example? I know it works. There is also a signature sample app that securely generates signatures via a server side Node.js app:


Thanks for your answer tommy, we will take a look at those alternatives :+1:

1 Like

You are welcome! :slight_smile:

Let me know if you have any more issues.


Hi @tommy,
I’ve been facing the same error on my Node.js app. Until around a few days back, I was able to use the Node.js example to generate a signature on server-side and use that to join a meeting. I’m not sure what changed but now, I’m only able to start or join meetings when I generate the signature client-side using ZoomMtg.generateSignature and exposing the API key and secret, just like in the sample websdk app . I’ve received the same js console error (screenshot attached) as @invistart. No errors in my server code. Did something change with the way that signatures are generated?

Additional information: I’m on the basic plan. I’m not able to join or start meetings as a host when I generate my signature server side. I’m also trying to host meetings that I scheduled with the same account that I used to generate the API key and secret. Yes, the meeting id and password are both valid (printed this out before using them as inputs in the code just to be sure).

Hey @hanumatejamaddali, thanks for posting and using Zoom!

Sorry to hear you are having some issues.

Were you always on a free account? Nothing has changed with the signatures logic.

To host meetings with the Web SDK you must have a pro or above plan, that is probably the issue. You can request a free trial here:


Hi Tommy,
Yup, I was always on a basic plan. I actually meant that I was unable to join meetings either as the host or attendee, my bad. I’m able to join meetings when I use ZoomMtg.generateSignature on client side but not when I generate a signature on server side. I use the same function as in Zoom’s generate signature example repo. Strange thing is that I was able to join meetings with the server-side generated signature a week before. But when I revert to a previous working commit on my code repo, I’m still unable to join meetings. I’ll double check with my own code then since I don’t have the faintest clue why this is happening.

Thanks anyway,


Hey @hanumatejamaddali,

Can you try upgrading to Pro to see if that fixes the issue?

Also please test using the Web SDK Sample Signature app:


Will try out your suggestion. Thanks for your quick responses.

1 Like

Happy to help!

Let me know if it works!


We’re having a strange issue.
We built a web application that allow users to join a meeting that was started using the zoom app on desktop/mobile
Our web application and also the sample app is working fine for some zoom users and doesn’t work with “Joining fail” error on other zoom accounts.
For example, scheduling meetings with this account (amir at is working fine while scheduling meetings with harel.tuly at returns “Join fails” when trying to connect via the webapp.
I compared the accounts, both on the basic plan, all settings look identical.
Same webapp, same way to generate signature, the only difference is the account that scheduled the meeting. tested it with meetings with PMI or with random meeting ID, with password and without password. I’m list
What could cause the issue?

Hey @amir1,

Does harel own the meeting ID? You can only host / start meetings from the same Zoom account that also owns the JWT Credentials. What roles are you passing in for both to generate the signature?