ZOOM SDK not allowing users to see the webinar

Hello ZOOM,

We are using the WEB SDK 1.8.6 to put users directly inside our webinars without any login/registre screen - as those users are already logged in at our platform.

Whenever they got at the webinar screen with the zoom sdk, they are able to see ZOOM SDK loaded but the screen stuck in ‘dark’ mode.

See the image bellow:

We are using an enterprise account, I mean, is not a free account.

What could be the cause of this problem?

Hi @rcbernardino,

Thanks for reaching out about this, and happy to help take a closer look.

Can you please share a screenshot of your browser console and any associated errors you’re seeing there when your participants get this screen? If you could also share the signature for the meeting, this will help to debug.


Hello Will, thanks a lot for your response. Please, find attached 2 prints-screens from our console with the error messages, but we are following all the API instructions.

I can see that we have a ‘moments.js’ error but I do not know if this have some relation with zoom, and an error with the email object, but we are enconding it like zoom needs (encode64).

Please, take a look to try to give us a light?


Here follows the 2nd print-screen:


And this is our piece of code (javascript with php) that generates all the necessary variables to the built the SDK:

var zapi = ‘’;
var zi= ‘’;
var zpas = ‘’;
var uname = ‘’;
var umail = ‘’;
var zredirUrl = ‘’;
var az = ‘’;

Is there anything wrong with our signature (var ‘az’) or user e-mail encode?

Hey @rcbernardino,

Thank you for providing additional information. Looking at the error you’re getting, it looks like the email is HTML encoded. Is this something that you’re doing in code or is that just how the error comes through?

If possible, please provide a code snippet of how you’re calliing the join() function.


Hello Max, thank you for your answer. I think we removed every encoded tag from email, it’s output like this way that I’ved showed to you on the console output.

Please, find below the code that constructs the function:

<?php $time = time()*1000; $data = base64_encode($secrets['zapi'] . $zoom_id . $time . '0'); $hash = hash_hmac('sha256', $data, $secrets['zosc'], true); $_sig = $secrets['zapi'] . "." . $zoom_id . "." . $time . "." . 0 . "." . base64_encode($hash); $_sig = rtrim(strtr(base64_encode($_sig), '+/', '-_'), '='); ?> <?php } ?>

And please, find below our zoom-helper.js code:



ZoomMtg.setZoomJSLib('https://source.zoom.us/1.8.6/lib', '/av'); 


var zoomMeeting = document.getElementById("zmmtg-root");

