When start_time is in the past, recurring meetings are scheduled at wrong time

Description
Hi
Recently, since around January 5th, we’ve had some issues when scheduling meetings using the api.

The issue occurs when start_time parameter is already in the past.
For example, suppose we are scheduling a recurring meeting to occur every Friday at 10AM and we give start_time as 2021-01-18T10:00:00 ( note here that the date 18th is a Monday, and at the time of this post is already in the past. So the first occurence should be 2021-01-22T10:00:00 ).

In the past, the meetings would be scheduled properly with the first date being the first available Friday and at 10AM. But now, it being scheduled on the correct date, but incorrect time. Specifically, the current server time is being taken as the time part of start_time (I will post example json data).

That is, suppose time now is 2021-01-19T16:31:00Z (created_at) (this is just an example), then the start_time in the occurences becomes <the_recurring_day_date> + <created_at_time>, so the first occurence becomes 2021-01-22T16:31:00Z instead of the expected 2021-01-22T10:00:00. This was not how it was working in the past, the time wouldn’t get modified like this. We started noticing this issue this January

Which App Type (OAuth / Chatbot / JWT / Webhook)?
We are using JWT

Which Endpoint/s?
The issue is in the create meeting endpoint
https://api.zoom.us/v2/users/{userId}/meetings

How To Reproduce (If applicable)

  1. Just create a recurring meeting with the start_time in the past using the endpoint I mentioned above and check the response

Additional context
Here are some sample requests and responses from our logs
This is a past example, from when it was working fine
The request was made at 2020-11-07 13:52:06 Asia/Kolkata (+05:30) ( 2020-11-07 08:22:06.0 UTC (+00:00) )
This was working correctly
Request

{"topic":"Meeting on Saturday at UK time 10.30 am and Indian time 3.00 pm.","type":8,"start_time":"2020-10-31T15:00:00","duration":"60","timezone":"Asia\/Kolkata","settings":{"host_video":true,"participant_video":true,"join_before_host":true,"approval_type":2,"auto_recording":"cloud","meeting_authentication":false,"contact_name":"Tom"},"recurrence":{"type":2,"weekly_days":"7","end_times":8}}

Response

{"status":true,"info":{"uuid":"secret","id":1234567890,"host_id":"secret","host_email":"secret@gmail.com","topic":"Meeting on Saturday at UK time 10.30 am and Indian time 3.00 pm.","type":8,"status":"waiting","timezone":"Asia\/Kolkata","created_at":"2020-11-07T08:22:06Z","start_url":"ImHidingThisUrlForSecurityReasons","join_url":"ImHidingThisUrlForSecurityReasons","occurrences":[{"occurrence_id":"secret","start_time":"2020-11-07T09:30:00Z","duration":60,"status":"available"},{"occurrence_id":"secret","start_time":"2020-11-14T09:30:00Z","duration":60,"status":"available"},{"occurrence_id":"secret","start_time":"2020-11-21T09:30:00Z","duration":60,"status":"available"},{"occurrence_id":"secret","start_time":"2020-11-28T09:30:00Z","duration":60,"status":"available"},{"occurrence_id":"secret","start_time":"2020-12-05T09:30:00Z","duration":60,"status":"available"},{"occurrence_id":"secret","start_time":"2020-12-12T09:30:00Z","duration":60,"status":"available"},{"occurrence_id":"secret","start_time":"2020-12-19T09:30:00Z","duration":60,"status":"available"}],"settings":{"host_video":true,"participant_video":true,"cn_meeting":false,"in_meeting":false,"join_before_host":true,"mute_upon_entry":false,"watermark":false,"use_pmi":false,"approval_type":2,"audio":"both","auto_recording":"cloud","enforce_login":false,"enforce_login_domains":"","alternative_hosts":"","close_registration":false,"show_share_button":false,"allow_multiple_devices":false,"registrants_confirmation_email":true,"waiting_room":false,"request_permission_to_unmute_participants":false,"global_dial_in_countries":["US"],"global_dial_in_numbers":[{"country_name":"US","number":"secret","type":"toll","country":"US"},{"country_name":"US","number":"secret","type":"toll","country":"US"},{"country_name":"US","number":"secret","type":"toll","country":"US"},{"country_name":"US","number":"secret","type":"toll","country":"US"},{"country_name":"US","number":"secret","type":"toll","country":"US"},{"country_name":"US","number":"secret","type":"toll","country":"US"},{"country_name":"US","number":"secret","type":"toll","country":"US"}],"registrants_email_notification":true,"meeting_authentication":false,"encryption_type":"enhanced_encryption"},"recurrence":{"type":2,"repeat_interval":1,"weekly_days":"7","end_times":8}}}

