def METHOD_NAME(self, offset=0, limit=10, resulttype='results',
          bbox=[], datetime_=None, properties=[], sortby=[],
          select_properties=[], skip_geometry=False, q=None,
          filterq=None, **kwargs):
    query_params = []
    max_age_hours = self.options.get('max_age_hours')
    url = f'{self.data}.geoJson'
    if self.filters is not None:
        LOGGER.debug(f'Setting filters ({self.filters})')
        query_params.append(self.filters)
    if max_age_hours is not None:
        LOGGER.debug(f'Setting default time filter {max_age_hours} hours')
        currenttime = datetime.now(timezone.utc)
        mintime = currenttime - timedelta(hours=max_age_hours)
        mintime = mintime.strftime('%Y-%m-%dT%H:%M:%SZ')
        query_params.append(f'time>={mintime}')
    elif datetime_ is not None:
        LOGGER.debug('Setting datetime filters')
        LOGGER.debug('Setting datetime filters')
        if '/' in datetime_:  # envelope
            LOGGER.debug('detected time range')
            time_begin, time_end = datetime_.split('/')
            if time_begin != '..':
                LOGGER.debug('Setting time_begin')
                query_params.append(f'time>={time_begin}')
            if time_end != '..':
                LOGGER.debug('Setting time_end')
                query_params.append(f'time<={time_end}')
        else:
            query_params.append(f'time={datetime_}')
    if bbox:
        LOGGER.debug('Setting bbox')
        query_params.extend([
            f'latitude>={bbox[1]}',
            f'latitude<={bbox[3]}',
            f'longitude>={bbox[0]}',
            f'longitude<={bbox[2]}'
        ])
    url = f'{url}?{"&".join(query_params)}'
    LOGGER.debug(f'Fetching data from {url}')
    response = requests.get(url)
    LOGGER.debug(f'Response: {response}')
    data = response.json()
    LOGGER.debug(f'Data: {data}')
    matched = len(data['features'])
    returned = limit
    data = data['features'][offset:limit]
    # add id to each feature as this is required by pygeoapi
    for idx in range(len(data)):
        # ID used to extract individual features
        try:
            id_ = data[idx]['properties'][self.id_field]
        except KeyError:
            # ERDDAP changes case of parameters depending on result
            id_ = data[idx]['properties'][self.id_field]
        except Exception as err:
            msg = 'Cannot determine station identifier'
            LOGGER.error(msg, err)
            raise ProviderQueryError(msg)
        obs_time = data[idx]['properties']['time']
        obs_id = f'{id_}.{obs_time}'
        data[idx]['id'] = obs_id
    return {
        'type': 'FeatureCollection',
        'features': data,
        'numberMatched': matched,
        'numberReturned': returned
    }