Meeting SDK Type and Version: Web Meeting SDK 4.0.7 (General App / User Managed)
Description:
Our app was working correctly until March 23, 2026, when a Zoom Marketplace reviewer accessed our app for functional review. Since then, ZoomMtg.join() is called with valid credentials but no success or error callback is ever triggered — the participant never appears in the meeting.
What we have verified:
SDK Key, ZAK token (fresh from /v2/users/me/zak via OAuth), and JWT signature are all present and valid
ZoomMtg.init() completes successfully
ZoomMtg.join() is called with correct parameters
The WebSocket connection is established (HTTP 101 Switching Protocols)
Binary messages are exchanged (handshake + heartbeats of 16B)
The second WebSocket closes with a 21B message (clean close)
No error callbacks are fired, no error messages in console
Reproduced in Chrome, Edge, incognito mode
Reproduced with multiple meeting IDs including our own Personal Meeting Room
Reproduced with fresh OAuth tokens after full logout/re-authorization
This occurs even when joining meetings hosted by our own developer account
Console log (always ends here, no further output):
externalController sdk init
success load webim
success load tp
success load jsmedia
pre load wasm success
langDir …
you can remove sdkKey from join params since v4.0.0.
[silence — no success, no error]
Browser: Chrome 144, Edge 144, Windows 10
Question: Could the Marketplace review session have changed the state of our app or account on Zoom’s servers in a way that is silently blocking joins? We have been unable to resolve this from our side despite extensive debugging. Any guidance would be appreciated.
Update: I found this related thread: Join failing when using new App Client ID/Secret instead of legacy SDK keys. In that case, Zoom confirmed and fixed a bug on March 19 where new Client ID/Secret credentials failed for external meetings. My app uses Client ID/Secret as SDK Key/Secret (General App, no legacy SDK keys), and the issue started on March 23 after a Marketplace reviewer accessed the app. Could this be related to an incomplete fix rollout, or a similar server-side issue affecting my specific app/account?
Update March 28: I tested with a completely different Zoom account (different email, different credentials, new General App). Same result — SDK reaches init tp success and Video Version: 3987 but participant never appears in meeting. Tested joining both the original account’s meeting and the second account’s own meeting. This rules out account-specific blocking and credential issues. The problem appears to be general to the Web Meeting SDK 4.0.7 with General App credentials in the current environment.
Update March 28 (2): After fixing ZAK token to always be fresh, progress improved. With passcode, SDK now consistently reaches init tp success and Video Version: 3987. Without passcode it stops before init tp success. Participant still never appears in meeting. No success or error callbacks fired after Video Version: 3987. Tested with both original account and a second completely different Zoom account — identical behavior.
Resolved – Root cause found: sdkOverlay covering #meetingSDKElement blocked the join
After days of debugging, I found the root cause — sharing here in case it helps anyone.
The problem: Our app had a full-screen overlay div (position: fixed; inset: 0; z-index: 9999) displayed on top of #meetingSDKElement while the join was in progress. This caused ZoomMtg.join() to silently fail — the WebSocket connected, heartbeats were exchanged, but the server never made the inmeeting XHR call required to complete the join, and no success or error callbacks were fired.
The fix: Hide the overlay before calling ZoomMtg.init() / ZoomMtg.join(). After a successful join, the overlay can be safely restored.
Why it was hard to find: A minimal test page without the overlay worked fine. The main app with the overlay failed silently. The SDK needs #meetingSDKElement to be unobstructed in the DOM during the join process — even if the element itself is not visually rendering anything.
Hope this saves someone else a few days of debugging!