"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from datetime import date
from enum import Enum
import pydantic
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
from zillow_rapidapi_client.types import BaseModel
from zillow_rapidapi_client.utils import FieldMetadata, QueryParamMetadata


class StatusType(str, Enum):
    r"""Property status type."""

    FOR_SALE = "ForSale"
    RECENTLY_SOLD = "RecentlySold"
    FOR_RENT = "ForRent"


class HomeType(str, Enum):
    r"""Property type. Comma-separated list."""

    HOUSES = "Houses"
    APARTMENTS_CONDOS_CO_OPS = "Apartments_Condos_Co-ops"
    MULTI_FAMILY = "Multi-family"
    APARTMENTS = "Apartments"
    MANUFACTURED = "Manufactured"
    CONDOS = "Condos"
    LOTS_LAND = "LotsLand"
    TOWNHOMES = "Townhomes"


class Sort(str, Enum):
    r"""Sorting order."""

    HOMES_FOR_YOU = "Homes_for_You"
    PRICE_HIGH_LOW = "Price_High_Low"
    PRICE_LOW_HIGH = "Price_Low_High"
    NEWEST = "Newest"
    BEDROOMS = "Bedrooms"
    BATHROOMS = "Bathrooms"
    SQUARE_FEET = "Square_Feet"
    LOT_SIZE = "Lot_Size"


class DaysOn(str, Enum):
    r"""Days on Z. Use with status_type='ForSale' or status_type='ForRent'."""

    ONE = "1"
    SEVEN = "7"
    FOURTEEN = "14"
    THIRTY = "30"
    NINETY = "90"
    SIXM = "6m"
    TWELVEM = "12m"
    TWENTY_FOURM = "24m"
    THIRTY_SIXM = "36m"


class SoldInLast(str, Enum):
    r"""Sold in the last. Use with status_type='RecentlySold'."""

    ONE = "1"
    SEVEN = "7"
    FOURTEEN = "14"
    THIRTY = "30"
    NINETY = "90"
    SIXM = "6m"
    TWELVEM = "12m"
    TWENTY_FOURM = "24m"
    THIRTY_SIXM = "36m"


class LotSizeMin(str, Enum):
    r"""Minimum lot size."""

    ONE_000_SQFT = "1,000 sqft"
    TWO_000_SQFT = "2,000 sqft"
    THREE_000_SQFT = "3,000 sqft"
    FOUR_000_SQFT = "4,000 sqft"
    FIVE_000_SQFT = "5,000 sqft"
    SEVEN_500_SQFT = "7,500 sqft"
    ONE_4_ACRE_10_890_SQFT = "1/4 acre/10,890 sqft"
    ONE_2_ACRE_21_780_SQFT = "1/2 acre/21,780 sqft"
    ONE_ACRE_43_560_SQFT = "1 acre/43,560 sqft"


class LotSizeMax(str, Enum):
    r"""Maximum lot size."""

    ONE_000_SQFT = "1,000 sqft"
    TWO_000_SQFT = "2,000 sqft"
    THREE_000_SQFT = "3,000 sqft"
    FOUR_000_SQFT = "4,000 sqft"
    FIVE_000_SQFT = "5,000 sqft"
    SEVEN_500_SQFT = "7,500 sqft"
    ONE_4_ACRE_10_890_SQFT = "1/4 acre/10,890 sqft"
    ONE_2_ACRE_21_780_SQFT = "1/2 acre/21,780 sqft"
    ONE_ACRE_43_560_SQFT = "1 acre/43,560 sqft"
    TWO_ACRES_87_120_SQFT = "2 acres/87,120 sqft"
    FIVE_ACRES_217_800_SQFT = "5 acres/217,800 sqft"
    TEN_ACRES_435_600_SQFT = "10 acres/435,600 sqft"
    TWENTY_ACRES_871_200_SQFT = "20 acres/871,200 sqft"
    FIFTY_ACRES_2_178_000_SQFT = "50 acres/2,178,000 sqft"
    ONE_HUNDRED_ACRES_4_356_000_SQFT = "100 acres/4,356,000 sqft"


