Title: Attendee transcript access via API when has_transcript_permission=true — and /meetings/search documentation status
API Endpoint(s)
- GET /meetings/{meetingId}/assets (unverified — cannot find this in official docs, see question below)
- GET /meetings/{meetingId}/recordings
- GET /meetings/{meetingId}/transcript
- GET /users/{userId}/meetings
- GET /meetings/search (unverified — cannot find this in official docs, see question below)
We’re building a tool that lets users retrieve their own Zoom meeting transcripts programmatically — both for meetings they hosted and meetings they only attended.
When a user attended a meeting where AI Companion was enabled or where the host shared a cloud recording with them, the Zoom web portal shows them the transcript and the has_transcript_permission field in the meetings list response is true. We want to retrieve that transcript via the API using the attendee’s own OAuth token (user-managed app, user-level scopes).
We have two related questions:
- Attendee transcript access
Is there a documented endpoint that allows a non-host attendee to retrieve the transcript content for a meeting when has_transcript_permission=true? The web portal clearly has this capability — we’re looking for the equivalent API surface.
GET /meetings/{meetingId}/assets - we tried this - but it’s not working for all the users - works for some - not reliable and we don’t have any documentation around it . But zoom’s remote mcp uses this api .
- /meetings/search documentation status
We are using GET /meetings/search in our integration after finding it referenced in community examples. We cannot locate it in the official API reference. Is this endpoint officially supported? If not, what is the recommended documented alternative for searching a user’s past meetings by keyword or date range? (GET /users/{userId}/meetings supports type filters but not keyword search or arbitrary date ranges for past meetings.)
Error
When calling GET /meetings/{meetingId}/transcript as a non-host attendee (even when has_transcript_permission=true):
HTTP 400
{
“code”: 3001,
“message”: “No permission.”
}
When calling GET /meetings/{meetingId}/recordings as a non-host attendee:
HTTP 403
{
“code”: 200,
“message”: “No permission.”
}
How To Reproduce
- Request
GET v2/meetings/{meetingId}/transcript
Authorization: Bearer <user_oauth_token> - Meeting ID is from a meeting the caller attended (not hosted), with AI Companion enabled and has_transcript_permission=true confirmed in the list meetings response.
- Authentication
- App type: User-managed OAuth app
- Grant type: Authorization Code + PKCE
- Scopes: meeting:read:meeting:user, cloud_recording:read:list_recordings:user, zoomapp:inmeeting
- Error
HTTP 400 — “No permission.” despite has_transcript_permission: true being returned for this meeting in the list meetings response, and the transcript being visible to the same user in the Zoom web portal.