Zoom Event Subscription Webhook – URL Validation Failed Despite HTTP 200 Response


Description
We are currently developing a sample Zoom appointment integration with our application and are facing an issue while configuring the Event Subscription webhook.

Before Zoom enables the Event Subscription, Zoom sends an endpoint.url_validation request to our webhook endpoint containing a plainToken. Our application uses the plainToken and the configured Zoom Webhook Secret Token to generate the required encryptedToken using HMAC-SHA256 and returns the validation response to Zoom.

We have verified our implementation and confirmed the following:

  • The Zoom validation request is reaching our server.
  • Our application receives the plainToken successfully.
  • The required encryptedToken is generated using HMAC-SHA256.
  • Our application returns an HTTP 200 response.
  • We tested the endpoint using Postman and cURL, and the endpoint is accessible.
  • We reviewed the application and server logs and confirmed that the validation request is being processed successfully.

However, the Zoom Marketplace continues to display:

URL validation failed. Try again.

Error?
URL validation failed. Try again.

How To Reproduce
Steps to reproduce the behavior:
1. /api/zoom/webhooks
2. Server-To-Server OAuth - endpoint.url_validation
3. **URL validation failed. Try again.

Larvael Code**
Route::post(‘/zoom/webhook’, function (Request $request) {

$payload = json_decode($request->getContent(), true);



if (($payload\['event'\] ?? null) === 'endpoint.url_validation') {

    $plainToken  = $payload\['payload'\]\['plainToken'\] ?? '';

    $secretToken = "\*\*\*\*\*\*\*\*\*\*";



    $encryptedToken = hash_hmac('sha256', $plainToken, $secretToken);

return response()->json([

        'plainToken'     => $plainToken,

        'encryptedToken' => $encryptedToken,

    \], 200);

}



return response()->json(\['message' => 'OK'\], 200);

});