class PropertyExtendedSearchRequestTypedDict(TypedDict):
    location: NotRequired[str]
    r"""Location details (address, county, neighborhood, or Zip code). Required if
    polygon or coordinates are empty.

    """
    page: NotRequired[int]
    r"""Page number for paginated results. Max value is 20."""
    status_type: NotRequired[StatusType]
    r"""Property status type."""
    home_type: NotRequired[HomeType]
    r"""Property type. Comma-separated list."""
    sort: NotRequired[Sort]
    r"""Sorting order."""
    polygon: NotRequired[str]
    r"""Polygon coordinates in the format: lon lat,lon1 lat1,lon2 lat2. It is
    required if the location or coordinates are empty. The last pair must be the
    same as the first pair.

    """
    min_price: NotRequired[float]
    r"""Minimum price filter."""
    max_price: NotRequired[float]
    r"""Maximum price filter."""
    rent_min_price: NotRequired[float]
    r"""Minimum rent price filter (if status_type = ForRent)."""
    rent_max_price: NotRequired[float]
    r"""Maximum rent price filter (if status_type = ForRent)."""
    baths_min: NotRequired[float]
    r"""Bathrooms min count."""
    baths_max: NotRequired[float]
    r"""Bathrooms max count."""
    beds_min: NotRequired[float]
    r"""Bedrooms min count."""
    beds_max: NotRequired[float]
    r"""Bedrooms max count."""
    sqft_min: NotRequired[float]
    r"""Square Feet min value."""
    sqft_max: NotRequired[float]
    r"""Square Feet max value."""
    build_year_min: NotRequired[float]
    r"""Year Built min value."""
    build_year_max: NotRequired[float]
    r"""Year Built max value."""
    days_on: NotRequired[DaysOn]
    r"""Days on Z. Use with status_type='ForSale' or status_type='ForRent'.

    """
    sold_in_last: NotRequired[SoldInLast]
    r"""Sold in the last. Use with status_type='RecentlySold'.

    """
    is_basement_finished: NotRequired[float]
    r"""Basement filter. Set it to 1 if needed."""
    is_basement_unfinished: NotRequired[float]
    r"""Basement filter. Set it to 1 if needed."""
    is_pending_under_contract: NotRequired[float]
    r"""Pending & Under Contract filter. Set it to 1 if needed."""
    is_accepting_backup_offers: NotRequired[float]
    r"""Accepting Backup Offers filter. Set it to 1 if needed."""
    is_coming_soon: NotRequired[bool]
    r"""Coming Soon listings are homes that will soon be on the market. Set it to 1
    if needed.

    """
    other_listings: NotRequired[bool]
    r"""If set to 1, the results will only include data from the Other Listings tab.

    """
    is_new_construction: NotRequired[bool]
    r"""New Construction filter. Set it to 1 or true if you only need properties
    with New Construction status.

    """
    keywords: NotRequired[str]
    r"""Keywords filter for property search."""
    lot_size_min: NotRequired[LotSizeMin]
    r"""Minimum lot size."""
    lot_size_max: NotRequired[LotSizeMax]
    r"""Maximum lot size."""
    sale_by_agent: NotRequired[str]
    r"""Default - true. To get FSBO set
    saleByAgent=false&saleByOwner=true&otherListings=true.

    """
    sale_by_owner: NotRequired[str]
    r"""Default - true. To get only FSBO set
    saleByAgent=false&saleByOwner=true&otherListings=true.

    """
    is_for_sale_foreclosure: NotRequired[bool]
    r"""If you only need to get ForSaleForeclosure set to true or 1."""
    is_waterfront: NotRequired[bool]
    has_pool: NotRequired[bool]
    has_air_conditioning: NotRequired[bool]
    is_city_view: NotRequired[bool]
    is_mountain_view: NotRequired[bool]
    is_water_view: NotRequired[bool]
    is_park_view: NotRequired[bool]
    is_open_houses_only: NotRequired[bool]
    r"""Must have open house."""
    is3d_home: NotRequired[bool]
    r"""Must have 3D Tour."""
    coordinates: NotRequired[str]
    r"""It is required if the location or polygon is empty.
    Format: lon lat,diameter. Diameter in miles from 1 to 99 -118.51750373840332
    34.007063913440916,20

    """
    hoa: NotRequired[float]
    r"""Max HOA."""
    include_homes_with_no_hoa_data: NotRequired[bool]
    r"""Default - true."""
    is_auction: NotRequired[bool]
    r"""Auctions. Default true."""
    schools: NotRequired[str]
    r"""Available values: elementary, public, private, middle, charter, high
    For multiple selection, separate with comma: middle,high

    """
    schools_rating: NotRequired[str]
    r"""Min school ratings. From 1 to 10."""
    include_unrated_schools: NotRequired[bool]
    r"""Include schools with no rating."""
    has_garage: NotRequired[bool]
    r"""Must have a garage. Default value false."""
    parking_spots: NotRequired[float]
    r"""Parking Spots. Max value - 4."""
    is_foreclosed: NotRequired[bool]
    is_pre_foreclosure: NotRequired[bool]
    is_entire_place: NotRequired[bool]
    r"""Default - true. Apply when status_type = 'ForRent'. Set it to false if you
    need only a room.

    """
    is_room: NotRequired[bool]
    r"""Default - false. Apply when status_type = 'ForRent'. Set it true and
    isEntirePlace to false if you need only a room.

    """
    large_dogs_allowed: NotRequired[bool]
    r"""Allows large dogs. Only For Rent."""
    small_dogs_allowed: NotRequired[bool]
    r"""Allows small dogs. Only For Rent."""
    cats_allowed: NotRequired[bool]
    r"""Allows cats. Only For Rent."""
    no_pets: NotRequired[bool]
    r"""No pets. Only For Rent."""
    move_in_date: NotRequired[date]
    r"""Move-in Date. Only For Rent."""
    parking_available: NotRequired[bool]
    r"""On-site Parking. Only For Rent."""
    in_unit_laundry: NotRequired[bool]
    r"""In-unit Laundry. Only For Rent."""
    accepts_applications: NotRequired[bool]
    r"""Accepts Zillow Applications. Only For Rent."""
    income_restricted: NotRequired[bool]
    r"""Income restricted. Only For Rent."""
    hardwood_floor: NotRequired[bool]
    r"""Hardwood Floors. Only For Rent."""
    disabled_access: NotRequired[bool]
    r"""Disabled Access. Only For Rent."""
    utilities_included: NotRequired[bool]
    r"""Utilities Included. Only For Rent."""
    short_term_lease: NotRequired[bool]
    r"""Short term lease available. Only For Rent."""
    furnished: NotRequired[bool]
    r"""Furnished. Only For Rent."""
    outdoor_space: NotRequired[bool]
    r"""Outdoor space. Only For Rent."""
    controlled_access: NotRequired[bool]
    r"""Controlled access. Only For Rent."""
    high_speed_internet: NotRequired[bool]
    r"""High speed internet. Only For Rent."""
    elevator: NotRequired[bool]
    r"""Elevator. Only For Rent."""
    multi_family_building: NotRequired[bool]
    r"""Apartment Community. Only For Rent."""


