def get_aggregate_stats_overlay_bandwidth_ne_pk_tunnels(
    self,
    ne_pk_tunnel_list: list[str],
    start_time: int,
    end_time: int,
    granularity: str,
) -> dict:
    """Get aggregate overlay bandwidth stats data filter by query
    parameters

    .. list-table::
        :header-rows: 1

        * - Swagger Section
          - Method
          - Endpoint
        * - aggregateStats
          - POST
          - /stats2/aggregate/overlays/bandwidth

    :param ne_pk_tunnel_list: List of dictionaries of appliance nePk
        values and optional tunnel id's,
        e.g. ``[{"nePk":"77.NE", "tunnelId":"tunnel_8"}, ...]`` \n
        * keyword **ids** (`str`): Network Primary Key (nePk) of
          appliance, e.g. ``3.NE`` \n
        * keyword **tunnelId** (`str`): tunnel id, e.g. ``Tunnel_12``,
          mandatory field but can be blank string "" \n
    :type ne_pk_tunnel_list: list[str]
    :param start_time: Long(Signed 64 bits) value of seconds since EPOCH
        time indicating the starting time boundary of data time range
    :type start_time: int
    :param end_time: Long(Signed 64 bits) value of seconds since EPOCH
        time indicating the ending time boundary of data time range
    :type end_time: int
    :param granularity: Data granularity filtering whether data is
        minutely data, hourly data or daily data. Accepted values are
        ``minute``, ``hour``, and ``day``
    :type granularity: str
    :return: Returns dictionary of aggregate stats filtered by query
        parameters
    :rtype: dict
    """
    path = (
        "/stats2/aggregate/overlays/bandwidth?"
        + "startTime={}&endTime={}&granularity={}".format(
            start_time, end_time, granularity
        )
    )

    data = ne_pk_tunnel_list

    return self._post(path, data=data)