Further testing shows even more strange stuff going on. Switching to Invoke-WebRequest in PowerShell to avoid any encoding issues. First, I upload a file:
$file = Get-Item -Path ".\image.png"
$fileForm = [ordered]@{ title="My Image"; file=$file }
$fileRequest = Invoke-WebRequest -Method POST -Uri "${baseUri}files" -Headers $headers -ContentType multipart/form-data -Form $fileForm | ConvertFrom-Json
That result is OK, and I get back the file id at $fileRequest.data.id. Let's try to post a custom data model release with version and file properties.
$releaseForm = @{ version="1.0.0"; file=$fileRequest.data.id }
$releaseRequest = Invoke-WebRequest -Method POST -Uri "${baseUri}items/releases" -Headers $headers -ContentType multipart/form-data -Form $releaseForm | ConvertFrom-Json
Returns an error:
Invoke-WebRequest:{"errors":[{"message":"\"file\" is required","extensions":{"code":"FAILED_VALIDATION","field":"file","type":"required"}},{"message":"\"version\" is required","extensions":{"code":"FAILED_VALIDATION","field":"version","type":"required"}}]}
However, if I convert it to JSON and pass it as a body:
$releaseRequest = Invoke-WebRequest -Method POST -Uri "${uri}items/releases" -Headers $headers -ContentType application/json -Body ($releaseForm | ConvertTo-Json) | ConvertFrom-Json
Then I get OK status?!