Signature being generated but client doesn't exist

When I try to join a meeting, I get this error
Error joining meeting {type: ‘JOIN_MEETING_FAILED’, reason: ‘This account does not exist or does not belong to you’, errorCode: 200}

I’m not sure what’s causing it. I’m generating a signature from the backend as such

  const sdkKey = process.env.VITE_ZOOM_CLIENT_ID;
  const sdkSecret = process.env.VITE_ZOOM_CLIENT_SECRET;
  const oPayload = {
    app_key: sdkKey,
    tcp: topic,
    pwd: password,
    user_identity: userIdentity,
    session_key: sessionKey,
    role_type: roleType,

  const sHeader = JSON.stringify(oHeader);
  const sPayload = JSON.stringify(oPayload);

  signature = KJUR.jws.JWS.sign("HS256", sHeader, sPayload, sdkSecret);

This is how the client joins the meeting

const init = async () => {
    client.init('US-EN', 'CDN')
    console.log('client', client)
    try {
      setLoadingText('Joining meeting...')
      console.log('meetingArgs', JSON.stringify(await meetingArgs))
      await client.join(meetingArgs.topic, meetingArgs.signature,, meetingArgs.password)
      const stream: MediaStream = await client.getMediaStream() // type MediaStream = typeof Stream
    } catch(err: any) {
      console.log("Error joining meeting", err)

I do get a signature but the issue persists. The client object’s fields are all undefined for some reason, not sure if that’s normal or even relevant

Please someone help. I’ve been stuck on this for a while and this is the last feature I need to deploy my product. I don’t know how else to get help