Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again

I was using a randomly generated ID, not my PMI.

Turns out that if you’re hosting a webinar, you cannot join using the Web SDK if you use the same email address as the host. Once I changed the email property to a different email, I had more success.

There was previously a planned new Web SDK release for today/tomorrow, but I’m no longer seeing that on the upcoming changes page. Has it been pushed back?

@michael_p.zoom also this meeting too

For those of you who are having success, what timezone are you guys using for your generate_signature() function?

I’m just using UTC, seems to be working.

Oh look what I found, an answer to my question about UTC Getting error 200 (No Permission) with new Webclient

Update your documentation Zoom. I found 3 errors in your sample code in the documentation that prevents people from running it too. missing commas and capitalization in variable names.

The timeout message is deceptive. This is the actual response I’m getting

{“status”:false,“errorCode”:200,“errorMessage”:“No permission”,“result”:null}

No permission, is that an error with my JWT? My signature? Something else? I’m using the php generate signature function found here: and I set my timezone with date_default_timezone_set(‘UTC’);

I’m having the same issue as described here. I am using a ruby implementation of the signature generation, the relevant code is here:

Note that this signature generation worked as recently as version 1.7.5, a week or so after its release. But somewhere between then and now, this broke.

Today I added the - 30000 to the timestamp and upgraded the plugin to SDK v 1.7.7, but I still suspect that something isn’t right with the time now. So, can we have some clear instructions on whether the timestamp needs to be a specific timezone?

To clarify, using the sample web app, I can join the event, but using the Ruby implementation I can’t.

Update: @deepak2’s code in Invalid Signature with Sample Web App solved my Ruby issue. Thanks Deepak!

1 Like

In the interest of moving things along for everyone I’m posting my sample code (HTML& PHP). Just save this as a .php file and put it on a server that can run PHP to test it. This code is what SHOULD be in the documentation so people don’t even have to mess with installing a node package or piecing together something usable from the documentation for a CDN implementation. I’ve replaced all the parts (like api secret, meeting number, etc) that people need to replace with their own data with the word REMOVED. There are 5 instances, one being a password so note that if you use this and setup a meeting or webinar that has no password. Please post your results or let me know what I’ve done wrong here.




	$api_secret = 'REMOVED';

	function generate_signature($api_key, $api_secret, $meeting_number, $role) {
		$time = time() * 1000 - 30000; //time in milliseconds (or close enough)
		$data = base64_encode($api_key . $meeting_number . $time . $role);
		$hash = hash_hmac('sha256', $data, $api_secret, true);
		$_sig = $api_key . "." . $meeting_number . "." . $time . "." . $role . "." . base64_encode($hash);
		//return signature, url safe base64 encoded
		return rtrim(strtr(base64_encode($_sig), '+/', '-_'), '=');

	$response = generate_signature($_POST['api_key'], $api_secret, $POST['meeting_number'], $POST['role']);
	header('Content-type: application/json');

<!DOCTYPE html>
<html lang="en">
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />


	<link type="text/css" rel="stylesheet" href="" />
	<link type="text/css" rel="stylesheet" href="" />

	<script src=""></script>
	<script src=""></script>
	<script src=""></script>
	<script src=""></script>
	<script src=""></script>
	<script src=""></script>

<!-- must put this in the body -->
<script src=""></script>


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

var meetConfig = {
	meetingNumber: 'REMOVED ',
	leaveUrl: 'REMOVED',
	userName: 'Firstname Lastname',
	userEmail: '', // required for webinar
	passWord: 'REMOVED', // if required
	role: 0 // 1 for host; 0 for attendee or webinar

	type: 'POST',
	timeout: 30000,
	url: '<?php echo $_SERVER['PHP_SELF']; ?>',
	dataType: 'json',
	data: 'api_key=' + meetConfig.apiKey + '&meeting_number=' + meetConfig.meetingNumber + '&role=' + meetConfig.role
.done(function(data) {

	// for debug
	console.log('signature: ' + data);

		leaveUrl: meetConfig.leaveUrl,
		debug: true,
		success: function() {
				signature: data,
				apiKey: meetConfig.apiKey,
				meetingNumber: meetConfig.meetingNumber,
				userName: meetConfig.userName,
				// Email required for Webinars
				userEmail: meetConfig.userEmail,
				// password optional; set by Host
				passWord: meetConfig.passWord,	// ZOOM ESSENTIAL GUIDE HAS password: without the capital W AND IS MISSING THE COMMA AT THE END OF THE LINE
				error: function(res){
		error: function() {
			console.log('init error');



Same result for me.

“Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again.”


Yesterday (05.20.2020) worked fine
Now again “Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again.”
We are using sdk 1.7.7.
Testing on localhost, jwt should be fine, since everything worked yesterday

1 Like

I’m trying to start using Zoom Web SDK after running into customisation issues with the Ionic SDK. I implemented a simple test with the Angular sample app on Github and generating the signature with the PHP code from the Zoom Web SDK documentation, but then getting the error:

“Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again.”

It seems this issue has been happening already last month. This does not seem very reliable.

I seem to be having this issue as well. Was working for me yesterday.

I am wondering if this has anything to do with Scheduled meetings that require registration?



My browser does not seem to even make a request to any remote Zoom servers. So is this an issue with the latest version of the javascript library or with the signature generated by the PHP code, or am I missing something else?


i have the same problem with webinar, meetings works fine
The error i get is

Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again.

the version i’m using is zoom-meeting-1.7.7.min.js

                        meetingNumber: meetConfig.meetingNumber,
                        userName: meetConfig.userName,
                        signature: res.result,
                        apiKey: meetConfig.apiKey,
                        userEmail: '',
                        passWord: meetConfig.passWord,
                        success() {
                            console.log('join meeting success');
                        error(res) {

Try using an email other than your own to join the webinar. It doesn’t seem to work when you use your own email address.

1 Like

At least for me, that makes no difference. Neither did using UTC timestamp. I also tried using the “Zoom Web SDK Sample Signature Node.js” for the signature creation. No luck.


Finally after a long 5 days of try I got the solution. It’s worked super for me. Excited to share my solution with you. If it doesn’t break the community guideline feel free to e-mail me Because it’s a long solution I would love to send you complete code instead of describing it here.

1 Like

I have the same issue using sdk 1.7.7

I am very afraid to put this version in production

Hey @ctapiero, @mikko.valjento, @ilseferman, @tmswartz12 , @elena1, @arhossainim, @cinemed, @penar.musaraj, @mystery, @alexeygfi,

This error can happen if:

  1. You are not using a JWT App type for the key and secret.
  2. You are not using a Pro or higher Zoom account.
  3. You are not using a real, running meeting / webinar id.
  4. There is an issue with your signature generation.

If you are still having this issue, please email your meeting ID and Web SDK signature to with the error and a description of the issue and we will investigate further.


So it’s not actually about the “connection timing out” at all, it can be about four or five different security, authentication or authorisation things.

After two days of messing with it I got it working eventually, though after re-generating keys, changing versions, changing meeting id’s from numbers to strings and strings to numbers, I have no clue why.

Wouldn’t it be nice if we all lived in a world where error messages actually told you WHY something happened and helped you to correct the situation?

Just an idea.


submitted to 2 days ago and still no response. I supplied all the sample code which is very basic and easy to follow, should be a 5 minute task to get an answer as to what’s wrong. I get this error {“status”:false,“errorCode”:200,“errorMessage”:“No permission”,“result”:null}

I still think it has to do with the timezone in the generate signature function. Again, here is my sample code Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again