Now this is an example from this month
The request was sent at 2021-01-17 18:32:10 Asia/Kolkata (+05:30) ( 2021-01-17 13:02:10.0 UTC (+00:00) )
This is not working correctly, as instead of first occurence being at 2021-01-23T21:15:00, it got scheduled for 2021-01-23T13:02:10 ( 2021-01-23 18:32:10.0 Asia/Kolkata (+05:30) )
Request

{"topic":"Meeting on Saturday at UK time 3.30 pm and Indian time 9.15 pm.","type":8,"start_time":"2020-12-05T21:15:00","duration":"60","timezone":"Asia\/Kolkata","settings":{"host_video":true,"participant_video":true,"join_before_host":true,"approval_type":2,"auto_recording":"cloud","meeting_authentication":false,"contact_name":"Jemil"},"recurrence":{"type":2,"weekly_days":"7","end_times":12}}

Response

{ "status": true, "info": { "uuid": "secret", "id": 987654321012, "host_id": "secret", "host_email": "secret@gmail.com", "topic": "Meeting on Saturday at UK time 3.30 pm and Indian time 9.15 pm.", "type": 8, "status": "waiting", "timezone": "Asia\/Kolkata", "created_at": "2021-01-17T13:02:10Z", "start_url": "secret", "join_url": "secret", "occurrences": [ { "occurrence_id": "secret", "start_time": "2021-01-23T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-01-30T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-02-06T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-02-13T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-02-20T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-02-27T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-03-06T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-03-13T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-03-20T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-03-27T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-04-03T13:02:00Z", "duration": 60, "status": "available" }, { "occurrence_id": "secret", "start_time": "2021-04-10T13:02:00Z", "duration": 60, "status": "available" } ], "settings": { "host_video": true, "participant_video": true, "cn_meeting": false, "in_meeting": false, "join_before_host": true, "jbh_time": 0, "mute_upon_entry": false, "watermark": false, "use_pmi": false, "approval_type": 2, "audio": "both", "auto_recording": "cloud", "enforce_login": false, "enforce_login_domains": "", "alternative_hosts": "", "close_registration": false, "show_share_button": false, "allow_multiple_devices": false, "registrants_confirmation_email": true, "waiting_room": false, "request_permission_to_unmute_participants": false, "global_dial_in_countries": [ "US" ], "global_dial_in_numbers": [ { "country_name": "US", "number": "secret", "type": "toll", "country": "US" }, { "country_name": "US", "number": "secret", "type": "toll", "country": "US" }, { "country_name": "US", "number": "secret", "type": "toll", "country": "US" }, { "country_name": "US", "number": "secret", "type": "toll", "country": "US" }, { "country_name": "US", "number": "secret", "type": "toll", "country": "US" }, { "country_name": "US", "number": "secret", "type": "toll", "country": "US" }, { "country_name": "US", "number": "secret", "type": "toll", "country": "US" } ], "registrants_email_notification": true, "meeting_authentication": false, "encryption_type": "enhanced_encryption", "approved_or_denied_countries_or_regions": { "enable": false } }, "recurrence": { "type": 2, "repeat_interval": 1, "weekly_days": "7", "end_times": 12 } } }

Hi @arun07as,

Thank you for reaching out about this and for sharing these details.

To clarify, the supported method for scheduling a recurring meeting is to pass a start_time parameter in the future for your request. While this may have worked previously, we do not recommend passing a start time in the past, as this can lead to issues.

Thanks,
Will

Hi @will.zoom

Thank you for responding.

I also understand that in normal cases, start_time should be in the future, but its just that in our system, the schedule data is created and stored in db ( no zoom api called yet ) beforehand and only after users perform some actions, we create meeting using the apis based on the data that was already entered beforehand. Now problem is that “when” the user performs the necessary actions is completely upto them so sometimes they do it a bit late, which is what actually caused this issue, and we’ve had this issue occurring many times this month because of the sudden change

Is there any chance that there will be an update for this in zoom? Or will we have to handle this from our side?

Hi @arun07as,

I recommend updating your logic such that you’re not relying on start_times in the past to create meeting instances appropriately. If you’d like to see this changed or updated going forward, you can submit a request for that here: #feature-requests

Thanks,
Will

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.