class PropertyExtendedSearchRequest(BaseModel):
    location: Annotated[
        Optional[str],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Location details (address, county, neighborhood, or Zip code). Required if
    polygon or coordinates are empty.

    """

    page: Annotated[
        Optional[int],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Page number for paginated results. Max value is 20."""

    status_type: Annotated[
        Optional[StatusType],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Property status type."""

    home_type: Annotated[
        Optional[HomeType],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Property type. Comma-separated list."""

    sort: Annotated[
        Optional[Sort],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Sorting order."""

    polygon: Annotated[
        Optional[str],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Polygon coordinates in the format: lon lat,lon1 lat1,lon2 lat2. It is
    required if the location or coordinates are empty. The last pair must be the
    same as the first pair.

    """

    min_price: Annotated[
        Optional[float],
        pydantic.Field(alias="minPrice"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Minimum price filter."""

    max_price: Annotated[
        Optional[float],
        pydantic.Field(alias="maxPrice"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Maximum price filter."""

    rent_min_price: Annotated[
        Optional[float],
        pydantic.Field(alias="rentMinPrice"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Minimum rent price filter (if status_type = ForRent)."""

    rent_max_price: Annotated[
        Optional[float],
        pydantic.Field(alias="rentMaxPrice"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Maximum rent price filter (if status_type = ForRent)."""

    baths_min: Annotated[
        Optional[float],
        pydantic.Field(alias="bathsMin"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Bathrooms min count."""

    baths_max: Annotated[
        Optional[float],
        pydantic.Field(alias="bathsMax"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Bathrooms max count."""

    beds_min: Annotated[
        Optional[float],
        pydantic.Field(alias="bedsMin"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Bedrooms min count."""

    beds_max: Annotated[
        Optional[float],
        pydantic.Field(alias="bedsMax"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Bedrooms max count."""

    sqft_min: Annotated[
        Optional[float],
        pydantic.Field(alias="sqftMin"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Square Feet min value."""

    sqft_max: Annotated[
        Optional[float],
        pydantic.Field(alias="sqftMax"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Square Feet max value."""

    build_year_min: Annotated[
        Optional[float],
        pydantic.Field(alias="buildYearMin"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Year Built min value."""

    build_year_max: Annotated[
        Optional[float],
        pydantic.Field(alias="buildYearMax"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Year Built max value."""

    days_on: Annotated[
        Optional[DaysOn],
        pydantic.Field(alias="daysOn"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Days on Z. Use with status_type='ForSale' or status_type='ForRent'.

    """

    sold_in_last: Annotated[
        Optional[SoldInLast],
        pydantic.Field(alias="soldInLast"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Sold in the last. Use with status_type='RecentlySold'.

    """

    is_basement_finished: Annotated[
        Optional[float],
        pydantic.Field(alias="isBasementFinished"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Basement filter. Set it to 1 if needed."""

    is_basement_unfinished: Annotated[
        Optional[float],
        pydantic.Field(alias="isBasementUnfinished"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Basement filter. Set it to 1 if needed."""

    is_pending_under_contract: Annotated[
        Optional[float],
        pydantic.Field(alias="isPendingUnderContract"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Pending & Under Contract filter. Set it to 1 if needed."""

    is_accepting_backup_offers: Annotated[
        Optional[float],
        pydantic.Field(alias="isAcceptingBackupOffers"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Accepting Backup Offers filter. Set it to 1 if needed."""

    is_coming_soon: Annotated[
        Optional[bool],
        pydantic.Field(alias="isComingSoon"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Coming Soon listings are homes that will soon be on the market. Set it to 1
    if needed.

    """

    other_listings: Annotated[
        Optional[bool],
        pydantic.Field(alias="otherListings"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""If set to 1, the results will only include data from the Other Listings tab.

    """

    is_new_construction: Annotated[
        Optional[bool],
        pydantic.Field(alias="isNewConstruction"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""New Construction filter. Set it to 1 or true if you only need properties
    with New Construction status.

    """

    keywords: Annotated[
        Optional[str],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Keywords filter for property search."""

    lot_size_min: Annotated[
        Optional[LotSizeMin],
        pydantic.Field(alias="lotSizeMin"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Minimum lot size."""

    lot_size_max: Annotated[
        Optional[LotSizeMax],
        pydantic.Field(alias="lotSizeMax"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Maximum lot size."""

    sale_by_agent: Annotated[
        Optional[str],
        pydantic.Field(alias="saleByAgent"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Default - true. To get FSBO set
    saleByAgent=false&saleByOwner=true&otherListings=true.

    """

    sale_by_owner: Annotated[
        Optional[str],
        pydantic.Field(alias="saleByOwner"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Default - true. To get only FSBO set
    saleByAgent=false&saleByOwner=true&otherListings=true.

    """

    is_for_sale_foreclosure: Annotated[
        Optional[bool],
        pydantic.Field(alias="isForSaleForeclosure"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""If you only need to get ForSaleForeclosure set to true or 1."""

    is_waterfront: Annotated[
        Optional[bool],
        pydantic.Field(alias="isWaterfront"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    has_pool: Annotated[
        Optional[bool],
        pydantic.Field(alias="hasPool"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    has_air_conditioning: Annotated[
        Optional[bool],
        pydantic.Field(alias="hasAirConditioning"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    is_city_view: Annotated[
        Optional[bool],
        pydantic.Field(alias="isCityView"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    is_mountain_view: Annotated[
        Optional[bool],
        pydantic.Field(alias="isMountainView"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    is_water_view: Annotated[
        Optional[bool],
        pydantic.Field(alias="isWaterView"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    is_park_view: Annotated[
        Optional[bool],
        pydantic.Field(alias="isParkView"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    is_open_houses_only: Annotated[
        Optional[bool],
        pydantic.Field(alias="isOpenHousesOnly"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Must have open house."""

    is3d_home: Annotated[
        Optional[bool],
        pydantic.Field(alias="is3dHome"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Must have 3D Tour."""

    coordinates: Annotated[
        Optional[str],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""It is required if the location or polygon is empty.
    Format: lon lat,diameter. Diameter in miles from 1 to 99 -118.51750373840332
    34.007063913440916,20

    """

    hoa: Annotated[
        Optional[float],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Max HOA."""

    include_homes_with_no_hoa_data: Annotated[
        Optional[bool],
        pydantic.Field(alias="includeHomesWithNoHoaData"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Default - true."""

    is_auction: Annotated[
        Optional[bool],
        pydantic.Field(alias="isAuction"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Auctions. Default true."""

    schools: Annotated[
        Optional[str],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Available values: elementary, public, private, middle, charter, high
    For multiple selection, separate with comma: middle,high

    """

    schools_rating: Annotated[
        Optional[str],
        pydantic.Field(alias="schoolsRating"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Min school ratings. From 1 to 10."""

    include_unrated_schools: Annotated[
        Optional[bool],
        pydantic.Field(alias="includeUnratedSchools"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Include schools with no rating."""

    has_garage: Annotated[
        Optional[bool],
        pydantic.Field(alias="hasGarage"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Must have a garage. Default value false."""

    parking_spots: Annotated[
        Optional[float],
        pydantic.Field(alias="parkingSpots"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Parking Spots. Max value - 4."""

    is_foreclosed: Annotated[
        Optional[bool],
        pydantic.Field(alias="isForeclosed"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    is_pre_foreclosure: Annotated[
        Optional[bool],
        pydantic.Field(alias="isPreForeclosure"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None

    is_entire_place: Annotated[
        Optional[bool],
        pydantic.Field(alias="isEntirePlace"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Default - true. Apply when status_type = 'ForRent'. Set it to false if you
    need only a room.

    """

    is_room: Annotated[
        Optional[bool],
        pydantic.Field(alias="isRoom"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Default - false. Apply when status_type = 'ForRent'. Set it true and
    isEntirePlace to false if you need only a room.

    """

    large_dogs_allowed: Annotated[
        Optional[bool],
        pydantic.Field(alias="largeDogsAllowed"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Allows large dogs. Only For Rent."""

    small_dogs_allowed: Annotated[
        Optional[bool],
        pydantic.Field(alias="smallDogsAllowed"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Allows small dogs. Only For Rent."""

    cats_allowed: Annotated[
        Optional[bool],
        pydantic.Field(alias="catsAllowed"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Allows cats. Only For Rent."""

    no_pets: Annotated[
        Optional[bool],
        pydantic.Field(alias="noPets"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""No pets. Only For Rent."""

    move_in_date: Annotated[
        Optional[date],
        pydantic.Field(alias="moveInDate"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Move-in Date. Only For Rent."""

    parking_available: Annotated[
        Optional[bool],
        pydantic.Field(alias="parkingAvailable"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""On-site Parking. Only For Rent."""

    in_unit_laundry: Annotated[
        Optional[bool],
        pydantic.Field(alias="inUnitLaundry"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""In-unit Laundry. Only For Rent."""

    accepts_applications: Annotated[
        Optional[bool],
        pydantic.Field(alias="acceptsApplications"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Accepts Zillow Applications. Only For Rent."""

    income_restricted: Annotated[
        Optional[bool],
        pydantic.Field(alias="incomeRestricted"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Income restricted. Only For Rent."""

    hardwood_floor: Annotated[
        Optional[bool],
        pydantic.Field(alias="hardwoodFloor"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Hardwood Floors. Only For Rent."""

    disabled_access: Annotated[
        Optional[bool],
        pydantic.Field(alias="disabledAccess"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Disabled Access. Only For Rent."""

    utilities_included: Annotated[
        Optional[bool],
        pydantic.Field(alias="utilitiesIncluded"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Utilities Included. Only For Rent."""

    short_term_lease: Annotated[
        Optional[bool],
        pydantic.Field(alias="shortTermLease"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Short term lease available. Only For Rent."""

    furnished: Annotated[
        Optional[bool],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Furnished. Only For Rent."""

    outdoor_space: Annotated[
        Optional[bool],
        pydantic.Field(alias="outdoorSpace"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Outdoor space. Only For Rent."""

    controlled_access: Annotated[
        Optional[bool],
        pydantic.Field(alias="controlledAccess"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Controlled access. Only For Rent."""

    high_speed_internet: Annotated[
        Optional[bool],
        pydantic.Field(alias="highSpeedInternet"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""High speed internet. Only For Rent."""

    elevator: Annotated[
        Optional[bool],
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Elevator. Only For Rent."""

    multi_family_building: Annotated[
        Optional[bool],
        pydantic.Field(alias="multiFamilyBuilding"),
        FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
    ] = None
    r"""Apartment Community. Only For Rent."""
