Changing a recurrence end_date_time

I’m using JWT API to create recurring meetings. Occasionally, we need to change the timing of all upcoming meetings in the recurrence.

I think the easiest way to handle such a change is to split the recurrence… i.e create a new recurring meeting starting on today with the new schedule, and change the old meeting to end on today. How do I alter a recurring meeting to preserve the meetings that already happened but stop future recurrences?

I tried the following:
PATCH /meetings/:id { recurrence: { end_date_time: <today> } }

This returns an error 401. In the UI dialog it’s not possible to change the end_date_time – is this just not allowed?

1 Like

Not sure as to the original 401 issue - but as a workaround to the PATCH call, you could use the “Get a Meeting” endpoint to retrieve all future occurrences (from the result’s occurrences array) and then use the Occurrence IDs in that array with the “Delete a Meeting” endpoint to delete a specific occurrence of that meeting, ie: DELETE /meetings/{meetingID}?occurrence_id=9387493794.

Though, via the Zoom UI I am able to change the end date (as well as manually create and delete additional instances of the same meeting).

1 Like

Also - what timestamp format are you using for end_date_time? That may affect what you’re experiencing. It should always be a full UTC timestamp:

YYYY-MM-DDTHH:MM:SSZ

Thanks for your help. Since you told me it works I kept trying, and figured out that you can’t patch a single field in recurrence. I got it to work by passing:

{
    "recurrence": {
    	"type": 2,
    	"weekly_days": "1,2,4",
        "end_date_time": "2020-05-13T13:38:39Z"
    }
}

This may not be the best solution if you are ever cutting the recurrences short as of some day in the future (ie not “today”), as this may affect any other occurrence between now and then. I think ultimately, deleting only future occurrences (with the DELETE call) may be the smoothest operation.

Kind of odd though there’s no API endpoint to create individual instances in a reccurrence like you can do through the Zoom interface. I’ll submit a request for that.

Sorry, can you explain that again? So what I’m trying to do is stop any future recurrences of the meeting, and leave any past ones unchanged. Is my patch call going to reset past meetings? I don’t understand what you’re saying exactly.

One issue with DELETE approach is I’d need one call per occurrence and it’s heavily rate limited.

The DELETE endpoint is listed as a “Light” rate-limiting.

but, for example, imagine if you had a meeting like this:

{
    "uuid": "UUID",
    "id": "meetingID",
    "host_id": "hostID",
    "topic": "My Meeting",
    "type": 8,
    "status": "waiting",
    "timezone": "America/New_York",
    "agenda": "",
    "created_at": "2020-05-11T14:39:25Z",
    "recurrence": {
        "type": 2,
        "repeat_interval": 1,
        "weekly_days": "3,5",
        "end_date_time": "2020-06-24T03:59:00Z"
    },
    "occurrences": [
        {
            "occurrence_id": "1589290980000",
            "start_time": "2020-05-12T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1589463780000",
            "start_time": "2020-05-14T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1589895780000",
            "start_time": "2020-05-19T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1590068580000",
            "start_time": "2020-05-21T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1590500580000",
            "start_time": "2020-05-26T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1590673380000",
            "start_time": "2020-05-28T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1591105380000",
            "start_time": "2020-06-02T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1591278180000",
            "start_time": "2020-06-04T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1591710180000",
            "start_time": "2020-06-09T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1591882980000",
            "start_time": "2020-06-11T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1592314980000",
            "start_time": "2020-06-16T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1592487780000",
            "start_time": "2020-06-18T13:43:00Z",
            "duration": 60,
            "status": "available"
        },
        {
            "occurrence_id": "1592919780000",
            "start_time": "2020-06-23T13:43:00Z",
            "duration": 60,
            "status": "available"
        }
    ]
}

I decide I want the last meeting to be June 2 instead of June 23, because meetings are boring.

I do this:
PATCH https://api.zoom.us/v2/meetings/meetingID

{
    "recurrence": {
        "type": 2,
        "repeat_interval": 1,
        "weekly_days": "3,5",
        "end_date_time": "2020-06-02T03:59:00Z"
    }
}

This has in fact… destroyed all my meeting occurrences and has broken my meeting entirely. If there were past meetings, they shouldn’t be affected though, as they are stored separately.

{
    "uuid": "UUID",
    "id": meetingID,
    "host_id": "hostID",
    "topic": "My Meeting",
    "type": 8,
    "status": "waiting",
    "timezone": "America/New_York",
    "agenda": "",
    "created_at": "2020-05-11T14:39:25Z",
    "occurrences": [],
    "recurrence": {
        "type": 2,
        "repeat_interval": 1,
        "weekly_days": "3,5",
        "end_date_time": "2020-06-02T03:59:00Z"
    }
}

my mistake, thanks. So this direction is very doable.

:smiley:

But your call looks correct to me! Why did it break your meeting? When I tried PATCH on a test meeting, it seemed to work as expected. Sorry to keep badgering, I’m missing something here.

I tried calling DELETE on the series, but it also deletes past meetings :-\

You’d want to call it on a specific occurrence_id, not the whole meeting ID: DELETE https://api.zoom.us/v2/meetings/yourMeetingId?occurrence_id=occurrenceId

Where occurrenceId is the occurrence_id value from an object in the occurrences array from a GET https://api.zoom.us/v2/meetings/yourMeetingId call.

Yeah, the whole thing isn’t very intuitive. :man_shrugging: Maybe a Zoom employee has some insight as to how to deal with some of this.

1 Like

Hey @isaacly, @samly,

Have you tried updating the master meeting recurrence properties via the Update Meeting endpoint?

Thanks,
Tommy

Yes, using that endpoint causes the behavior described in a comment above:

Hey @samly,

Gotcha, when you say destroyed, what exactly happened to the future occurrences when changing the end_date_time?

Thanks,
Tommy

The example in that linked comments shows it. The occurrences array in the response and for GET requests is empty. The Zoom UI also shows all the occurrences no longer exist.

1 Like

I can confirm the behaviour: Calling PATCH /meetings/{meetingId} with recurrence object with end_date_time sometimes removes all occurrences of the meeting. The meeting does not appear anywhere on the Zoom website, even under Previous Meetings. GET /meetings/{meetingId} still returns the meeting (with empty occurrences array, even using new option show_previous_occurrences). It can still be updated through the webservice with new recurrence object to bring it back visible.

One such destroyed meeting is 923-4772-8456.

Getting invalid occurrence in API responses.