Helpful Tip: Uploading user pictures requires multipart request

POST /users/{userId}/picture is documented as taking one piece of request data “pic_file” which is of type “file” and “must be a jpg/jpeg” but provides no other documentation. The test request shows an example with the Content-Type application/json, but attempting to use this will return a 400 Bad Request error with the message “Current request is not a multipart request”.

Instead, I found success piecing together random comments on the internet and using “Content-Type: multipart/form-data; boundary=$boundary” (where $boundary is the unique, semi-random string that does not occur within the file contents). In place of a JSON request body, the multipart/form-data request body looks like this:

--$boundary
Content-Disposition: form-data; name="pic_file"; filename="$filename"
Content-Type: image/jpeg

$filecontents
--$boundary--

It’s also important to note that the line endings are \r\n between the lines (otherwise you will receive a 500 Internal Server Error).

Hopefully that will save others the time it cost me.

1 Like

Thanks for giving a tip to our community! We are going through our API docs now and beefing them up so I will add this example to the list of improvements.

This isn’t working for me… I’ve tried every combination I can think of to update a user’s profile picture (jpeg in the below example) using the API, but regardless of everything I’ve tried, I’m always just getting this response:

{
“code”: 120,
“message”: “Only jpg/jpeg, gif or png image file can be uploaded.”
}

Here is what I’m sending:

Header

Content-Type: multipart/form-data; boundary=8d6be10c4d2aee8

Body

–8d6be10c4d2aee8
Content-Disposition: form-data; name=“pic_file”; filename=“icon.jpeg”
Content-Type: image/jpeg;base64

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
–8d6be10c4d2aee8–

I’ve tried altering all of the following (in the above), none of which fixes the error:

  • Encoding the image with UTF-8, ASCII, or Binary rather than Base64
  • Changing/removing the filename
  • Using a png file instead of a jpeg (and adjusting the Content-Type accordingly)
  • Changing the boundary (adjusting the number of dashes & changing the key)
  • Adding Content-Transfer-Encoding header to the inner (image) content part (when encoding as Base64 and Binary)

I’m out of ideas at this point for how to get this working, so any suggestions would be appreciated.

Your image is working for me (I had to base64 decode it). I’m not adding anything after the content type. The $filecontents is just the raw binary. Also, there’s only one blank line after the Content-Type (the first version of your post had two).

Edit: Also, I’m not adding any Content-Transfer-Encoding headers.

I also struggled with this. Here’s a fully formed PowerShell 6 function that achieves the upload. Note PS 6 is required because Invoke-RestMethod is pretty painful for multipart/form in lower versions:

function Update-ZoomUserPhoto{
    param([Parameter(Mandatory=$true)][SecureString]$token,[String]$userId,[String]$photoPath)
    $Uri = "https://api.zoom.us/v2/users/$userId/picture"
    try{
        $boundary = [System.Guid]::NewGuid().ToString(); 
        $multiPartUpload = [System.Net.Http.MultipartFormDataContent]::new($boundary)
        $pictureContent = [IO.File]::ReadAllBytes($photoPath)
        $byteArrayContent = [System.Net.Http.ByteArrayContent]::new($pictureContent)
        $multiPartUpload.add($byteArrayContent,'pic_file','temp.jpg')
        Invoke-RestMethod -Method POST -Authentication 'Bearer' -token $token -Uri $Uri -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $multiPartUpload
    } catch {
        Write-Host "Failed with error code "+$_.Exception.Response.StatusCode.value__
        Write-Host "Description: "+$_.Exception.Response.StatusDescription
    }
}
1 Like

Hey @dan.bennett thank you for using Zoom and posting this! :slight_smile:

We really appreciate you helping out the Zoom Developer Community!

Thanks,
Tommy

What method are you using to read in the .jpg file? I finally got a combination of code that no longer returns an error, but it also doesn’t load the picture correctly. I just get a mess of pixilated colors. The only means of reading it in that doesn’t return an err is:

$filecontents = Get-Content(“filename.jpg”) -raw

