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_meetings
API responses. -
This is the UUID that successfully fetches transcripts.
-
Conclusions:
-
/transcripts
requires 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}/instances
or 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!