在cur中将curl转换为guzzle代码

I have a curl code like this which I am trying to convert into guzzle like so

$response = $client->post(self::$url, [
        'query' => array(
            'app_id' => "app-id",
            'included_segments' => array('All'),
            'contents' => $content,
            'headings' => $headings) ],
              ['headers' => [
                      'Content-Type' => 'application/json',
                      'Authorization' => 'Basic api key'
              ]
        ]);

But when I try to run this I get this error

...` resulted in a `400 Bad Request` response:
{\"errors\":[\"Please include a case-sensitive header of Authorization: Basic <YOUR-REST-API-KEY-HERE> with a valid REST AP (truncated...)

CURL

curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8','Authorization: Basic api key'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);

Which version of Guzzle is this? Because the latest is different.

$client = new GuzzleHttp\Client();
$req = $client->request('POST', self::$url, [
    'json' => ['app_id' => '...', 'foo' => 'bar'],
    'headers' => ['Authorization' => 'Basic api key']
]);
$res = $client->getBody()->getContents();

I'm pretty sure that 'json' adds automatically the specific header, otherwise transform 'json' in 'form_params' and add the header (content-type).