def create_observations(params: Dict[str, Dict[str, Any]], access_token: str) -> List[Dict[str, Any]]:
    """Create a single or several (if passed an array) observations).

    :param params:
    :param access_token: the access token, as returned by :func:`get_access_token()`

    :return: iNaturalist's JSON response, as a Python object
    :raise: requests.HTTPError, if the call is not successful. iNaturalist returns an error 422 (unprocessable entity)
            if it rejects the observation data (for example an observation date in the future or a latitude > 90. In
            that case the exception's `response` attribute give details about the errors.

    allowed params: see https://www.inaturalist.org/pages/api+reference#post-observations

    Example:

        params = {'observation':
            {'species_guess': 'Pieris rapae'},
        }

    TODO investigate: according to the doc, we should be able to pass multiple observations (in an array, and in
    renaming observation to observations, but as far as I saw they are not created (while a status of 200 is returned)
    """
    response = requests.post(url="{base_url}/observations.json".format(base_url=INAT_BASE_URL),
                             json=params,
                             headers=_build_auth_header(access_token))
    response.raise_for_status()
    return response.json()