Video SDK Error: “This account does not exist or does not belong to you” (Error Code 200) - Valid Credentials
Problem Description
I’m encountering a persistent JOIN_MEETING_FAILED error when attempting to join a Video SDK session using the Web SDK (@zoom/videosdk v2.2.12). The error message states:
{
type: "JOIN_MEETING_FAILED",
reason: "This account does not exist or does not belong to you",
errorCode: 200
}
Important: I have verified multiple times that my SDK Key and SDK Secret are correct and copied directly from the Zoom Marketplace Video SDK app credentials page.
Implementation Details
Backend (JWT Token Generation):
- Using Deno/Supabase Edge Function
- JWT signing library:
jsrsasign@11.1.0 - Token generation code:
const header = { alg: 'HS256', typ: 'JWT' };
const payload = {
sdkKey: sdkKey, // Verified correct
mn: cleanMeetingNumber, // Format: "session-{uuid}"
role: role === 'host' ? 1 : 0,
iat: Math.floor(Date.now() / 1000),
exp: Math.floor(Date.now() / 1000) + 7200,
appKey: sdkKey,
tokenExp: Math.floor(Date.now() / 1000) + 7200,
};
const sHeader = JSON.stringify(header);
const sPayload = JSON.stringify(payload);
const zoomToken = KJUR.jws.JWS.sign('HS256', sHeader, sPayload, sdkSecret);
Frontend (Web SDK Implementation):
import ZoomVideo from '@zoom/videosdk';
const client = ZoomVideo.createClient();
await client.join(sessionName, token, userName);
// Fails with error 200
What I’ve Verified
SDK Credentials: Copied directly from Zoom Marketplace, correct SDK Key and Secret
JWT Structure: Header and payload match Zoom documentation exactly
Token Format: Successfully generates a valid JWT string
Session Name: Tested with various formats (alphanumeric, UUIDs with prefix)
Role Values: Using correct values (1 for host, 0 for participant)
Timestamps: iat and exp are valid Unix timestamps
Algorithm: Using HS256 as specified in documentation
SDK Version: Using latest stable version (v2.2.12)
Debug Output
Backend logs show successful token generation:
[generate-zoom-token] SDK Key present: true length: 36
[generate-zoom-token] SDK Secret present: true length: 36
[generate-zoom-token] SDK Key first 10 chars: kzUSyIxvaL...
[generate-zoom-token] Token generated successfully for host
[generate-zoom-token] meetingNumber: session-37f6265f-b72d-4665-ae7e-ebb67ece8b30
Frontend logs before join attempt:
[useZoomSDK] sessionName: session-37f6265f-b72d-4665-ae7e-ebb67ece8b30
[useZoomSDK] userName: Test User
[useZoomSDK] token length: 250+
[useZoomSDK] CALLING client.join()...
[useZoomSDK] Join error: {type: "JOIN_MEETING_FAILED", reason: "This account does not exist or does not belong to you", errorCode: 200}
Questions
-
What does error code 200 specifically indicate? The error message suggests an account issue, but my credentials are definitely correct.
-
Is there a credential verification endpoint? Is there a way to test/validate my SDK Key and Secret before attempting to join a session?
-
Could this be related to the Video SDK app configuration? Are there any specific settings in the Zoom Marketplace app that need to be enabled beyond just creating the app and getting credentials?
-
JWT payload requirements: Are there any additional required or recommended fields in the JWT payload that aren’t explicitly mentioned in the documentation?
-
Session name restrictions: Are there any undocumented restrictions on the session name format? I’m using the format
session-{uuid}.
Environment
- SDK: @zoom/videosdk v2.2.12
- Platform: Web (React/TypeScript)
- Browser: Chrome (latest), Firefox (latest)
- Backend: Deno/Supabase Edge Functions
- JWT Library: jsrsasign v11.1.0
Additional Context
- The Video SDK app is properly created in the Zoom Marketplace
- The app is activated and credentials are shown as valid in the dashboard
- No other error messages or warnings appear before the join failure
- The same error occurs for both host and participant roles
Has anyone encountered this specific error with valid credentials? Any insights would be greatly appreciated!