Meeting ended still status showing as "waiting"

Hello team, I’m using Zoom Create Meeting API using JWT to create a meeting in our website,
but when i press “End meeting for All”, is it really ending the meeting as i checked the status through Get Meeting API through Zoom API reference the status shows as “waiting”

Also, when i use Update Meeting status API, i pass all the required headers like JWT token,Meeting id and Content/type but i get the response as “null”. When i checked my API call logs i see response as “N/A”. When i browsed the url it shows as “Access token not valid” but as i am using JWT method i passed proper JWT token but i can’t actually get it.

I’m using JWT App type.

Endpoints after i call the Update Meeting Status it’s
but i have doubt as i press “End meeting for All” through zoom should it not send and response automatically stating “Meeting ended”? Can it be done automatically?

Hey @nike28

Thanks for posting on the Zoom Devforum! I am still learning, but I will try my best to help answer your question. :slightly_smiling_face:

Checkout these related threads that may have the answer you are looking for:

If these threads did not help, please let us know by replying back here and someone from the Developer Relations team will get back to you shortly.


Ok thanks. I have will check it and will revert you. Can you also help me with JWT Token expiration? How can i create a token which doesn’t expire? Cause everytime, i have to go to my app and create it manually? I have heard about library or so but i didn’t actually get it, like how do i use it? I’m using Codeigniter/PHP technology. Is it possible that you provide me some sample code which we allow me create a permanent JWT token or a token that never expires?

Thank you!!

Nikhil Sreenivasan.

Hello, I had referred to the solutions which you had suggested, i had created fresh meeting with type 2 which is scheduled meeting and i had given duration of 10 minutes, also there were total 4 participants including me still after i(host) ended it for all but i get the status as “waiting”. Why is it so? Can you guys help me with this? If any details are required from my end, please let me know.

Nikhil Sreenivasan.

@tommy Hey buddy!! Can you please help me with this? I’m really stuck with this status issue!! Hope to get a reply soon. If anything is required from my end, please let me know.
Thank you!!

Nikhil Sreenivasan.

Hi @nike28,

In regards to the ‘waiting’ status you’re seeing after ending the meeting, can you confirm if the meeting you’re referencing when testing is either 1) a recurring meeting, or 2) an instant meeting? For each of these meeting types, the status for the meeting will go back to “waiting” after the meeting has ended.

As for the JWToken expiration, I should note that JWTokens must expire—however, you can control how long they last. From within your JWT app in the Marketplace section of your account, you can click into View JWT token and select how long your token will last:

I hope this helps!


Hello @will.zoom,

Thank you for your response. I had created a scheduled meeting as i had already seen on developer forum that instant and recurring meeting status goes back to ‘waiting’, and also i had set ‘pmi’ parameter to false as well. If you want any details, i will create a fresh scheduled meeting and provide you the details as that meeting’s token might have expired already.

Also, with regards to JWT token is there any maximum time limit for it’s expiration? Like, can i set to expire after 1 year or 2 year through this below code?

private function generateJWTKey() {
$key = $this->zoom_api_key;
$secret = $this->zoom_api_secret;
$token = array(
“iss” => $key,
“exp” => time() + 3600 //60 seconds as suggested

Nikhil Sreenivasan.

Hey @nike28,

Thanks for clarifying, if you’re able to create a new meeting and replicate the behavior, it’d be great if you could share those specific details so I can help to debug!

In reference to the JWT token expiration, we recommend setting it at a shorter interval, though the UI will allow you to set the expiration date out as far as a year or more. But again, best practice would be to keep this duration of validity a bit shorter.


Hello @will.zoom,

I have created another scheduled meeting, use_pmi to false for 19th Sept 20:55 IST and scheduled it for 5 minutes. I have tested it with 4 participants including me(Host) and ended it from zoom as well. I’m providing UUID and meeting id for your reference, if anything else is required please feel free to ask.
UUID: d4GWmRruQLKkOOnrlYJ9fw==
Meeting ID: 95003512214

Also from the code i have set the JWT token to expired after 30 days so that it doesn’t expire soon and it will be easy for me to give you the details after running Get Meeting API or so.

Thank you!!

Nikhil Sreenivasan

Hi @nike28,

Thanks for confirming and testing that. Can you share the API response you’re getting when you call the GET Meeting API, if you’re still seeing the ‘waiting’ status?


Hello @will.zoom,

Below is the API response i got after I ran Get API. Yes, it’s still showing as “waiting”.

“agenda”: “”,
“assistant_id”: “”,
“created_at”: “2020-09-19T15:18:22Z”,
“duration”: 5,
“encrypted_password”: “YlVhUHpPZ1QrSGc3dE5BellJOHMyQT09”,
“h323_password”: “410910”,
“host_email”: “”,
“host_id”: “hd9rbpk9Qla3GGQTiA8dBw”,
“id”: 95003512214,
“join_url”: “”,
“password”: “3tNxT5”,
“pstn_password”: “410910”,
“settings”: {
“alternative_hosts”: “”,
“approval_type”: 2,
“audio”: “voip”,
“auto_recording”: “none”,
“close_registration”: false,
“cn_meeting”: false,
“enforce_login”: false,
“enforce_login_domains”: “”,
“host_video”: false,
“in_meeting”: false,
“join_before_host”: false,
“meeting_authentication”: false,
“mute_upon_entry”: false,
“participant_video”: false,
“registrants_confirmation_email”: true,
“registrants_email_notification”: true,
“request_permission_to_unmute_participants”: false,
“use_pmi”: false,
“waiting_room”: true,
“watermark”: false
“start_time”: “2020-09-19T15:25:00Z”,
“start_url”: “”,
“status”: “waiting”,
“timezone”: “Asia/Kolkata”,
“topic”: “Test Meeting!!”,
“type”: 2,
“uuid”: “PJ5QrYAoQrCLnrxwEZM91w==”