code: def get_product_historic_rates(self, product_id, start=None, end=None,
                                     granularity=None):
          
          params = {}
          if start is not None:
              params['start'] = start
          if end is not None:
              params['end'] = end
          if granularity is not None:
              acceptedGrans = [60, 300, 900, 3600, 21600, 86400]
              if granularity not in acceptedGrans:
                  raise ValueError( 'Specified granularity is {}, must be in approved values: {}'.format(
                          granularity, acceptedGrans) )
  
              params['granularity'] = granularity
          return self._send_message('get',
                                    '/products/{}/candles'.format(product_id),
                                    params=params)
docs: Historic rates for a product.
  
          Rates are returned in grouped buckets based on requested
          `granularity`. If start, end, and granularity aren't provided,
          the exchange will assume some (currently unknown) default values.
  
          Historical rate data may be incomplete. No data is published for
          intervals where there are no ticks.
  
          **Caution**: Historical rates should not be polled frequently.
          If you need real-time information, use the trade and book
          endpoints along with the websocket feed.
  
          The maximum number of data points for a single request is 200
          candles. If your selection of start/end time and granularity
          will result in more than 200 data points, your request will be
          rejected. If you wish to retrieve fine granularity data over a
          larger time range, you will need to make multiple requests with
          new start/end ranges.
  
          Args:
              product_id (str): Product
              start (Optional[str]): Start time in ISO 8601
              end (Optional[str]): End time in ISO 8601
              granularity (Optional[int]): Desired time slice in seconds
  
          Returns:
              list: Historic candle data. Example:
                  [
                      [ time, low, high, open, close, volume ],
                      [ 1415398768, 0.32, 4.2, 0.35, 4.2, 12.3 ],
                      ...
                  ]