var meetConfig = {
    apiKey: zapi,
    meetingNumber: zi,
	userName: uname,
	userEmail: umail,
	passWord: zpas,
    signature: az,
    error(res) {
        console.log("Joining meeting Error");
    success() {

    leaveUrl: zredirUrl,
    isSupportChat: false,
    isSupportQA: false,
    isLockBottom: false,
    success: function (success) {
        console.log("Init Success ", success);


Hey @rcbernardino,

Thank you for providing additional information. I’m not seeing anything that would cause an issue here. I would make sure that the webinar you’re hosting was created by the same account that the JWT credentials are from.

If that doesn’t help, do you see the same issue when you join this webinar from the Sample Web App?


Hello MaxM and Zoom Team. Thank you for the support.

We are using the 1.8.6 verision of the web sdk and we still experiencing the same problem. Please, take a look on our console most recent print-screen:

This is happening for all of our users that try to enter at our webinars.

Do you have a clue on this error?

This is our php script that built our SDK and calls the join method:

$time = time()*1000;
$data = base64_encode($secrets['zapi'] . $zoom_id . $time . '0');
$hash = hash_hmac('sha256', $data, $secrets['zosc'], true);
$_sig = $secrets['zapi'] . "." . $zoom_id . "." . $time . "." . 0 . "." . base64_encode($hash);
$_sig = rtrim(strtr(base64_encode($_sig),'+/','-_'),'=');
<script type="text/javascript">
var zapi = '<?php echo $secrets['zapi']; ?>';
var zi= '<?php echo $zoom_id; ?>';
var zpas = '<?php echo $zoom_pass; ?>';
var uname = '<?php echo $pid_name; ?>';
var umail = '<?php echo rtrim(strtr(base64_encode($pid_email),'+/','-_'),'='); ?>';
var zredirUrl = 'step-walkin?t=<?php echo $t; ?>';
var az = '<?php echo $_sig; ?>';
<script src="https://source.zoom.us/1.8.6/lib/vendor/react.min.js"></script>
<script src="https://source.zoom.us/1.8.6/lib/vendor/react-dom.min.js"></script>
<script src="https://source.zoom.us/1.8.6/lib/vendor/redux.min.js"></script>
<script src="https://source.zoom.us/1.8.6/lib/vendor/redux-thunk.min.js"></script>
<script src="https://source.zoom.us/1.8.6/lib/vendor/lodash.min.js"></script>
<script src="https://source.zoom.us/zoom-meeting-1.8.6.min.js"></script>
<script src="./js/zoom-helper.js?id=<?php echo rand(); ?>"></script>
<?php } ?>

$pid_name and $pid_email are strings that are filled with user’s name and email (the email is php base64 encoded). So, after that, we got this error screen (pretty similar to the above one):

Please, find attached below a print-screen from our console with object init and the object join.


Hey @rcbernardino,

Thank you for reaching out to the Zoom Developer Forum.

It looks like this is happening because you are base64 encoding the email. Instead the Web SDK requires that you pass a standard string that contains an unencoded email.

Please see our Sample Web App for an example of how this can be done. Let me know if you have any questions.


Hello Max,

After a lot of tests, we are facing the same problem. But, before we take a new print-screen from all of our acconts, please, help us to understand the ‘email’ encode system, to be clear.

Our pages are UTF-8 encoding. Lets assume that our user’s email is: user@user.com, ok?!

At the time that we pass the user’s email to the zoom sdk api, we need to:

  1. Encode that, like php: url_encode($email);

  2. Base64 URL Enconde, like php: base64_url_encode($email);

  3. Send plain email without any enconde, like php: $email;

Please, help us be assured with that.

Thank you so much,

Hey @rcbernardino,

Thank you for the update, good question!

That option is correct, you will want to send the email without any encoding.


Hello @MaxM,

Thank you for the answer. I’m sending a plain email, like: $email=’’. Simple as that, and I still getting the same error.

The ‘joining meeting error’ that comes on console:

errorCode: 4003
errorMessage: ""
method: "join"
result: null
status: false
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()

You can see that some how the zoom API is enconding the email automatically.

Now, like our init/joining object that comes out on console:

apiKey: ""
error: ƒ error(res)
meetingNumber: "94044077512"
participantId: ""
passWord: ""
signature: ""
success: ƒ success()
userEmail: ""
userName: ""
__proto__: Object

Again, the email is being ‘cleaned’ for @ and . But this is not happening at our side.

Do you have a clue on that?

Please, find below a print screen from the console.

Hey @rcbernardino,

Thank you for the update. I’ve looked into this even further and I’m not seeing any issue with the Webinar in question or the code that you’ve provided so far. After testing this further as well, I haven’t been able to reproduce the issue.

Are you able to provide a public git repo with the code that you’re using so that I can reproduce the issue on my end and advise from there? If not, please send an email to developersupport@zoom.us with a link to this thread and we’ll set up a time to meet so that we can live debug the problem.


Hello MAXM, 1st of all thank you for all the effort to help us. I have both options to offer to you either a call or a repo at github. Our repo is private so I will need to know which email will ask for permission. Maybe we can try our repo first, than, if you do not find anything, we can go further on a call. What you think? Please, let me know which will be the account that will ask for permission so I can show it to you.

Thank you so much.

Hey @rcbernardino,

I’m happy to help! First, please send an email to developersupport@zoom.us with a link to this thread. I’ll follow-up there and I’ll share my email that you can use to add me to the private repo.

If I’m not able to find anything with the private repo, we can set up a meeting to live debug the issue.