"Update a webinar" endpoint's start_time changes are ignored if the webinar was scheduled to be currently running

Description
The “Update a webinar” endpoint (PATCH/webinars/{webinarId}) ignores changes to the start_time if the webinar is currently supposed to be running (even if it actually isn’t started). The endpoint returns an HTTP 204 status code, but the time doesn’t change upon inspection of the webinar on the Zoom web site, or via the “Get a webinar” endpoint (GET /webinars/{webinarId}).

If the webinar is supposed to begin in the future and the start_time is changed, the endpoint response is identical and the scheduling change is applied.

What restrictions are there for changing a webinar that is supposed to be underway, and how can this be detected and communicated to the user?

Error
There is no error message; the API logs show an HTTP 204 status code as if the changes were accepted (webinar IDs are masked):

{
"endpoint":  "https://api.zoom.us/v2/webinars/***********",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-08-24 11:16:47",
"method":  "PATCH",
"request_body":  "{"type":9,"start_time":"2021-08-24T15:20:00Z","duration":15,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":24,"end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

This is indistinguishable from a scheduling update to a future webinar that does end up applied (webinar IDs are masked):

{
"endpoint":  "https://api.zoom.us/v2/webinars/***********",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-08-24 11:31:19",
"method":  "PATCH",
"request_body":  "{"type":9,"start_time":"2021-08-25T08:00:00Z","duration":120,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":25,"end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Which App Type (OAuth / Chatbot / JWT / Webhook)?
This is a JWT app.

Which Endpoint/s?
The “Update a webinar” endpoint.

How To Reproduce (If applicable)
Steps to reproduce the behavior:

  1. Reschedule a webinar to begin a few minutes from the current time using the “Update a webinar” endpoint. See the “Error” section earlier for examples of the requests that are issued.
  2. Wait for the begin time to elapse, and before the end time is reached.
  3. Reschedule the same webinar to begin in the future using the “Update a webinar” endpoint. See the “Error” section earlier for examples of the requests that are issued, particularly the first request.
  4. Inspect the webinar using the Zoom web site as the webinar host and via the “Get a webinar endpoint”, and observe that the start_time field is still set to the time in step 1 instead of the new time indicated in step 3.

For comparison, rescheduling a future webinar applies the new time:

  1. Reschedule a webinar to begin a day later from the current time using the “Update a webinar” endpoint. See the “Error” section earlier for examples of the requests that are issued.
  2. Reschedule the same webinar to begin an additional hour later using the “Update a webinar” endpoint. See the “Error” section earlier for examples of the requests that are issued, particularly the second request.
  3. Inspect the webinar using the Zoom web site as the webinar host and via the “Get a webinar endpoint”, and observe that the start_time field is updated.

Screenshots (If applicable)
See the API Call Logs in the “Error” section earlier.

Additional context
The user scenario is originally scheduling the webinar at the incorrect time, then once the incorrect time is reached, realizing that the time should be corrected to an hour later, and trying to issue a correction.

Hey @MultiplayerSession,

Thank you for reporting this, I’ve reached out to our engineering team to see if they can confirm this as expected behavior. If so, I think we need to return something other than 204 in this case.

I’ll let you know what I hear. (ZOOM-302905)

Thanks,
Max

I’m also seeing the same behavior for the Update a meeting endpoint where if the meeting recently should have started and I try to adjust the start time to the near future (a couple minutes later), the call succeeds with status code 204 but is ignored and the meeting times are unchanged. If I set a far future start time (like the next day), the call still succeeds with status code 204 and is actually reflected.

If I visit the Zoom web site and interactively edit all occurrences for the meeting and adjust the start time in a similar manner, that is also reflected.

The documentation for the Update a meeting endpoint does state that “The start_time value must be a future date.” which seems like it’s being enforced very literally as a future day and not just a future time on the same day. If that’s the case and is intentional, can we get the exact heuristics clarified on what is considered to be the same date cutoff so I can detect this situation and inform the user, or decide if we are okay with spending double the rate limiting API budget and set it to a far future time and then immediately back to the intended value?

Hey @MultiplayerSession,

So far, we haven’t been able to reproduce the issue here. Are you able to provide a meeting/webinar ID where you saw this happen? The more recent the example the better.

My understanding is that you should be able to change the start_time to any time in the future. I’ll work to confirm what is expected here too.

Thanks,
Max

An example Meeting ID we’re seeing this behavior is for [REDACTED] — this meeting is only used for testing purposes and can be freely modified. For future redaction purposes, there are 4 instances of this meeting ID in this post.

The following are the extracted calls and timestamps from the API Call Logs.

Initial PATCH call to set the start time a few minutes into the future = call at 09:31:27 AM Sep 28, 2021 (Eastern time, UTC -04:00):

{
"endpoint":  "https://api.zoom.us/v2/meetings/[REDACTED]",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-09-28 09:31:27",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-09-28T13:33:00Z","duration":120,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":28,"end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Time elapses so that the start time arrives; subsequent PATCH call to move the start time back an hour later = call at 09:33:59 AM Sep 28, 2021 (Eastern time, UTC -04:00):

{
"endpoint":  "https://api.zoom.us/v2/meetings/[REDACTED]",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-09-28 09:33:59",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-09-28T14:33:00Z","duration":120,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":28,"end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Additional PATCH call to try and get the changed time recognized again = call at 09:34:00 AM Sep 28, 2021 (Eastern time, UTC -04:00):

{
"endpoint":  "https://api.zoom.us/v2/meetings/[REDACTED]",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-09-28 09:34:00",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-09-28T14:33:00Z","duration":120,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":28,"end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Inspecting this meeting from the Zoom web site or retrieving meeting details from the API still shows the start time as 9:33 AM (Eastern time, UTC -04:00) instead of 10:33 AM (Eastern time, UTC -04:00) requested by the subsequent calls.

Hey @MultiplayerSession,

Thank you for following up on this. After looking into these requests, I’m thinking this is happening because this is a recurring meeting and the Meeting ID is being used to access the meeting without an occurrence ID.

When the meeting start_time passes, I expect the API the defaults to updating the next instance of the meeting. We should be able to avoid this by using the occurrence_id parameter when calling the API:

I was also able to find those requests in our logs thanks to your detailed information. I’ve forwarded this to our team so they can confirm the behavior around the requests that you provided.

Thanks,
Max

Thanks for the update. Just to emphasize (since this wasn’t identified in the original post), the behavior varies depending on how distant is the new start time. From rough testing, if the new start time is within about 6 hours of the current time, the timing change has no effect. If the new start time is around a day or more later, the timing change does get applied. I haven’t narrowed the threshold further, but this information might aid the investigation.

To be clear, our intention is to overwrite all existing occurrences with a single occurrence in a single API call. We are using recurring meetings to allow future reuse of the Meeting ID.

Hey @MultiplayerSession,

Thank you for adding more detail here, we’ll take this into consideration. I’ll let you know when I have a significant update on this.

Thanks,
Max

Do we have a sense of what range of start_time values are affected? This will help improve the guidance we tell our users so they have a better sense of what will happen if they need to make a last-minute edit.

Hey @MultiplayerSession,

Thank you for your patience here. Our team got back to me and indicated that this happened because the meeting was initially a No Fixed Time meeting and then was converted, via an API call, to a recurring meeting with an end_times of 1 (one occurrence).

According to our team, the subsequent API calls didn’t work because the initial call to create a recurring meeting with one occurrence was successful.

With that being said, are you seeing this only happens when you first create a meeting with No Fixed Time or are you able to reproduce the issue by just creating a meeting and attempting to update it after the scheduled start time?

Any information you can provide should help to understand the cause.

Thanks,
Max

Thanks for the hint about the historical meeting type having an impact. It looks like if the meeting was initially scheduled via the API as type 8, then rescheduling after the start time with type 8 fails, regardless of the originally created meeting type. Here are the testing steps I took:

  1. Create or reuse a meeting interactively via the web site with the specified meeting type as defined in Create a meeting.
  2. Optionally, change the meeting type interactively via the web site.
  3. Call the API to initially schedule the meeting in a few minutes with the specified meeting type.
  4. Wait for the start time to arrive.
  5. Call the API to reschedule the meeting an hour later from the original start time with the specified meeting type.

The following table shows the rescheduling results and the timestamps for the corresponding API call logs (use a Find feature to jump to the date_time timestamp in the logs following the table). Timestamps are US Eastern time (UTC -0500).

Zoom Meeting Rescheduling After Start
Meeting ID Web Site Creation Type Web Site Revision Type API Initial Scheduling Type API Rescheduling Type Rescheduling Outcome API Initial Scheduling Log Time API Rescheduling Log Time
83349822023 2 N/A 2 2 success 2021-11-09 10:29:34 2021-11-09 10:31:24
83349822023 2 8 8 8 failure 2021-11-09 10:37:45 2021-11-09 10:44:41
85925695828 8 N/A 8 8 failure 2021-11-09 10:48:54 2021-11-09 10:51:08
83828925747 2 N/A 2 8 success 2021-11-09 10:58:28 2021-11-09 11:03:23
87574906546 3 N/A 8 8 failure 2021-11-09 11:09:06 2021-11-09 11:11:11

For future redaction purposes, there are 15 instances of meeting IDs in this post.

{
"endpoint":  "https://api.zoom.us/v2/meetings/83349822023",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 10:29:34",
"method":  "PATCH",
"request_body":  "{"type":2,"start_time":"2021-11-09T15:30:00Z","duration":30}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/83349822023",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 10:31:24",
"method":  "PATCH",
"request_body":  "{"type":2,"start_time":"2021-11-09T16:30:00Z","duration":30}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/83349822023",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 10:37:45",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-09T15:40:00Z","duration":30,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"09","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/83349822023",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 10:44:41",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-09T16:40:00Z","duration":30,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"09","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 10:48:54",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-09T16:50:00Z","duration":30,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"09","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 10:51:08",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-09T17:50:00Z","duration":30,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"09","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/83828925747",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 10:58:28",
"method":  "PATCH",
"request_body":  "{"type":2,"start_time":"2021-11-09T16:00:00Z","duration":30}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/83828925747",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 11:03:23",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-09T17:00:00Z","duration":30,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"09","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/87574906546",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 11:09:06",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-09T16:10:00Z","duration":30,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"09","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}
{
"endpoint":  "https://api.zoom.us/v2/meetings/87574906546",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-09 11:11:11",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-09T17:10:00Z","duration":30,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"09","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Hey @MultiplayerSession,

Thank you for following up on this! I’m following up with our team to see if there is any further information they can provide here. I’ll get back to you ASAP.

Thanks,
Max

Our team got back to me and saw that the requests were indeed working on the backend as the meeting changed to a recurring meeting with one occurrence.

I would try making calls to the Get a Webinar API to make sure the changes are going through and make sure that you aren’t changing the meeting type along with the initial API calls to update the meeting.

Thanks,
Max

Here is a fresh step-by-step walkthrough of the rescheduling failing to change the meeting time if the meeting recently started and the new meeting time is in the near future. The meeting type remains as type 8 throughout the following steps.

Initial call to schedule the meeting at 11:30:58 AM Nov 17, 2021 (API Call Logs time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-17 11:30:58",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-17T16:32:00Z","duration":60,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"17","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Retrieval call to confirm the meeting at 11:30:59 AM Nov 17, 2021 (API Call Logs time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-17 11:30:59",
"method":  "GET",
"request_body":  "N/A",
"response":  "{"uuid":"KYTug+8IQUauABx4rWsFAQ==","id":85925695828,"host_id":"yeTuQ0NkS0W1ftH0ZdRqbQ","host_email":"****","assistant_id":"","topic":"Sample Recurring Meeting","type":8,"status":"waiting","timezone":"America/New_York","agenda":"","created_at":"2021-11-09T15:47:53Z","start_url":"https://us02web.zoom.us/s/85925695828?zak=...",
"request_headers": [
 "authorization: ******",
 "connection: close"
],
"request_params": [
],
"http_status":  "200"
}

Screenshot of the meeting overview page to show the start time succeeded, since the start time is truncated from the call log:

Time passes a few minutes for the start time to arrive, then we make a call to reschedule the meeting one hour later at 11:34:14 AM Nov 17, 2021 (API Call Logs time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-17 11:34:14",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-17T17:32:00Z","duration":60,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"17","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Retrieval call to show the meeting time failed to change at 11:34:16 AM Nov 17, 2021 (API Call Logs time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-17 11:34:16",
"method":  "GET",
"request_body":  "N/A",
"response":  "{"uuid":"KYTug+8IQUauABx4rWsFAQ==","id":85925695828,"host_id":"yeTuQ0NkS0W1ftH0ZdRqbQ","host_email":"****","assistant_id":"","topic":"Sample Recurring Meeting","type":8,"status":"waiting","timezone":"America/New_York","agenda":"","created_at":"2021-11-09T15:47:53Z","start_url":"https://us02web.zoom.us/s/85925695828?zak=eyJ0eXAiOiJKV1QiLCJzdiI6IjAwMDAwMSIsInptX3NrbSI6InptX28ybSIsImFsZyI6IkhTMjU2In0.eyJhdWQiOiJjbGllbnRzbSIsInVpZCI6InllVHVRME5rUzBXMWZ0SDBaZFJxYlEiLCJpc3MiOiJ3ZWIiLCJzdHkiOjEwMCwid2NkIjoidXMwMiIsImNsdCI6MCwibW51bSI6Ijg1OTI1Njk1ODI4Iiwic3RrIjoiQUZ4d2IzdHVnMG85S0NMNU1WZG9ZUmxsOHJxdE91OEdSbzFuQi1YaDhady5CZ1lnUVM5c09EQXpZbkZ6ZDB0UFRFMUtjVWh6TmtSelVtTkVPV293UVZCSmMwbEFNVEV4TXpJMllUVmxZVEF6TW1VMVkyVXhNRFU0TVdObVpXTmlaREpsTmpKbE9HUmlaVEkyTUdaaU9ESmxPREEzWVdGbE1UWTVOak00TVRWaFpXRTNOd0FnVDNGd2VsSnZVa1p4ZVROUWJDOTNVR2M0UjNoRU9XVlpXbWhLY1hoblkxY0FCSFZ6TURJQUFBRjlMci0zUUFBU2RRQUFBQSIsImV4cCI6MTYzNzE3NDA1NiwiaWF0IjoxNjM3MTY2ODU2LCJhaWQiOiJVcF9Ncjk4N1J5aUhSdzJoaVZuN053IiwiY2lkIjoiIn0.i4rPVSvzLJcJf ...",
"request_headers": [
 "authorization: ******",
 "connection: close"
],
"request_params": [
],
"http_status":  "200"
}

Screenshot of the meeting details page to show that the page has changed but the meeting time failed to update:


Then we make a call to set the start time to a day later which is distant enough to succeed (to show that this has an effect on the outcome) at 11:57:01 AM Nov 17, 2021 (API Call Logs time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-17 11:57:01",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-11-18T17:32:00Z","duration":60,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"18","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

We retrieve the meeting to confirm the time successfully updated at 11:57:02 AM Nov 17, 2021 (API Call Logs time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/85925695828",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-11-17 11:57:02",
"method":  "GET",
"request_body":  "N/A",
"response":  "{"uuid":"KYTug+8IQUauABx4rWsFAQ==","id":85925695828,"host_id":"yeTuQ0NkS0W1ftH0ZdRqbQ","host_email":"****","assistant_id":"","topic":"Sample Recurring Meeting","type":8,"status":"waiting","timezone":"America/New_York","agenda":"","created_at":"2021-11-09T15:47:53Z","start_url":"https://us02web.zoom.us/s/85925695828?zak=",
"request_headers": [
 "authorization: ******",
 "connection: close"
],
"request_params": [
],
"http_status":  "200"
}

And this time is reflected on the web site:


What other evidence do you need?

Email addresses are redacted in the log extracts.

Hey @MultiplayerSession,

My apologies for the delay here. I’m still working to reproduce this and investigating on my end. I’ll reach back out with what I find ASAP.

Thanks,
Max

It does sound like there is a discrepancy between the production environment and the approximately-production environment, so one side needs to cross over to the other side to narrow down the cause (say, by cloning account data or adding logging information).

From a customer perspective:

  1. Is there anything our application can do to help ensure consistency from one API call to another? For example, one platform I’ve used had a concept of “waypoints” where each manipulation API call would return a unique identification header, and if we needed to have a follow-up call depend on a previous call being committed, we’d pass back the dependent identification header(s) and the platform would pause to ensure those operations fully completed and propagated before continuing with the API call. The thinking here is maybe the calls to manipulate a specific meeting need to be linked together.
  2. Would providing the calling code for the specific API calls be helpful? I could extract the calling code for the API calls into a standalone PHP file and supply that, but the exact API call patterns are tied to a complicated WordPress instance.

Hey @MultiplayerSession,

My apologies for the delay here. In my testing, I haven’t been able to reproduce the same issue but I think you’re right about this being account specific. I’ve created a new ticket with an internal resource so that we can investigate those calls.

If you have an example of a meeting where this happened recently that should help to continue the investigation as well. (ZOOM-331849)

Thanks,
Max

Here is a recent recreation using meeting ID 81842374348. The Initial scheduling call was made at 02:07:52 PM Dec 15, 2021 (Eastern time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/81842374348",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-12-15 14:07:52",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-12-15T19:09:00Z","duration":60,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"15","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Time passes and the meeting start time elapses, then we reschedule it one hour later with a call at 02:10:13 PM Dec 15, 2021 (Eastern time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/81842374348",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-12-15 14:10:13",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-12-15T20:09:00Z","duration":60,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"15","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

One second later, we retrieve the meeting details (although that is truncated from the API call logs) and find that the start time is unchanged with a call at 02:10:14 PM Dec 15, 2021 (Eastern time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/81842374348",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-12-15 14:10:14",
"method":  "GET",
"request_body":  "N/A",
"response":  "{"uuid":"Q2hQLcBnQRO+Cei7MGEXwQ==","id":81842374348,"host_id":"yeTuQ0NkS0W1ftH0ZdRqbQ","host_email":"****","assistant_id":"","topic":"Normal Session for Test Committee","type":8,"status":"waiting","timezone":"America/New_York","agenda":"","created_at":"2021-03-04T22:21:18Z","start_url":"https://us02web.zoom.us/s/81842374348?zak=eyJ0eXAiOiJKV1QiLCJzdiI6IjAwMDAwMSIsInptX3NrbSI6InptX28ybSIsImFsZyI6IkhTMjU2In0.eyJhdWQiOiJjbGllbnRzbSIsInVpZCI6InllVHVRME5rUzBXMWZ0SDBaZFJxYlEiLCJpc3MiOiJ3ZWIiLCJzdHkiOjEwMCwid2NkIjoidXMwMiIsImNsdCI6MCwibW51bSI6IjgxODQyMzc0MzQ4Iiwic3RrIjoiSzRPU3UxMWhBZGJ5ZEpvZ3VjcFFaQW96T0M4NDg3elpyVlJyajdxcXJ1OC5CZ1lnUVM5c09EQXpZbkZ6ZDB0UFRFMUtjVWh6TmtSelVtTkVPV293UVZCSmMwbEFNVEV4TXpJMllUVmxZVEF6TW1VMVkyVXhNRFU0TVdObVpXTmlaREpsTmpKbE9HUmlaVEkyTUdaaU9ESmxPREEzWVdGbE1UWTVOak00TVRWaFpXRTNOd0FnVDNGd2VsSnZVa1p4ZVROUWJDOTNVR2M0UjNoRU9XVlpXbWhLY1hoblkxY0FCSFZ6TURJQUFBRjl2NENVcFFBU2RRQUFBQSIsImV4cCI6MTYzOTYwMjYxNCwiaWF0IjoxNjM5NTk1NDE0LCJhaWQiOiJVcF9Ncjk4N1J5aUhSdzJoaVZuN053IiwiY2lkIjoiIn0.Q87T ...",
"request_headers": [
 "authorization: ******",
 "connection: close"
],
"request_params": [
],
"http_status":  "200"
}

So we send another attempt to change the start time within the same second at 02:10:14 PM Dec 15, 2021 (Eastern time, UTC -0500):

{
"endpoint":  "https://api.zoom.us/v2/meetings/81842374348",
"response_headers": [
 "Set-Cookie: zm_aid=""; Domain=.zoom.us; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; Secure; HttpOnly"
],
"date_time":  "2021-12-15 14:10:14",
"method":  "PATCH",
"request_body":  "{"type":8,"start_time":"2021-12-15T20:09:00Z","duration":60,"recurrence":{"type":3,"repeat_interval":3,"monthly_day":"15","end_times":1}}",
"response":  "N/A",
"request_headers": [
 "authorization: ******",
 "connection: close",
 "content-type: application/json; charset=utf-8"
],
"request_params": [
],
"http_status":  "204"
}

Hey @MultiplayerSession,

Thank you for following up with that information! Our engineering team was able to identify the behavior that causes this. Essentially, it has to do with a mix up between UTC and Meeting Time where the backend should be converting the values before comparing.

Thanks,
Max

1 Like

We’re still observing this behavior where the meeting time updates aren’t being applied, so it sounds like this is still in the pipeline, possibly for the next monthly release for the APIs.