Invalid Signature with Sample Web App

I disabled the password so it is not a problem now, but i am getting another error ‘Meeting not started’ even though the meeting has been started.

Hey @utkrist, thanks for posting and using Zoom!

What is the meeting number?


HI Tommy/Team, I have cloned the github sample app and deployed it on glitch. I also created my signature with heroku. Can you please guide me on how to modify the index.js code to add a http post so that zoom.mtg can get my signature? Hope that my explanation is clear. Thanks!

Hey @gabriele.limonta,

Nice job!

There are a few ways you can make a post request in JavaScript.

Once you choose a method, just put in your heroku url and request body :slight_smile:

Let me know if that helps!


Hi Tommy,

I have added one of the methods suggested and I can generate the signature but it always return me

  1. {method: “join”, status: false, result: null, errorMessage: undefined, errorCode: 1}

  2. method: “join”

  3. status: false

  4. result: null

  5. errorMessage: undefined

  6. errorCode: 1

  7. proto: Object

This is the webapp on glitch

I would be grateful if you could have a look.


Ths is the screenshot fo the error

Hey @gabriele.limonta,

Looks like you are trying to start your own meeting.

Are you passing in 1 for the meetConfig.role?


No, I pass 0. I tried by pass 0,1 and 5 but it always returns me the same error. Is it possible to send you the code in DM?

Hey @gabriele.limonta,

Double check you are passing in the signature correctly. The response from your signature endpoint is being converted to text and not JSON, and you need to pass in the actual signature, not just the object returned from the endpoint.



Many thanks Tommy. It works well now :slight_smile:

Is there any timeline update on the fully responsive web SDK?

1 Like

Happy to hear you got it working! :slight_smile:

No timeline set in stone, but either later this year, or next year.


Hey @tommy,

Will you help me with generating the signature in Ruby.

So far I have tried below code:

 ts = ( * 1000).round(0) - 30000
  msg = Base64.strict_encode64(@api_key + @meeting_number + ts.to_s + @role)

  digest =
  hmac =, digest)
  hmac << msg
  hash = Base64.encode64(hmac.digest)

  signature = Base64.urlsafe_encode64("#{@api_key}.#{@meeting_number}.#{ts.to_s}.#{@role}.#{hash}")

Error: /**/localJsonpCallback({“status”:false,“errorCode”:200,“errorMessage”:“Invalid signature.”,“result”:null});

Hi @deepak2,

Can you make sure that your systems settings is up to date? Please see my comment on this post -
Join meeting timeout or signature expired.

I was able to solve this in Ruby.

1 Like

Hi @deepak2,

We’re glad that you were able to resolve the issue. We’ll update our Generate Signature docs to include a Ruby example -

Let us know if you need anything else.


I didn’t see any ruby examples here:

Do you have an example somewhere?

Hey @deepak2,

Can you share the Ruby code function you developed? We would be happy to add it to the docs. :slight_smile:

CC @anthony


Yes. Sure.

Below is the code:

require "base64"
require "openssl"

module Zoom
  class SignatureGenerator
    def initialize(meeting_number)
      @meeting_number = meeting_number
      @api_key = "< api key >"
      @api_secret = "< api secret >"
      @role = "0"   # for attendee

    def encode64s(value)

    def signature
      ts = ( * 1000).round(0) - 30000
      msg = encode64s(@api_key + @meeting_number + ts.to_s + @role)

      hash = encode64s(OpenSSL::HMAC.digest("sha256", @api_secret, msg))

Thanks @deepak2! :slight_smile:

@anthony, check out the ruby example! ^


hello deepak2

I also tried to generate signature in ruby on rails like this

def signature params
timestamp = ( * 1000).to_i - 30000 timestamp
message = Base64.strict_encode64("#{params[:apiKey]}#{params[:meetingNumber]}#{timestamp}#{params[:role]}")
hash = Base64.strict_encode64(OpenSSL::HMAC.digest(‘sha256’, params[:apiSecrete], message))
signature = Base64.strict_encode64("#{params[:apiKey]}.#{params[:meetingNumber]}.#{timestamp}.#{params[:role]}.#{hash}")

respond_to do |format|
  format.json { render json: {signature: signature} }

I think it’s same to your code
But it works with meetings created only one account.
If i use MeetingID created another account this Error shows
“Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again.”
please help me!