docs:read:file scope selected and saved on OAuth app, but missing from issued access tokens

I’ve got a “General App (OAuth)” app (Client ID fAuJ8O1TToqQ_BcsS6B5kQ) where I added the docs:read:file granular scope (Canvas / Zoom Docs product) to use GET /docs/files/search. The scope shows as selected and saved in the app’s Scopes tab, and I’ve completed a full OAuth reconnect (consent screen shown and approved) three separate times.

Every time, calling GET /docs/files/search?query= with the resulting access token returns:

The token just doesn’t include the scope, despite it being configured correctly and re-consented each time. To rule out a reconnect-flow issue on my end: two other newly-added scopes on this same app (my_notes:read:notes_transcript, meeting:read:list_meetings) attached correctly after reconnecting, so it’s specifically docs:read:file that isn’t taking.

This looks similar to what’s described here: Cloud Recording (user:read:list_recordings) isn’t appearing during Granular Scopes setup — is this a known class of bug with certain granular scopes, or is there a step I’m missing?

This looks like an endpoint and scope mismatch rather than a reconnect bug. Zoom’s current POST /v2/docs/file_search operation requires canvas:write:file_search. The docs:read:file scope is mapped to GET /v2/docs/files/{fileId} for retrieving file metadata, not to searching files. GET /v2/docs/files/search is not listed in the current Canvas API reference.

Add canvas:write:file_search to the General OAuth app, save the change, then complete a fresh authorization. Check 1: confirm the new token’s scope value contains canvas:write:file_search. Check 2: call POST /v2/docs/file_search with query in the JSON request body, since query is not a URL parameter for this operation.

For production Zoom meeting capture and downstream transcript workflows, Recall.ai’s Meeting Bot API can handle the meeting ingestion layer.