Everything else I’ve tried returns “(400) Bad Request”.

Hey @jferguson, thanks for posting and using Zoom!

Can you share your code so I can help debug?

Thanks,
Tommy

Here’s what I have. I tried to genericize it without changing it. the email address and filename was changed to remove any company info. The $JWT variable is generated before this code and I’m confident that it’s correct.

$email = “username@domain.com
$filename = “file.jpg”

$filecontents = Get-Content($filename) -raw
$boundary = [System.Guid]::NewGuid().ToString();
$body = @"
–$boundary
Content-Disposition: form-data; name=“pic_file”; Filename=“file.jpg”
Content-Type: image/jpeg

$filecontents
–$boundary–
"@

$headers=@{}
$headers.Add(“authorization”, “Bearer $JWT”)
$headers.Add(“content-type”, “multipart/form-data; boundary="$boundary”")

try
{
$response = Invoke-WebRequest -Uri “https://api.zoom.us/v2/users/$email/picture” -Method POST -Headers $headers -Body $body

}
catch [Exception]
{
Write-host $_.Exception.Message
}

Hey @jferguson,

What is this PHP?

Maybe this stackoverflow will help:

Thanks,
Tommy

Sorry. It’s Powershell. The post above mine was Powershell so I didn’t think to specify.

Hey @jferguson,

I am not too familiar with uploading files with Powershell:

Here is an example in Node.js.

Thanks,
Tommy

Thanks. I ended up just upgradiong Powershell and using the suggested code in this thread from dan.bennett.It’s working with that code. Now I have to upgrade everywhere I need to run it from.

1 Like

Happy to hear it is working now! :slight_smile:

-Tommy

I realize I’m a bit late to this, but for those in need of a solution, I wanted to point out that the module that I have developed supports adding photos to user profiles using PowerShell. After installing the module, you can run a command like the following:

Update-ZoomProfilePicture -UserId 'jmcevoy@lawfirm.com' -FileName 'C:\Development\Zoom\PSZoom\mcevoy.jpg' -ApiKey '123456789' -ApiSecret '987654321'

Or something more interesting:

$Users = @(
    @{
        email = 'luke@company.com'
        filename  = 'C:\Pictures\luke.jpg'
    },
    @{
        email = 'han@company.com'
        filename  = 'C:\Pictures\han.jpg'
    },
    @{
        email = 'leya@company.com'
        filename  = 'C:\Pictures\leya.jpg'
    }
)

$Users | % {Update-ZoomProfilePicture $_.email $_.filename}

You can read more about the module at: https://github.com/JosephMcEvoy/PSZoom.

And the relevant cmdlet: https://github.com/JosephMcEvoy/PSZoom/blob/master/PSZoom/Public/Users/Update-ZoomProfilePicture.ps1

1 Like

Thanks for sharing this @maci01! :slight_smile:

-Tommy

Hi,

Can someone please confirm if this endpoint works for GIF filetypes? The documentation states jpg/jpeg, gif or png are supported but whenever I send a gif I receive a 400 bad request with
{"code":120,"message":""}. I’ve confirmed the file is not empty and less than 2M. Sending the same request but passing a jpg image works successfully.

Example cURL request:
curl --location --request POST "https://api.zoom.us/v2/users/{userid}/picture" --header "Authorization: Bearer {token}" --form "pic_file=@C:\temp\pic.GIF"

Thanks!
Andrew

Hey @acb,

Thanks for reaching out about this. A gif should be acceptable as long as it’s under 2MB. Do you get this same error when you test your request in Postman? Similarly, if you try to upload the file in the UI, does this go through?

Let me know—thanks,
Will

Hey @will.zoom,

Thanks for responding. Yes, I receive the same error when testing the request in Postman using a gif. The UI accepts the gif though.

Thanks!
Andrew

Hey @acb ,

Strange! Can you send us the actual gif file and a copy of your request to developersupport@zoom.us? We’ll be happy to further troubleshoot this for you.

Thanks!
Will

1 Like