The recording.completed webhook only fires after the meeting recording related files (m4a and mp4) have completed processing. Only once these are available is zoom able to process transcripts, which it later fires off the recording.transcript_completed webhook.
It’s important to enable this webhook from the Zoom UI when managing your webhook app.
Also, recording.transcript_completed can come back multiple times. For example:
If the recording was stopped, and started again, within a single session, you will get two mp4 recording files from the recording.completed event, but the recording.transcript_completed event will fire multiple times, the first time only containing the transcript file for the first recording file, and then again later on for transcripts pertaining to both recording files.
This was really confusing when I was integrating as I expected the same kind of webhook firing for transcripts as I was getting for recordings. Obviously, not the case.