Calls wepay.com/v2/``uri`` with ``params`` and returns the JSON
        response as a python `dict`. The optional ``access_token`` parameter
        takes precedence over instance's ``access_token`` if it is
        set. Essentially this is the place for all api calls.

        :param str uri: API uri to call
        :keyword dict params: parameters to include in the call
        :keyword str access_token: access_token to use for the call.
        :keyword str api_version: allows to create a call to specific version of API
        :keyword float timeout: a way to specify a call timeout in seconds. If `None`
            will use `WePay.timeout`.
        :return: WePay response as documented per call
        :rtype: dict
        :raises: :exc:`WePayClientError<wepay.exceptions.WePayClientError>`
        :raises: :exc:`WePayServerError<wepay.exceptions.WePayServerError>`
        :raises: :exc:`WePayConnectionError<wepay.exceptions.WePayConnectionError>`

def call(self, uri, params=None, access_token=None, api_version=None, timeout=None):
        """Calls wepay.com/v2/``uri`` with ``params`` and returns the JSON
        response as a python `dict`. The optional ``access_token`` parameter
        takes precedence over instance's ``access_token`` if it is
        set. Essentially this is the place for all api calls.

        :param str uri: API uri to call
        :keyword dict params: parameters to include in the call
        :keyword str access_token: access_token to use for the call.
        :keyword str api_version: allows to create a call to specific version of API
        :keyword float timeout: a way to specify a call timeout in seconds. If `None`
            will use `WePay.timeout`.
        :return: WePay response as documented per call
        :rtype: dict
        :raises: :exc:`WePayClientError<wepay.exceptions.WePayClientError>`
        :raises: :exc:`WePayServerError<wepay.exceptions.WePayServerError>`
        :raises: :exc:`WePayConnectionError<wepay.exceptions.WePayConnectionError>`

        """
        url = self.api_endpoint + uri
        params = params or {}

        headers = {
            'Content-Type': 'application/json', 
            'User-Agent': 'Python WePay SDK (third party)'
        }
        access_token = access_token or self.access_token
        headers['Authorization'] = 'Bearer %s' % access_token
        api_version = api_version or self.api_version
        if not api_version is None:
            headers['Api-Version'] = api_version

        timeout = timeout or self._timeout
        return self._post(url, params, headers, timeout)