Expiry details for webinars/meetings not clear


  1. Need clarity regarding Expiry for webinars and meetings.
  2. Getting message - “Webinar has expired.” for webinarId - ***********


As it is mentioned here -
For security reasons, the recommended way to retrieve the updated value for the start_url field pro-grammatically (after expiry) is by calling the Retrieve a Meeting/Webinar APIand referring to the value of the start_url field in the response.

I have few questions -

  1. Could you confirm if the time duration for expiry of a webinar is 2 hour and the start_url can be generated after the expiry? Is it the same for meetings, if not what is the expiry time of Meetings?
  2. Can we control expiry time for the Webinar/Meeting, in terms of duration?
  3. What is the security reasons mentioned here?
  4. I am also not clear about the language here - updated value for the start_url field pro-grammatically (after expiry).
    I am not getting the updated value for start_url for webinar id - ***********. It is showing that Webinar has expired. I should be able to regenerate the start_url after expiry?
    Could you let me know what I am missing here?
  5. If expiry duration is 2 hours, and webinar continues for more than 2 hours. Will it stop the webinar automatically?
  6. Will users have to do some settings in this scenario by themselves or can I put some programmatic setting so that webinar doesn’t end abruptly for users?

*This post has been edited to remove any meeting / webinar IDs

Hey @rahul5,

Just so we are on the same page, the Webinar has expired. error is not related to the start_url expiry.

Yes it is 2 hours for meetings and webinars, but you can generate a new one for future meetings at any time using the Get Meeting endpoint.


It is always good practice to have tokens not last forever / long periods of time.

This means the webinar has started, and been ended, and or has gone past the end time of the webinar.

No, the webinar will not timeout. It will only expire if the webinar is ended and is past the end time.

Webinars won’t abruptly end for users.


Hi @tommy

Thanks for the response, I have a clarity now.

But to solve this problem Webinar has expired -

I am calling the retrieve api after the expiry, it should give me the start_url and join_url, but it is throwing me error that access token is not valid. But using the same token I am able to call the other APIs, even I am able to create webinar/meetings.
Could you help me with this? You can look into the same webinar (id - ***********) for debugging.

Note - If I am calling the retrieve API using the same token before expiry it is giving me correct start_url and join_url.

*This post has been edited to remove any meeting / webinar IDs

Hey @rahul5, happy to help! :slight_smile:

Are you using a JWT app or OAuth app? If it is an OAuth app, what is your app name so I can debug?


I am using OAuth app. App name is - HowNow. This is not a published app yet.

@tommy Do you have any update on this, please?

Hey @rahul5,

Let me know if my post here helps:



Thanks for the reply, I have a question - For which I need answers to on urgent basis -

I have implemented - Update User Settings API . We are using this API for setting "embed_password_in_join_link, so that users will always have an embedded password in their join link. In our development app this is working properly but in production it is throwing error -

"Invalid access token, does not contain scopes: [user:write:admin, user:write, zms:user:write]."

I deauthorized app from Installed Apps section and reinstalled the App again. Note I am using the - User Level app, with /me in URL.

Why is this happening, am I missing something here?

Could you please respond on this at earliest?

Adding the request I have made for you reference -

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.zoom.us/v2/users/me/settings")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'
request["authorization"] = "Bearer #{user.zoom_integration_access_token}"
request.body = "{\"schedule_meeting\":{\"embed_password_in_join_link\":true}}"

response = http.request(request)
puts response.read_body

Also adding user id for which I have tried this - nEhjczVgQVmegVypPOoq6g

Hey @rahul5,

Your code looks correct.

Is your app published on the marketplace? If so the scope change won’t take affect until the app update is approved.

What is the name of your App?