Duplicate Sessions Caused by Multiple Zoom Webhooks for the Same Meeting Recording

Hi Team,

We are reaching out to resolve an issue with duplicate sessions caused by receiving multiple Zoom webhooks for the same meeting recording. This results in duplicate sessions being created for our customer.

The customer has already reached out to Zoom support regarding this issue. Zoom has advised that our technical team should contact you directly to help resolve the problem.

Customer’s Zoom Support Reference:
Zoom Case: CS0001759
Customer Ticket: 000000015462990

Please let us know the next steps to resolve this issue and prevent duplicate webhooks from being sent for the same meeting recording.

Kind regards.

Hi @zoom-test , which exact Zoom webhook are you experiencing trouble with? Additionally, is each recording the exact same or is the host stopping and starting the meeting recording multiple times and possibly causing there to be multiple webhooks?

If it’s the same exact recording, it may be a latency issue where for some reason, Zoom system thinks the first webhook is not being sent so it is retrying.

After receiving a Webhook, your Event Notification Endpoint URL should respond with either a 200 or a 204 HTTP status code within three seconds for Zoom to consider that the notification was successfully delivered.

In the case where a 200 OK response is not received, Zoom assumes the Webhook request failed, and will send it 3 more times. The first retry will be sent 5 minutes after the initial notification delivery attempt, second retry will be sent 20 minutes after the first retry attempt and third retry will be sent 60 minutes after the second retry attempt for an event.

Do the duplicate webhooks have the same webhook event id?

Hi Gianni,

We received two identical ‘completed’ event webhooks. The only variations within the body were the download URL and token, which is expected. However, the webhooks originated from different source IPs and arrived nearly simultaneously. Consequently, we processed both, resulting in duplicate imported sessions.

Examples of the webhook requests (excluding the body, where only the download URL and token differ) are provided below:

Webhook 1 (2025-02-26T19:06:49.077Z):

{
    "Level": "PAYLOAD",
    "Origin": "ZOOM_WEBHOOK_API",
    "RequestId": "6dac729d-12cd-4b47-846e-1dc0e5de1017",
    "message": {
        "resource": "***",
        "path": "***",
        "httpMethod": "POST",
        "headers": {
            "Authorization": "***",
            "clientId": "***",
            "Content-Type": "application/json; charset=utf-8",
            "Host": "***",
            "traceparent": "00-90ecfa9698184180d475bd046fc3e637-2f4e56a079560c08-00",
            "User-Agent": "Zoom Marketplace/1.0a",
            "X-Amzn-Trace-Id": "Root=1-67bf6649-251f06745e93f8b127aaa9e4",
            "X-Forwarded-For": "134.224.12.54",
            "X-Forwarded-Port": "443",
            "X-Forwarded-Proto": "https",
            "x-zm-request-timestamp": "1740596809",
            "x-zm-signature": "v0=0ba959cf8144557611b719f7abea4c7dc91aadb6680a24a08349cf1f21b2f3e6",
            "x-zm-trackingid": "v=2.0;clid=eu02;rid=WEB_0c306a6e8dbdb0bf0434e6f26ac4d818"
        },
        "multiValueHeaders": {
            "Authorization": [
                "***"
            ],
            "clientId": [
                "***"
            ],
            "Content-Type": [
                "application/json; charset=utf-8"
            ],
            "Host": [
                "***"
            ],
            "traceparent": [
                "00-90ecfa9698184180d475bd046fc3e637-2f4e56a079560c08-00"
            ],
            "User-Agent": [
                "Zoom Marketplace/1.0a"
            ],
            "X-Amzn-Trace-Id": [
                "Root=1-67bf6649-251f06745e93f8b127aaa9e4"
            ],
            "X-Forwarded-For": [
                "134.224.12.54"
            ],
            "X-Forwarded-Port": [
                "443"
            ],
            "X-Forwarded-Proto": [
                "https"
            ],
            "x-zm-request-timestamp": [
                "1740596809"
            ],
            "x-zm-signature": [
                "v0=0ba959cf8144557611b719f7abea4c7dc91aadb6680a24a08349cf1f21b2f3e6"
            ],
            "x-zm-trackingid": [
                "v=2.0;clid=eu02;rid=WEB_0c306a6e8dbdb0bf0434e6f26ac4d818"
            ]
        },
        "queryStringParameters": null,
        "multiValueQueryStringParameters": null,
        "pathParameters": null,
        "stageVariables": null,
        "requestContext": {
            "resourceId": "***",
            "resourcePath": "***",
            "httpMethod": "POST",
            "extendedRequestId": "GmzrlHg1oAMEQxQ=",
            "requestTime": "26/Feb/2025:19:06:49 +0000",
            "path": "***",
            "accountId": "***",
            "protocol": "HTTP/1.1",
            "stage": "Prod",
            "domainPrefix": "***",
            "requestTimeEpoch": 1740596809720,
            "requestId": "6dac729d-12cd-4b47-846e-1dc0e5de1017",
            "identity": {
                "cognitoIdentityPoolId": null,
                "accountId": null,
                "cognitoIdentityId": null,
                "caller": null,
                "sourceIp": "134.224.12.54",
                "principalOrgId": null,
                "accessKey": null,
                "cognitoAuthenticationType": null,
                "cognitoAuthenticationProvider": null,
                "userArn": null,
                "userAgent": "Zoom Marketplace/1.0a",
                "user": null
            },
            "domainName": "***",
            "deploymentId": "***",
            "apiId": "***"
        },
        "body": "***",
        "isBase64Encoded": false
    }
}

