Update a meeting API Endpoint (https://developers.zoom.us/docs/api/meetings/#tag/meetings/PATCH/meetings/{meetingId})
Description
After creating a meeting using the Create a Meeting API Endpoint (https://developers.zoom.us/docs/api/meetings/#tag/meetings/POST/users/{userId}/meetings) for one user, updating that meeting to change the host by setting the schedule_for parameter with the Update a meeting API Endpoint (https://developers.zoom.us/docs/api/meetings/#tag/meetings/PATCH/meetings/{meetingId}) returns error code 3000 with message “You cannot schedule a meeting for .”
All API requests are submitted with credentials provided by an Account-level app that is Server-To-Server OAuth.
Does the app need additional scopes to be able to update the host for a meeting it creates?
I have searched the knowledge base and forum, and have seen mention of “scheduling privilege”. But this appears to be relevant for one user scheduling a meeting for a different user. As this is an Account-level app that is Server-To-Server OAuth, would there be some method to provide this “scheduling privilege” to the app itself?
Error:
{
code: 3000,
message: 'You cannot schedule a meeting for weYlvJUTRtmzWbX7hwD4Kg.'
}
How To Reproduce
Steps to reproduce the behavior:
With the credentials provided by an “Account-level app” that is “Server-To-Server OAuth”, create a meeting for one user using the Create a Meeting API Endpoint (https://developers.zoom.us/docs/api/meetings/#tag/meetings/POST/users/{userId}/meetings).
With those same credentials, update the previously created meeting setting a different host user by providing a new zoom user id as the schedule_for parameter using the Update a meeting API Endpoint (https://developers.zoom.us/docs/api/meetings/#tag/meetings/PATCH/meetings/{meetingId}).
The update request will error returning error code 3000 with message “You cannot schedule a meeting for .”
{
topic: "Topic",
agenda: "Agenda",
start_time: "2025-03-12T17:00:00Z",
duration: "45",
timezone: "America/Los_Angeles",
schedule_for: "<zoom user id for the new host>"
}
Authentication method or app type
All API requests are submitted with credentials provided by an “Account-level app” that is “Server-To-Server OAuth”.
Any errors
Returns error code 3000 with message “You cannot schedule a meeting for .”
Note: Both the user for the created meeting and the user for the meeting update are apparently configured the same way. But if there’s something I should check in user config, let me know.
I can’t say for certain but it may be that the user account that you’ve used for the application may need the scheduling permission, in order for the app to have said permission.
As the app is Account-level there is no specific user that is credentialed for the request. I could swap the users between the create and update steps and see the same result.
There is a user specified when creating the meeting. Does this mean that I would need to setup scheduling privilege pairs between each user of an organization in order to be able to programmatically reassign meetings between them?
Another solution might be to delete the previous meeting and recreate it for the new host user, but that would involve changing the zoom meeting link.
Neither works well for our needs. Is there a better way to do this?
Sorry to hear that. I believe that your user account that you’re using to create the app, needs to have access to that permission, in order for you to add it to your app. Please see:
That thread reply is about a user that does not have admin permissions to be able to add scopes to an app.
I have access to an admin user on the zoom account with the app. So I am able to add scopes. But the scope meeting:update:meeting you mentioned is not in the long list of scopes that are able to be added to an app. I think it may have been deprecated/removed in favor of more granular scopes such as meeting:update:meeting:admin. (Edit: Or if not deprecated, not intended for this type of app.)
I’ve attempted to approach the problem from another angle.
A 3rd user, independent of the 2 users above, is assigned as assistant to both users. I created the meeting using the api while using the 3rd’s user ID in the request URL https://api.zoom.us/v2/users/{userId}/meetings and one of the two users as the schedule_for parameter.
This created the meeting and it shows up in the schedule_for user schedule as expected.
Next I attempted to update that same appointment with the other user of the two with a new schedule_for parameter. Unfortunately, this gave the following error:
{
"code": 3003,
"message": "Not meeting host."
}
It seems likely that because I am using credentials for an Account-level app that is Server-To-Server OAuth, there is no user associated with the request. So even though the meeting is creating “under” the 3rd user which is an assistant to both the previous and the new schedule_for users, this update cannot be done.
Is there any way for a Server-To-Server OAuth authenticated request to be able to change the user a meeting is scheduled for?
Think I’ve found a solution. It did involve creating a separate user that is the assistant of all other users in the Zoom account.
To describe the issue I had, let me declare 3 users. User A, B, and C.
User A was the owner of the Server-To-Server OAuth Account-level app. User C was the assistant to users A and B. When a meeting was created for either A or B, but “owned” by user C (passing C’s user id in the url of the create request) and then an update attempted to switch to the other user, it would fail with a “Not meeting host.” error.
Fixing this involved transferring ownership of the app to User C. Attempting the above create and update now is accomplished successfully.
We also created a “Super Admin” role with a few additional permissions for User C (such as ability to modify roles and Zoom for developers->Server-to-server OAuth app edit), but I don’t think that was relevant to this solution.