Webhook Example: Zoom
Zoom webhooks notify your endpoint of events like meeting starts or ends. They require an initial URL validation challenge and support signature verification for events. This dual pattern teaches handling setup trust (challenge) separately from ongoing security (signature), common in services with periodic re-validation.
Quickstart
1) Register the Webhook in Zoom
Registration triggers the challenge. In Zoom:
- Go to Zoom Marketplace > Develop > Build Legacy App > Webhook Only.
- Add event subscriptions.
- Event notification endpoint URL: Your Agent Studio listener URL.
- Generate a Secret Token—note it; this serves both challenge signing and event signatures.
- Validate the URL (triggers the challenge — do this after setting up your listener below).
- Save and subscribe to events.
| Event | Description | Key Payload Fields |
|---|---|---|
| meeting.started | Meeting begins | meeting.id, host_id |
| meeting.ended | Meeting concludes | meeting.id |
2) Configure Verification in Agent Studio
Zoom uses a challenge for URL validation and signatures for events. Configure both.
For Verification Challenge
In the One Time Verification Challenge panel:
- Set Challenge Detection:
parsed_body.event == "endpoint.url_validation"using Moveworks DSL. (detects the validationPOST). - Choose HTTP Response Status Code:
200 OK. Zoom expects success codes; mismatches fail validation. - HTTP Response Headers: Leave default or add if required.
- HTTP Response Body. This echoes the token and adds the signed version:
plainToken: parsed_body.payload.plainToken encryptedToken: challenge_token["zoom_token"] - Click Add Challenge Token to create the signed value:
- Name: Set to
zoom_token(or any unique identifier). This name becomes a reference key, use it in the response body as shown abovechallenge_token["zoom_token"]to insert the computed hash dynamically. - Signing Algorithm:
HMAC-SHA256 - Signing Secret: Paste the Secret Token from Zoom, the shared key for hashing.
- Signing Payload:
parsed_body.payload.plainToken
- Name: Set to
For Signature Verification
In the Verification panel:
- Add a new rule.
- Select Validation Type: Signature Verification.
- Secret Shared by External System: Same Secret Token from Zoom.
- Signature Verification Hash Mode:
HMAC-SHA256. - Verification Payloads: Concatenate using DSL:
$CONCAT([headers["x-zm-request-timestamp"],":",raw_body],""). This builds the exact string Zoom signs. - Verification Received Signature:
headers["x-zm-signature"].
Zoom Documentation
Updated about 11 hours ago