PATCH Meeting Meeting not updating meeting to approval_type=0 Not working

Use case: I’m creating a meeting via API using Zapier. Initial Create meeting step does not allow for setting approval_type: 0 thereby making Registration required and allowing for additional registration questions, etc. Using a Zapier API Request (Beta) step to do the update.

Endpoint: v2/users/me/meetings/{meetingId}

and have tried it both with and without the query string param of meetingId.

None of my PATCH steps have successfully added approval_type = 0 and all of the registration questions. I’ve reviewed a few dozen other similar posts and I’m not sure what I’m not getting right here.

After I get meeting updated to approval_type = 0, I’d also like to get the registration_url. I assume it’ll come back in the response, but the documentation isn’t

Here’s my JSON body:

method: PATCH
querystring:
meetingId: 89473939856
body: {
“settings”: {
“host_video”: true,
“participant_video”: true,
“cn_meeting”: false,
“in_meeting”: false,
“join_before_host”: false,
“mute_upon_entry”: true,
“watermark”: false,
“approval_type”: 0,
“audio”: “both”,
“use_pmi”: false,
“auto_recording”: “local”,
“alternative_hosts”: “none”,
“close_registration”: true,
“waiting_room”: true,
“registrants_email_notification”: true,
“registration_type”:2,
}
{
“custom_questions”: [
{“answers”: [“Alameda County”, “Contra Costa County”, “San Francisco County”, “Other”],“required”: true,“title”: “What county do you work in?”,“type”: “single”}
{“answers”: [“Center Staff”, “Family Childcare Provider”, “Other”],“required”: true,“title”: “Are you Center Staff/Family Childcare Provider/other? (Please select the option that describes your work best)”,“type”: “single”}
{“required”: true,“title”: “List the Center or FCC you work at (If you do not work at a center of FCC, simply reply N/A)”,“type”: “short”}
{“answers”: [“Yes”, “No”],“required”: true,“title”: “Do you participate in QRIS?”,“type”: “single”}
{“required”: true,“title”: “CA Workforce Registry Number”,“type”: “short”}
],
“questions”: [
{“field_name”: “last_name”,“required”: true}
{“field_name”: “zip”,“required”: true}
]
}
headers:
:
url: Due to forum limitations removed initial portion of url:

  • users/me/meetings/89473939856

And response:

request:
method: PATCH
url: Due to forum limitations removed initial portion of url - users/me/meetings/89473939856
querystring:
meetingId: 89473939856
headers:
body: {
“settings”: {
“host_video”: true,
“participant_video”: true,
“cn_meeting”: false,
“in_meeting”: false,
“join_before_host”: false,
“mute_upon_entry”: true,
“watermark”: false,
“approval_type”: 0,
“audio”: “both”,
“use_pmi”: false,
“auto_recording”: “local”,
“alternative_hosts”: “none”,
“close_registration”: true,
“waiting_room”: true,
“registrants_email_notification”: true,
“registration_type”:2,
}
{
“custom_questions”: [
{“answers”: [“Alameda County”, “Contra Costa County”, “San Francisco County”, “Other”],“required”: true,“title”: “What county do you work in?”,“type”: “single”}
{“answers”: [“Center Staff”, “Family Childcare Provider”, “Other”],“required”: true,“title”: “Are you Center Staff/Family Childcare Provider/other? (Please select the option that describes your work best)”,“type”: “single”}
{“required”: true,“title”: “List the Center or FCC you work at (If you do not work at a center of FCC, simply reply N/A)”,“type”: “short”}
{“answers”: [“Yes”, “No”],“required”: true,“title”: “Do you participate in QRIS?”,“type”: “single”}
{“required”: true,“title”: “CA Workforce Registry Number”,“type”: “short”}
],
“questions”: [
{“field_name”: “last_name”,“required”: true}
{“field_name”: “zip”,“required”: true}
]
}
response:
status: 400
headers:
alt-svc: h3=“:443”; ma=86400
cache-control: no-cache, no-store, must-revalidate, no-transform
cf-cache-status: DYNAMIC
cf-ray: 80e8a2480e4a59d3-IAD
connection: close
content-length: 104
content-type: application/json;charset=UTF-8
date: Sat, 30 Sep 2023 01:18:47 GMT
expires: Thu, 01 Jan 1970 00:00:00 GMT
nel: {“success_fraction”:0.01,“report_to”:“cf-nel”,“max_age”:604800}
pragma: no-cache
report-to: {“endpoints”:[{“url”:“https://a.nel.cloudflare.com/report/v3?s=JKH49%2B82jLOTOiD9kxCDfWCQRpvKXavQYyoJzRrnhJDG2KTRR9aRH005prCrgF5yLixZhHAYo984%2FWnNPmMCiOxdep40yDwxztV1Mw5lsa1Zq2KSKmZnZqrZb2w7”}],“group”:“cf-nel”,“max_age”:604800}
server: cloudflare

x-content-type-options: nosniff
x-zm-trackingid: v=2.0;clid=us02;rid=WEB_17cea2c74ed620be69caebccefffd51c
x-zm-zoneid: VA2
data:
code: 4700
message: Invalid access token, does not contain scopes: [user:write:admin, user:write].
body: {“code”:4700,“message”:“Invalid access token, does not contain scopes: [user:write:admin, user:write].”}

Hi @roger.miller
Thanks for reaching out to us and sorry for the late reply here!
Have you been able to troubleshoot this issue on your end or are you still having issues updating your meeting ?

I’m still having the same issue. I haven’t worked on since submitting the ticket. Any help that you can provide would be appreciated!

Hi @Roger,
I did some testing on my end and I am able to update a meeting that I initially created with approval_type 2 and patch it to approval type 0

It looks like your error might be coming from the token you are using to make the request, since you are getting the following error:
{“code”:4700,“message”:“Invalid access token, does not contain scopes: [user:write:admin, user:write].”}

Can you please confirm that the App that you are using to generate the token has those scopes? also what App type are you using for this?

Thanks for the response. I’m using Zapier and their HTTP API Request (Beta) in Zoom connector. I originally tried to use JWT on the advice of another Zoom help desk team member about a month ago, but then switched to OAUTH when I realized that the JWT was being deprecated. I tried to set it up, but I’m not entirely clear about what I’m doing here. This is an entirely internal application that is just going to connect one Salesforce org with one Zoom account, so maybe I should be using the Server to Server OAUTH. Either way, I’m not certain how to set up the scopes in the JSON payload that Zapier sends in the PATCH. I was originally trying to add the JWT scopes in the Additional Request Headers section, but maybe it just needs to go in the JSON body? Any advice that you can provide here would be much appreciated.

Here’s the url that I’m using for this PATCH:

https://api.zoom.us/v2/users/me/meetings/85873103451

with meetingid = 85873103451

The authentication headers are automatically included, however, I’m not sure how to set up the correct OAUTH or OAUTH Server to Server config.

JSON body:

{ "settings": { "host_video": true, "participant_video": true, "cn_meeting": false, "in_meeting": false, "join_before_host": false, "mute_upon_entry": true, "watermark": false, "approval_type": 0, "audio": "both", "use_pmi": false, "auto_recording": "local", "alternative_hosts": "none", "close_registration": true, "waiting_room": true, "registrants_email_notification": true, "registration_type":2} }

Thanks for sharing more details with me @roger.miller
Could you please share a link to the documentation you are using to set this up? As we are not the developers for the Zapier integration, I am having trouble understanding what you need to do or how to provide you with support.

And yes, it is a good idea to set up a Server to Server Oauth app, since we have deprecated the JWT app

Elisa,

When I set up the Server to Server app, do I need to set up Event Subscriptions? We’re using Zapier’s existing webhooks, so I think that we don’t need to. Any clarification you can provide here would be helpful.

Thanks,

Hi @roger.miller
I am not familiar with the Zapier integration.
If you have a link to the Docs you are using for this, please feel free to share it with me so I can take a closer look

Thanks for your response. At this point I’m not sure if the issue is that I haven’t set some aspect of the scopes up correctly in the Server-to-Server app or I’m not using the token once retrieved correctly in the update step. The error that I’m getting is:

{“code”:4700,“message”:“Invalid access token, does not contain scopes: [user:write:admin, user:write].”}

I set up the Server-to-Server OAuth App in Zoom. Here’s the url for that app in the Marketplace: App Marketplace

I set up the I finally go the Zapier POST Webhook to retrieve the access token. I’m using this documentation to POST for the token. The client id and client secret are jointly base64 encoded with a colon between them.

image.png

Here’s the response:
access_token: eyJzdiI6IjAwMDAwMSIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjdiMWIwMjc3LTRiNTgtNDk0ZC04OWI0LTI2NTU2NjNlZDI2MiJ9.eyJhdWQiOiJodHRwczovL29hdXRoLnpvb20udXMiLCJ1aWQiOiI0V29qS2dSMlJ0T3kyakQxaU9NbzdnIiwidmVyIjo5LCJhdWlkIjoiNjQwNTRjODkzN2VhODc3Y2ZkMTc1N2M3NmQzMjQxOTUiLCJuYmYiOjE2OTc2NjY5MzIsImNvZGUiOiJsN09BYTFVSVRWT2M2X1ROS2pXTHRBVjdzZjY2ZktYWW0iLCJpc3MiOiJ6bTpjaWQ6R1VhVVp5eURTTWltTFlVb24ybXRUQSIsImdubyI6MCwiZXhwIjoxNjk3NjcwNTMyLCJ0eXBlIjozLCJpYXQiOjE2OTc2NjY5MzIsImFpZCI6IjRUaWM0SDNKU0pXcHhVcnJOVlg0bkEifQ.NFwfHlIktsc20blk1-CkuwFY6STOgtFe9Hbj7nwsqztSQBEnY43gV9y3baOB-gXrEe9-ntCNjipsK-ZP0yY-lw
token_type: bearer
expires_in: 3599
scope: user:write:admin webinar:master user:read:admin recording:write:admin contact:read:admin webinar:read:admin account:master recording:master account:read:admin account:write:admin user:master meeting:master webinar:write:admin meeting:read:admin recording:read:admin meeting:write:admin

I then tried to use the token in the Zapier HTTP PATCH Request to Zoom:

Request:
URL: https://api.zoom.us/v2/users/me/meetings/81060420099

Request Header: access_token: eyJzdiI6IjAwMDAwMSIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjdiMWIwMjc3LTRiNTgtNDk0ZC04OWI0LTI2NTU2NjNlZDI2MiJ9.eyJhdWQiOiJodHRwczovL29hdXRoLnpvb20udXMiLCJ1aWQiOiI0V29qS2dSMlJ0T3kyakQxaU9NbzdnIiwidmVyIjo5LCJhdWlkIjoiNjQwNTRjODkzN2VhODc3Y2ZkMTc1N2M3NmQzMjQxOTUiLCJuYmYiOjE2OTc2NjY5MzIsImNvZGUiOiJsN09BYTFVSVRWT2M2X1ROS2pXTHRBVjdzZjY2ZktYWW0iLCJpc3MiOiJ6bTpjaWQ6R1VhVVp5eURTTWltTFlVb24ybXRUQSIsImdubyI6MCwiZXhwIjoxNjk3NjcwNTMyLCJ0eXBlIjozLCJpYXQiOjE2OTc2NjY5MzIsImFpZCI6IjRUaWM0SDNKU0pXcHhVcnJOVlg0bkEifQ.NFwfHlIktsc20blk1-CkuwFY6STOgtFe9Hbj7nwsqztSQBEnY43gV9y3baOB-gXrEe9-ntCNjipsK-ZP0yY-lw

Body:
{
“settings”: {
“host_video”: true,
“participant_video”: true,
“cn_meeting”: false,
“in_meeting”: false,
“join_before_host”: false,
“mute_upon_entry”: true,
“watermark”: false,
“approval_type”: 0,
“audio”: “both”,
“use_pmi”: false,
“auto_recording”: “local”,
“alternative_hosts”: “none”,
“close_registration”: true,
“waiting_room”: true,
“registrants_email_notification”: true,
“registration_type”:2}
}

The Zoom response was:

status 400
headers
alt-svc
h3=“:443”; ma=86400
cache-control
no-cache, no-store, must-revalidate, no-transform
cf-cache-status
DYNAMIC
cf-ray
81842c800a240951-IAD
connection
close
content-length 104
content-type
application/json;charset=UTF-8
date
Wed, 18 Oct 2023 22:21:21 GMT
expires
Thu, 01 Jan 1970 00:00:00 GMT
nel
{“success_fraction”:0.01,“report_to”:“cf-nel”,“max_age”:604800}
pragma
no-cache
report-to
{“endpoints”:[{“url”:“https://a.nel.cloudflare.com/report/v3?s=Oa6d39kMZfQQNlGuZd%2BvYvZD%2FaWeQjFc%2BDi%2FfUI%2FQe%2Bfd7nZRd%2BNg1aoEqnulIaEy1OLg%2FUP80R0NP4kTrGH8LWb5n2tpGkvqlU5INxP%2Bva%2FYvwWwJzl8VQVt73%2F”}],“group”:“cf-nel”,“max_age”:604800}
server
cloudflare
set-cookie
zm_aid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, zm_haid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, zm_tmaid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, zm_htmaid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, cred=6B9372283E4963DCFD9055F9D03302AD; Path=/; Secure; HttpOnly, _zm_ctaid=4y-DQXtdRaGXlBmpPERYyA.1697667681369.3692a41d8b4c3c0cf9adc305aa503636; Max-Age=7200; Expires=Thu, 19 Oct 2023 00:21:21 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, _zm_chtaid=168; Max-Age=7200; Expires=Thu, 19 Oct 2023 00:21:21 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, _zm_mtk_guid=341fe4eaada1441d826e46c9d1542458; Max-Age=63072000; Expires=Fri, 17 Oct 2025 22:21:21 GMT; Domain=zoom.us; Path=/; Secure, __cf_bm=hWiLtAVmU.jlyapRgcXg2eO37bQJHq9fF4ISwio3WiM-1697667681-0-AZTKGOVugLCKkLnZuyvoGuD4faPP2w2Vfxpjm9oA7yRB0ACnSK1g5GfwbU+xkrOZTe7QDAJqtYgDguWeoK6UjmI=; path=/; expires=Wed, 18-Oct-23 22:51:21 GMT; domain=.zoom.us; HttpOnly; Secure; SameSite=None
x-content-type-options
nosniff
x-zm-trackingid
v=2.0;clid=us02;rid=WEB_8876a8b6cf903eaa5da383ae71b1537f
x-zm-zoneid
VA2
body
{“code”:4700,“message”:“Invalid access token, does not contain scopes: [user:write:admin, user:write].”}
data
code
4700
message
Invalid access token, does not contain scopes: [user:write:admin, user:write].

@elisa.zoom Just a gentle nudge on this one. See additional detail on the issue above.

Hey @roger.miller
I was out of office, that’s why I missed your response. But I am currently looking into this

Hi @roger.miller
Can you please try changing the endpoint where you are sending the PATCH request?

It should look like this
https://api.zoom.us/v2/meetings/81060420099

@elisa.zoom I’d previously tried the endpoint url you suggested:
:mag:_full_response_data_​:mag_right:
https://zapier.com/engine/hydrate/16249169/.eJw1zU0OgyAQhuG7zBpbEfBv13M0jSE4NERFI0NaY7x7qWm370yebwcze0JPHW0LQgs3YOB8IO0Ndq6HVhac57yUDEwMNE8x4HoeeFnIhpcNA23MHBPxr7XKawbW4dh3Xk9f1roRQ6KHl16fAdr9LN0yu7S-pnDfYcAtfQZx5dZYZW2dKVH1mWxklelS8ExVfS1FnuZyk6wfvWKII13oTXA8juMDa_JCAA:1qz0jX:ejGXuFv_TFvotaaY9quXMyBLDu4/
request
method
PATCH
url
https://api.zoom.us/v2/meetings/81060420099
querystring
headers
body
{
“custom_questions”: [
{“answers”: [“Alameda County”, “Contra Costa County”, “San Francisco County”, “Other”],“required”: true,“title”: “What county do you work in?”,“type”: “single”}
{“answers”: [“Center Staff”, “Family Childcare Provider”, “Other”],“required”: true,“title”: “Are you Center Staff/Family Childcare Provider/other? (Please select the option that describes your work best)”,“type”: “single”}
{“required”: true,“title”: “List the Center or FCC you work at (If you do not work at a center of FCC, simply reply N/A)”,“type”: “short”}
{“answers”: [“Yes”, “No”],“required”: true,“title”: “Do you participate in QRIS?”,“type”: “single”}
{“required”: true,“title”: “CA Workforce Registry Number”,“type”: “short”}
],
“questions”: [
{“field_name”: “last_name”,“required”: true}
{“field_name”: “zip”,“required”: true}
]
}

And the response has consistently been a 415 error message:
data
response
status
415
headers
alt-svc
h3=“:443”; ma=86400
cache-control
no-cache, no-store, must-revalidate, no-transform
cf-cache-status
DYNAMIC
cf-ray
820758ed1a5a57af-IAD
connection
close
content-length
129
content-type
application/xml;charset=UTF-8
date
Fri, 03 Nov 2023 20:25:35 GMT
expires
Thu, 01 Jan 1970 00:00:00 GMT
nel
{“success_fraction”:0.01,“report_to”:“cf-nel”,“max_age”:604800}
pragma
no-cache
report-to
{“endpoints”:[{“url”:“https://a.nel.cloudflare.com/report/v3?s=LrTkvJWpmHdCf5Kndtg%2FmqjCh6JZfP%2BERopil57NbRcZv3E86IfjxwctqDoRuX4Tu1SuzwRbHX%2Bf6NWWUrEP627gFs0SBb1pu3nOLXTdTDJNoN2rNEFkbgxO02TW”}],“group”:“cf-nel”,“max_age”:604800}
server
cloudflare
set-cookie
zm_aid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, zm_haid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, zm_tmaid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, zm_htmaid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, cred=4DF125698E5F0CD541CD82046CB0B7BD; Path=/; Secure; HttpOnly, _zm_ctaid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, _zm_chtaid=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Domain=zoom.us; Path=/; Secure; HttpOnly, _zm_cms_guid=BkJFk4gK0YgpLFgEuAkLkTh97wHJyAQPjzzLfkwg3iqtPuyAu0MAjorJGG6nrUXCoHw7gB0JJtvqu4IiOeBU1LKVtZh7w88.nAIoFl_fJXdMaCsV; Max-Age=7200; Expires=Fri, 03 Nov 2023 22:25:35 GMT; Domain=zoom.us; Path=/; Secure, _zm_mtk_guid=6449e59418054cdca9d8890e56656f08; Max-Age=63072000; Expires=Sun, 02 Nov 2025 20:25:35 GMT; Domain=zoom.us; Path=/; Secure, __cf_bm=bLVsN8MNYMFoW_NEE.OqwHH6aUySjDs57_OSc32SHPg-1699043135-0-AT9RichHzkEbLJtjMf5OYk5JkthZL9r3pYoqHbPT/Y9AgBstzcgX8OyS6AzXjXXhSb+l6panC7QeIHDzYRxPFos=; path=/; expires=Fri, 03-Nov-23 20:55:35 GMT; domain=.zoom.us; HttpOnly; Secure; SameSite=None
vary
Origin, Access-Control-Request-Method, Access-Control-Request-Headers
x-content-type-options
nosniff
x-ratelimit-limit
999999999
x-ratelimit-remaining
999999990
x-zm-trackingid
v=2.0;clid=us02;rid=WEB_7dd01bef8acd7a0bd1275bc236245f40
x-zm-zoneid
VA2
body

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>300Unsupported Content Type

data

Any other suggestions or thoughts?

Hi @roger.miller
I will send you a private message and please follow up there, I need more information to continue looking into this

To update this public thread, we were able to figure it out. @roger.miller
For all Patch and Post requests, the content-type application/json needs to be passed in the request headers.
Also make sure that json object is properly formatted