public function send(array $body = null)
    {
        $json = $this->createJsonBody($body);
        $signature = $this->createSignature($json);
        
        $headers = $options = [];
        $headers["User-Agent"] = self::prepareUserAgent();
        
        if ($body) {
            $headers["Content-Type"] = "application/json";
            $headers["Content-Length"] = strlen($json);
            $options["body"] = $json;
        }
        
        $options["headers"] = $this->prepareHeaders($signature, $headers);
        
        try {
            $this->httpClient = new Client(
                [
                    "base_uri" => $this->host,
                    "timeout" => self::TIMEOUT
                ]
            );
            
            return new Result(
                $this->httpClient->request(
                    $this->method, 
                    $this->endpoint, 
                    $options
                )
            );
        } catch (TransferException $e) {
            throw new EndpointException($e->getMessage(), $e->getCode(), $e);
        }
    }