Zoom · event: meeting.started ·
content type: application/json
This is a representative sample — fake IDs, real structure. To see a payload with your data, point the provider at a capture URL (button below).
One click creates a free capture bin with this exact payload already in it — pretty-printed, headers inspectable, replayable to your own endpoint:
Then paste the bin's URL into Zoom's webhook settings to capture a real delivery. No signup.
content-type: application/json x-zm-signature: v0=6c4e67cbEXAMPLEhexhmacEXAMPLE9a1f2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d x-zm-request-timestamp: 1787961600
{
"event": "meeting.started",
"event_ts": 1787961600000,
"payload": {
"account_id": "AbCdEfGhSampleAcct",
"object": {
"id": "1234567890",
"uuid": "4444AAAbbbCCCddd==",
"host_id": "z8yCxEXAMPLEhostQ",
"topic": "Weekly sync",
"type": 2,
"start_time": "2026-08-29T00:00:00Z",
"timezone": "America/Los_Angeles",
"duration": 60
}
}
}
x-zm-signature is v0= + hex HMAC-SHA256 over the string
v0:{timestamp}:{rawBody} keyed with your app's Secret Token — note the
signed string includes the prefix and timestamp, not just the body.endpoint.url_validation
challenge your endpoint must answer within 3 seconds (and again every
72 hours) — a Hookden bin passes it with a
{{hmac_sha256}} response template:
Zoom webhook validation failed.Reproduce this delivery against any endpoint (your handler, a bin, staging):
$ curl -X POST https://your-endpoint.example/hook \
-H 'content-type: application/json' \
-H 'x-zm-signature: v0=6c4e67cbEXAMPLEhexhmacEXAMPLE9a1f2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d' \
-H 'x-zm-request-timestamp: 1787961600' \
-d '{"event":"meeting.started","event_ts":1787961600000,"payload":{"account_id":"AbCdEfGhSampleAcct","object":{"id":"1234567890","uuid":"4444AAAbbbCCCddd==","host_id":"z8yCxEXAMPLEhostQ","topic":"Weekly sync","type":2,"start_time":"2026-08-29T00:00:00Z","timezone":"America/Los_Angeles","duration":60}}}'
← All payload examples · Related guide · Signature debugger · Docs