Webhook 2 (2025-02-26T19:06:49.746Z):

{
    "Level": "PAYLOAD",
    "Origin": "ZOOM_WEBHOOK_API",
    "RequestId": "33db26eb-27d6-426b-a18f-47a295688207",
    "message": {
        "resource": "***",
        "path": "***",
        "httpMethod": "POST",
        "headers": {
            "Authorization": "***",
            "clientId": "***",
            "Content-Type": "application/json; charset=utf-8",
            "Host": "***",
            "traceparent": "00-e0356ef001b4c7587a56af4cc578a9c8-06793c537977aff3-00",
            "User-Agent": "Zoom Marketplace/1.0a",
            "X-Amzn-Trace-Id": "Root=1-67bf6649-584028bd70608f3725d13035",
            "X-Forwarded-For": "170.114.44.217",
            "X-Forwarded-Port": "443",
            "X-Forwarded-Proto": "https",
            "x-zm-request-timestamp": "1740596809",
            "x-zm-signature": "v0=cfa632b2f4a0ee9231492b6df58236eb47b52ee6d523a9c07e2c6432da484fde",
            "x-zm-trackingid": "v=2.0;clid=eu02;rid=WEB_0c306a6e8dbdb0bf0434e6f26ac4d818"
        },
        "multiValueHeaders": {
            "Authorization": [
                "***"
            ],
            "clientId": [
                "***"
            ],
            "Content-Type": [
                "application/json; charset=utf-8"
            ],
            "Host": [
                "***"
            ],
            "traceparent": [
                "00-e0356ef001b4c7587a56af4cc578a9c8-06793c537977aff3-00"
            ],
            "User-Agent": [
                "Zoom Marketplace/1.0a"
            ],
            "X-Amzn-Trace-Id": [
                "Root=1-67bf6649-584028bd70608f3725d13035"
            ],
            "X-Forwarded-For": [
                "170.114.44.217"
            ],
            "X-Forwarded-Port": [
                "443"
            ],
            "X-Forwarded-Proto": [
                "https"
            ],
            "x-zm-request-timestamp": [
                "1740596809"
            ],
            "x-zm-signature": [
                "v0=cfa632b2f4a0ee9231492b6df58236eb47b52ee6d523a9c07e2c6432da484fde"
            ],
            "x-zm-trackingid": [
                "v=2.0;clid=eu02;rid=WEB_0c306a6e8dbdb0bf0434e6f26ac4d818"
            ]
        },
        "queryStringParameters": null,
        "multiValueQueryStringParameters": null,
        "pathParameters": null,
        "stageVariables": null,
        "requestContext": {
            "resourceId": "***",
            "resourcePath": "***",
            "httpMethod": "POST",
            "extendedRequestId": "GmzreGKCIAMEpGw=",
            "requestTime": "26/Feb/2025:19:06:49 +0000",
            "path": "***",
            "accountId": "***",
            "protocol": "HTTP/1.1",
            "stage": "Prod",
            "domainPrefix": "***",
            "requestTimeEpoch": 1740596809064,
            "requestId": "33db26eb-27d6-426b-a18f-47a295688207",
            "identity": {
                "cognitoIdentityPoolId": null,
                "accountId": null,
                "cognitoIdentityId": null,
                "caller": null,
                "sourceIp": "170.114.44.217",
                "principalOrgId": null,
                "accessKey": null,
                "cognitoAuthenticationType": null,
                "cognitoAuthenticationProvider": null,
                "userArn": null,
                "userAgent": "Zoom Marketplace/1.0a",
                "user": null
            },
            "domainName": "***",
            "deploymentId": "q6lrlu",
            "apiId": "***"
        },
        "body": "***",
        "isBase64Encoded": false
    }
}

Please let me know if you need additional information.

Thanks!

Hi @gianni.zoom,
Are these details sufficient for your investigation, or do you need any additional information?
Thanks

Hi @zoom-test ,

The info provided in your recent response is helpful but could you answer these questions explicitly?

Thank you!

Hi Gianni,

As mentioned in my previous post, we are receiving two identical ‘completed’ webhooks ("event": "recording.completed"). The recording is the same and not a result of stopping and restarting the meeting. This is unusual, as we heavily use Zoom integration in our system, but this specific customer is experiencing this strange behavior.

If you need example of the full webhook payload from both events, let me know, and I can share it with you. The only differences between them are the download_url and download_token.

Thanks!

@zoom-test thank you for further clarifying. I opened a developer support ticket for you TS1720363. Please check your email to provide fresh webhook responses there along with the relevant customer info.

Thanks Gianni!

Kind Regards

1 Like