def _check_parameters(animal_types=None, size=None, gender=None, age=None,
    coat=None, status=None, distance=None, sort=None, limit=None):
    """
    Internal function for checking the passed parameters against valid options available in the Petfinder API.

    Parameters
    ----------
    animal_type : {'dog', 'cat', 'rabbit', 'small-furry', 'horse', 'bird', 'scales-fins-other', 'barnyard'}, str, optional
        String representing desired animal type to search. Must be one of 'dog', 'cat', 'rabbit', 'small-furry',
        'horse', 'bird', 'scales-fins-other', or 'barnyard'.
    size: {'small', 'medium', 'large', 'xlarge'}, str, tuple or list of str, optional
        String or tuple or list of strings of desired animal sizes to return. The specified size(s) must be one
        of 'small', 'medium', 'large', or 'xlarge'.
    gender: {'male', 'female', 'unknown'} str, tuple or list of str, optional
        String or tuple or list of strings representing animal genders to return. Must be of 'male', 'female',
        or 'unknown'.
    age : {'baby', 'young', 'adult', 'senior'} str, tuple or list of str, optional
        String or tuple or list of strings specifying animal age(s) to return from search. Must be of 'baby',
        'young', 'adult', 'senior'.
    coat : {'short', 'medium', 'long', 'wire', 'hairless', 'curly'}, str, tuple or list of str, optional
        Desired coat(s) to return. Must be of 'short', 'medium', 'long', 'wire', 'hairless', or 'curly'.
    status : {'adoptable', 'adopted', 'found'} str, optional
        Animal status to filter search results. Must be one of 'adoptable', 'adopted', or 'found'.
    distance : int, optional
        Returns results within the distance of the specified location. If not given, defaults to 100 miles.
        Maximum distance range is 500 miles.
    sort : {'recent', '-recent', 'distance', '-distance'}, optional
            Sorts by specified attribute. Leading dashes represents a reverse-order sort. Must be one of 'recent',
            '-recent', 'distance', or '-distance'.
    limit : int, default 20
        Number of results to return per page. Defaults to 20 results and cannot exceed 100 results per page.

    Raises
    ------
    ValueError

    Returns
    -------
    None
        If :code:`ValueError` is not raised, the function returns :code:`None` which signifies the passed API
        parameters are valid.

    """
    _animal_types = ('dog', 'cat', 'rabbit', 'small-furry', 'horse', 'bird',
        'scales-fins-other', 'barnyard')
    _sizes = 'small', 'medium', 'large', 'xlarge'
    _genders = 'male', 'female', 'unknown'
    _ages = 'baby', 'young', 'adult', 'senior'
    _coats = 'short', 'medium', 'long', 'wire', 'hairless', 'curly'
    _status = 'adoptable', 'adopted', 'found'
    _sort = 'recent', '-recent', 'distance', '-distance'
    incorrect_values = {}
    if animal_types is not None and animal_types not in _animal_types:
        incorrect_values['animal_types'] = (
            'animal types {types} is not valid. Animal types must of the following: {animal_types}'
            .format(types=animal_types, animal_types=_animal_types))
    if size is not None:
        if isinstance(size, str):
            size = [size]
        diff = set(size).difference(_sizes)
        if len(diff) > 0:
            incorrect_values['size'] = (
                'sizes {sizes} are not valid. Sizes must be of the following: {size_list}'
                .format(sizes=diff, size_list=_sizes))
    if gender is not None:
        if isinstance(gender, str):
            gender = [gender]
        diff = set(gender).difference(_genders)
        if len(diff) > 0:
            incorrect_values['gender'] = (
                'genders {genders} are not valid. Genders must be of the following: {gender_list}'
                .format(genders=diff, gender_list=_genders))
    if age is not None:
        if isinstance(age, str):
            age = [age]
        diff = set(age).difference(_ages)
        if len(diff) > 0:
            incorrect_values['age'] = (
                'ages {age} are not valid. Ages must be of the following: {ages_list}'
                .format(age=diff, ages_list=_ages))
    if coat is not None:
        if isinstance(coat, str):
            coat = [coat]
        diff = set(coat).difference(_coats)
        if len(diff) > 0:
            incorrect_values['coat'] = (
                'coats {coats} are not valid. Coats must be of the following: {coat_list}'
                .format(coats=diff, coat_list=_coats))
    if status is not None and status not in _status:
        incorrect_values['status'] = (
            'animal status {status} is not valid. Status must be of the following: {statuses}'
            .format(status=status, statuses=_status))
    if sort is not None and sort not in _sort:
        incorrect_values['sort'
            ] = 'sort order {sort} must be one of: {sort_list}'.format(sort
            =sort, sort_list=_sort)
    if distance is not None:
        if not 0 <= int(distance) <= 500:
            incorrect_values['distance'
                ] = 'distance cannot be greater than 500 or less than 0.'
    if limit is not None:
        if int(limit) > 100:
            incorrect_values['limit'
                ] = 'results per page cannot be greater than 100'
    if len(incorrect_values) > 0:
        errors = ''
        for k, v in incorrect_values.items():
            errors = errors + v + '\n'
        raise ValueError(errors)
    return None
