Thanks @elisa.zoom you gave us the clue needed to solve the issue.
We had already been testing with the scheduled UUID but that was not working as mentioned.
After some testing though, we’ve confirmed that the issue stems from Zoom returning two different UUIDs for scheduled and past meetings:
-
Scheduled meeting UUID
-
Returned by
GET /v2/meetings/{meetingId}. -
Stable for the scheduled/series definition of the meeting.
-
Does not resolve transcripts.
-
-
Instance (past meeting) UUID
-
Generated once a specific occurrence actually runs and ends.
-
Appears in the Zoom web UI links (
?meetingId=) and inpast_meetingsAPI responses. -
This is the UUID that successfully fetches transcripts.
-
Conclusions:
-
/transcriptsrequires the instance UUID, not the scheduled UUID. -
Passing the scheduled UUID will return an error even though a transcript exists.
-
Instance UUIDs can be obtained via
GET /past_meetings/{meetingId}/instancesor webhooks likemeeting.ended. -
If the UUID contains
/or starts with/, it must be double URL-encoded.
So, we can now retrieve the AI companion transcripts using the past-meeting instance UUID. Hopefully this is helpful to others as well!