No working auth method for account-level REST API access on General app (Admin-managed) — recordings/transcript endpoints
Description:
I have a General app (Admin-managed) and I’m trying to get account-level
access — no per-user OAuth consent screen — to the Cloud Recording API, to
build a server-side integration that automatically processes recordings.
I’ve tried all three auth approaches I’m aware of and each fails a
different way. I’d like to know what the currently correct method is for
this use case now that the standalone Server-to-Server OAuth app type has
been deprecated in favor of General apps.
API Endpoint(s) and/or Zoom API Event(s):
POST https://zoom.us/oauth/token (tried grant_type=account_credentials, client_credentials, and authorization_code)
GET https://api.zoom.us/v2/users/{userId}/recordings
(Note: the recording.transcript_completed webhook itself works fine — this
is purely about getting a working access token to call the REST API.)
Error?:
-
grant_type=account_credentials returns:
{“reason”:“The application doesn’t support account_credential”,“error”:“unsupported_grant_type”} -
grant_type=client_credentials succeeds and returns an access token, but
using that token against the recordings endpoint returns:
{“code”:124,“message”:“This API does not support client credentials for authorization.”} -
Standard OAuth authorization_code flow: I added and saved an OAuth
Redirect URL (https://localhost/callback) on the Basic Information page
(confirmed it persists after a page refresh). Visiting the authorize URL
with that exact same redirect_uri returns:
“Invalid redirect: https://localhost/callback (4,700)”
Additionally, “Add app now” under the Local Test menu stays greyed out with
no tooltip and no visible checklist showing what’s missing, even after
completing Basic Information, Scopes (cloud_recording:read:recording:admin),
and the Access/Event Subscription setup.
How To Reproduce:
-
Request URL / Headers / Body:
- POST https://zoom.us/oauth/token?grant_type=account_credentials&account_id={account_id}
Headers: Authorization: Basic {base64 client_id:client_secret} - POST https://zoom.us/oauth/token?grant_type=client_credentials
Headers: Authorization: Basic {base64 client_id:client_secret} - Then: GET https://api.zoom.us/v2/users/{userId}/recordings
Headers: Authorization: Bearer {token from step above}
- POST https://zoom.us/oauth/token?grant_type=account_credentials&account_id={account_id}
-
Authentication method / app type:
General app, Admin-managed. Scopes added: cloud_recording:read:recording:admin -
Errors: see the three responses listed above under “Error?”