The URL for the Third Party Survey is being converted to all lowercase

Other people have asked the same question as me below, but since it hasn’t been resolved, I would like to ask the same question again.

When we use endpoint [/meetings/{meetingId}/survey ]

We call api [/meetings/{meetingId}/survey ] with the following PHP program.
The URL for the Third Party Survey is being converted to all lowercase and registered in ZOOM.
“” → “”

        $params = array(
            'third_party_survey' => ""
        $options = array(
            CURLOPT_URL => "$meeting_id/survey",
            CURLOPT_HTTPHEADER => array(
                "Content-Type: application/json",
                "Authorization: Bearer $accessToken",
            CURLOPT_POSTFIELDS => json_encode($params),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
        $ch = curl_init();
        curl_setopt_array($ch, $options);

I would like to register capital letters as they are.
Could you please provide a solution?
Thank you.

Perhaps you can URL encode the characters that would be transformed, or try out other cross-site scripting (XSS) techniques that are used for filter evasion?


Thank you so much for the advice.
I was able to handle it with URL encoding.
It was helpful.

1 Like

Zoom devs! Please fix this issue, URLs are case sensitive and your API should not be converting them to lowercase.

For anyone else looking for a workaround, URL encoding worked for me as well though it was a bit clunky. Here’s the nodeJS code I used for this:

// The zoom API appears to have a bug where it converts third party survey links to lowercase letters, which spoils the link
// Encode any uppercase letters in the URL to avoid this:
const percentEncodeUppercaseLettersAndUnsafeCharacters = (rawUrl: string) => {
    const UTF8_ENCODER = new TextEncoder();
    return [...rawUrl]
        .map((char) => {
            if (/^[A-Z]$/.test(char)) {
                // Forcibly convert uppercase letters to percent encoded strings (they are skipped by encodeURI)
                return `%${UTF8_ENCODER.encode(char)[0].toString(16).padStart(2, "0")}`;
            } else {
                // Use the standard URI encode function to handle all other characters
                return encodeURI(char);