Webhook recording.completed Not Received Despite Successful URL Validation - Cloud Run Endpoint

Hi everyone,

I’ve developed an account-level, Webhook-only app (not intended for public publishing) to process meeting artifacts when the recording.completed event fires. My endpoint is a Google Cloud Run service.

I’m encountering an issue where, despite my endpoint URL successfully validating with Zoom, I am not receiving the recording.completed webhook for test meetings.

Here’s what’s working:

  1. Endpoint URL Validation: My Cloud Run endpoint URL successfully validates within the Zoom App Marketplace event subscription settings. My server logs confirm receipt and correct processing of Zoom’s endpoint.url_validation POST request (including the challenge-response).
  2. Zoom App Status: The app is “Activated - Live on account.”
  3. Event Subscription: The event subscription is enabled, and “All recordings have completed” (recording.completed) is the selected and saved event type.
  4. Endpoint Configuration (Google Cloud Run):
  • Configured with Min Instances = 1 to ensure it’s always warm and responsive (ruling out cold start timeouts from Zoom’s ~3-second limit).
  • Set to “Allow unauthenticated invocations.”
  • The function correctly retrieves the Zoom Secret Token (used in the successful URL validation).
  1. Meeting Artifacts: For test meetings, cloud recordings, transcripts, and summaries are being generated successfully and are visible in my Zoom portal.

The Problem: After multiple test meetings where artifacts are generated, my Cloud Run endpoint receives no recording.completed events. This is confirmed by a lack of any corresponding incoming request logs in Cloud Run for this event type (though the URL validation requests are logged).

Key Evidence: The “Webhook Logs” section for my app in the Zoom App Marketplace consistently shows “No Data,” suggesting Zoom isn’t logging any attempt to dispatch the recording.completed event for these meetings.

Addressing Common Suggestions Proactively:

  • Localhost Testing (e.g., with ngrok): While a good general practice, my cloud-hosted endpoint successfully validates with Zoom’s endpoint.url_validation event (a server-to-server POST). This confirms basic connectivity, SSL, and the initial handshake logic with Zoom’s servers are working correctly with the live endpoint. The issue seems specific to the recording.completed event not being dispatched after this successful validation.
  • CORS Issues: My understanding is that CORS is a browser security mechanism and should not apply to server-to-server webhook deliveries from Zoom. The successful server-to-server endpoint.url_validation (which is also a POST from Zoom) further suggests CORS isn’t the blocker here. My Cloud Run service does not send specific CORS allow headers by default, as is typical for a webhook backend.
  • SSL Certificate: My endpoint is a standard Google Cloud Run service URL (e.g., https://[service-name]-[project-hash].[region].run.app), which is automatically provisioned by Google with a valid SSL certificate and served over HTTPS. The successful HTTPS validation from Zoom confirms this.
  • Endpoint Accessibility/Firewalls: The Cloud Run endpoint is publicly accessible and configured to allow unauthenticated invocations. Again, the successful endpoint.url_validation from Zoom’s servers directly proves its accessibility without firewall interference on my end.

Given that URL validation works, the endpoint is warm, and Zoom’s own webhook logs show “No Data” for dispatch attempts of recording.completed, I’m struggling to identify why this specific event isn’t being sent or received.

Has anyone encountered a similar situation, or are there other aspects specific to the recording.completed event dispatch I should be checking on the Zoom side? Could there be a delay or an account-specific issue preventing these events from firing even if the subscription appears active?

Thanks in advance for any insights!

hi @Larry
Thanks for reaching out to us and sorry to hear that you are having issues
I will send you a DM to get more details about this issue