Generate Signature

Each request to Start or Join a Meeting / Webinar must be verified by an encrypted signature authorizing the user to enter.

The signature is used in the ZoomMtg.join() method. Follow the guide to Start and Join a Meeting / Webinar for reference.

Signature parameters:

Name Description
apiKey API Key of your account
apiSecret API Secret of your account
meetingNumber Meeting Number being joined
role 1 for meeting host, 0 for participants & joining webinars

Below are sample functions to generate a base64 encrypted signature.

const crypto = require('crypto') // crypto comes with Node.js

function generateSignature(apiKey, apiSecret, meetingNumber, role) {

  // Prevent time sync issue between client signature generation and zoom 
  const timestamp = new Date().getTime() - 30000
  const msg = Buffer.from(apiKey + meetingNumber + timestamp + role).toString('base64')
  const hash = crypto.createHmac('sha256', apiSecret).update(msg).digest('base64')
  const signature = Buffer.from(`${apiKey}.${meetingNumber}.${timestamp}.${role}.${hash}`).toString('base64')

  return signature
}

// pass in your Zoom JWT API Key, Zoom JWT API Secret, Zoom Meeting Number, and 0 to join meeting or webinar or 1 to start meeting
console.log(generateSignature(process.env.API_KEY, process.env.API_SECRET, 123456789, 0))

Simple Signature Setup

To quickly, easily, and securly generate a signature for the Web SDK, checkout the signature sample app, or deploy the signature sample app to a free Heroku instance by clicking “Deploy to Heroku”:

Deploy

After clicking the “Deploy to Heroku” button, enter your JWT API Key and API Secret:

Then click “Deploy app”.

Once your app is deployed, make a POST request to your Heroku URL with the following request body:

Body Description
meetingNumber The Zoom Meeting / Webinar Number.
role The role 0 to join the meeting or webinar, or 1 to start the meeting.

Example Request

POST https://{sub_domain}.herokuapp.com

Request Body:

{
  "meetingNumber": 123456789,
  "role": 0
}

If successful, the response body will be a JSON representation of your signature:

{
  "signature": "eHUzSlBhQV9SSlcyLTlsNV9IQWFMQS4xMjM0NTY3ODkuMTU4MzE2OTUzODc3My4wLkJMNEtiM3FINGx5ZzA1MUZtbGJOcGtPRnlFQS9lQUR2bGllVzJNNGZJeWs9"
}

In your code using the Web SDK, pass in the signature to the ZoomMtg.join() method:

// make http request to your server to get the signature

ZoomMtg.join({
  signature: signature,
  meetingNumber: meetingNumber,
  userName: userName,
  apiKey: apiKey,
  userEmail: userEmail,
  passWord: password,
  success: (success) => {
    console.log(success)
  },
  error: (error) => {
    console.log(error)
  }
})

Need help?

The first place to look is on our Developer Forum. If you can't find the answer or your request includes sensitive information, contact Developer Support.