###Update: It turns out this might be a more general issue just with my setup as it fails for `HTTPRequest` too: In[1122]:= Import@ HTTPRequest[url, <| "Method" -> "Post", "Body" -> "--divider-b1cd97ef-a024-40ae-92ea-e296812bfbdc\nContent-Type: \ application/json\n\n{\n \"name\": \"test.txt\"\n}\n\ --divider-b1cd97ef-a024-40ae-92ea-e296812bfbdc\nContent-Type: \ application/vnd.wolfram.mathematica.package\n\ntest string\n\ --divider-b1cd97ef-a024-40ae-92ea-e296812bfbdc--", "Headers" -> {"Content-Type" -> "multipart/related; \ boundary=divider-b1cd97ef-a024-40ae-92ea-e296812bfbdc", "Content-Length" -> "272"} |> ] Out[1122]= "{\"POST\", {\"host\" -> \"www.wolframcloud.com\", \ \"accept\" -> \"*/*\", \"content-type\" -> \"multipart/related; \ boundary=divider-b1cd97ef-a024-40ae-92ea-e296812bfbdc\", \"user-agent\ \" -> \"Wolfram HTTPClient 11.1\", \"x-forwarded-proto\" -> \ \"https\", \"x-forwarded-for\" -> \"76.118.178.116, 10.11.32.157\", \ \"x-forwarded-host\" -> \"www.wolframcloud.com\", \ \"x-forwarded-server\" -> \"www.wolframcloud.com\", \ \"content-length\" -> \"272\"}, None, Missing[\"NotAvailable\"]}" So maybe something more subtle is going on with my API call. --- ###Original: The service connection framework uses [`URLFetch`](http://reference.wolfram.com/language/ref/URLFetch.html) to do its dirty-work and so I am stuck using that too. Unfortunately for multipart uploads there's something bizarro going on. Consider the following: url = First@ CloudDeploy[ Delayed[HTTPRequestData[{"Method", "Headers", "Body"}], "WL"]]; In[631]:= ToExpression@ URLFetch[url, "MultipartElements" -> {{"metadata", "application/json"} -> {123, 10, 32, 32, 32, 32, 34, 110, 97, 109, 101, 34, 58, 32, 34, 116, 101, 115, 116, 46, 116, 120, 116, 34, 10, 125}, {"contentdata", "application/vnd.wolfram.mathematica.package"} -> {116, 101, 115, 116, 32, 115, 116, 114, 105, 110, 103}}, "Method" -> "POST", "CredentialsProvider" -> None ] Out[631]= {"POST", {"host" -> "www.wolframcloud.com", "user-agent" -> "Wolfram HTTPClient 11.1", "accept" -> "*/*", "expect" -> "100-continue", "content-type" -> "multipart/form-data; \ boundary=------------------------7271f99252c452e1", "x-forwarded-proto" -> "https", "x-forwarded-for" -> "76.118.178.116, 10.11.32.157", "x-forwarded-host" -> "www.wolframcloud.com", "x-forwarded-server" -> "www.wolframcloud.com", "content-length" -> "371"}, Missing["NotAvailable"]} Notice that the `"Body"` element is missing. For some reason the `"POST"` call didn't the multipart-encoded stuff. On the other hand: In[632]:= ToExpression@ URLFetch[url, "MultipartElements" -> {{"metadata", "application/json"} -> {123, 10, 32, 32, 32, 32, 34, 110, 97, 109, 101, 34, 58, 32, 34, 116, 101, 115, 116, 46, 116, 120, 116, 34, 10, 125}, {"contentdata", "application/vnd.wolfram.mathematica.package"} -> {116, 101, 115, 116, 32, 115, 116, 114, 105, 110, 103}}, "Method" -> "GET", "CredentialsProvider" -> None ] Out[632]= {"GET", {"host" -> "www.wolframcloud.com", "user-agent" -> "Wolfram HTTPClient 11.1", "accept" -> "*/*", "expect" -> "100-continue", "content-type" -> "multipart/form-data; \ boundary=------------------------2e317ef0d18c6ab7", "x-forwarded-proto" -> "https", "x-forwarded-for" -> "76.118.178.116, 10.11.32.157", "x-forwarded-host" -> "www.wolframcloud.com", "x-forwarded-server" -> "www.wolframcloud.com", "content-length" -> "371"}, "--------------------------2e317ef0d18c6ab7 Content-Disposition: form-data; name=\"metadata\" Content-Type: application/json { \"name\": \"test.txt\" } --------------------------2e317ef0d18c6ab7 Content-Disposition: form-data; name=\"contentdata\" Content-Type: application/vnd.wolfram.mathematica.package test string --------------------------2e317ef0d18c6ab7-- "} That seems to work fine. So the `"GET"` request was okay but the `"POST"` one failed. Is there a reason for this? Is there a way around it? (Note that this is an for met issue even though the `"MultipartElements"` field of the [`HTTPRequestData`](http://reference.wolfram.com/language/ref/HTTPRequestData.html) encodes correctly. The Google Drive upload API endpoint notices an empty `"Body"` and throws an error.)