I'm pulling my hair out trying to make a POST request to an API endpoint using wp_remote_post.

The API needs a request with content-type multipart/mixed but WordPress doesn't seem to play nicely with that request type. It seems to be doing something to the POST body which causes the server to reject it. The response I receive is 400 Bad Request (nothing specific).

The request works fine when made via cURL or Postman. Moreover, other API requests made via WordPress to the same API (e.g. POST requests with type application/json) work fine so I know it's not a problem with connectivity/authorization, or user-agent issues on the API side.

I suspect WordPress is making changes to the headers or the body somehow before sending the request, or just isn't sending the body as "raw" data.

Here's the code:

$body = "--boundary
Content-Type: application/http

GET /foo/bar
Content-Type: application/http

GET /bar/baz

$endpoint = "https://example.com/api";

$options = [
    'body'        => $body,
    'headers'     => [
        'Content-Type' => 'multipart/mixed; boundary=--boundary',
        'Authorization' => 'Bearer sometoken',
    'data_format' => 'body'

wp_remote_post( $endpoint, $options );

Here is an example of the same cURL request from Postman which works when submitted via Postman or via cURL's command line:

curl -X POST https://example.com/api \
    -H 'Authorization: Bearer sometoken' \
    -H 'Content-Type: multipart/mixed;  boundary=boundary' \
    -d '--boundary
Content-Type: application/http

GET /foo/bar
Content-Type: application/http

GET /bar/baz

1 Answer 1


Those with eagle eyes may have noticed that in the PHP code, the boundary string inside the Content-Type header was prefixed with two dashes (--).

Those dashes should have not been there. Removing them allows the request to work.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.