---
title: "Search properties (v1)"
method: POST
path: "/api/v1/properties/search"
tags: ["api---properties"]
---

# Search properties (v1)

`POST /api/v1/properties/search`

## Request

- Base URL: `https://api.casafari.com`
- URL: `https://api.casafari.com/api/v1/properties/search`
- Auth: HTTP bearer

Search properties.

## Query parameters

- `limit` integer
- `offset` integer
- `order` 'asc' | 'desc'
- `order_by` 'price' | 'price_per_sqm' | 'total_area' | 'plot_area' | 'bedrooms' | 'construction_year' | 'last_update' | 'time_on_market'

## Request body

- ApiPropertiesSearchRequestV1
  - `search_operations` string[], required: Search business types for which the property is available.
  - `location_ids` integer[]: List of location IDs, as returned by the [POST /api/v1/references/locations](/#operation/api__post__v1__references__locations) endpoint.
  - `custom_location_boundary` object: Custom location to search within. Can be defined as a polygon of geo-points or a circle with a given target point and a distance. Only one value should be provided.
    - `polygon` object[]: Closed polygon of geo-points to search within. First and last points must match. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `polygons` field instead.</strong>
      - `latitude` number, required: Latitude.
      - `longitude` number, required: Longitude.
    - `circle` object: Circle boundary to search within.
      - `distance` number: Maximum distance in kilometers from the requested `target_point` to the properties.
      - `target_point` object, required: Target point to search around. Can be defined as coordinates, address or cadastral reference of the property. Only one value should be provided.
        - `coordinates` object: Target point coordinates to search around.
          - `latitude` number, required: Latitude.
          - `longitude` number, required: Longitude.
        - `address` string: Address of the property to define the point to search around.
        - `cadastral_reference` object: Cadastral reference of the property to define the point to search around. <br/>For now available only for Spain.
          - `country_code` 'ES', required: Country code following the ISO 3166-1 alpha-2 rules.
          - `cadastral_reference` string, required: Cadastral reference of the estate.
          - `province` string: Name of the estate's province.
          - `municipality` string: Name of the estate's municipality.
    - `polygons` array[]: List of closed polygons of geo-points to search within. Each polygon must contain at least 4 points. First and last points must match in each polygon. Maximum 4 polygons allowed.
      - object[]
        - `latitude` number, required: Latitude.
        - `longitude` number, required: Longitude.
  - `conditions` string[]: Property condition, as returned by the [GET /api/v1/references/conditions](/#operation/api__get__v1__references__conditions) endpoint.
  - `property_date_from` string, date: Start date (in the format `YYYY-MM-DD`) of the period for property of interest.
  - `property_date_to` string, date: End date (in the format `YYYY-MM-DD`) of the period for property of interest.
  - `created_date_from` string, date-time: Created date from (in the format `YYYY-MM-DDTHH:mm:ss`).
  - `created_date_to` string, date-time: Created date to (in the format `YYYY-MM-DDTHH:mm:ss`).
  - `updated_date_from` string, date-time: Updated date from (in the format `YYYY-MM-DDTHH:mm:ss`).
  - `updated_date_to` string, date-time: Updated date to (in the format `YYYY-MM-DDTHH:mm:ss`).
  - `price_from` integer: Minimum price value.
  - `price_to` integer: Maximum price value.
  - `price_per_sqm_from` integer: Minimum value for price per square meter.
  - `price_per_sqm_to` integer: Maximum value for price per square meter.
  - `bedrooms_from` integer: Minimum number of bedrooms.
  - `bedrooms_to` integer: Maximum number of bedrooms.
  - `bathrooms_from` integer: Minimum number of bathrooms.
  - `bathrooms_to` integer: Maximum number of bathrooms.
  - `total_area_from` integer: Minimum total area.
  - `total_area_to` integer: Maximum total area.
  - `plot_area_from` integer: Minimum plot area.
  - `plot_area_to` integer: Maximum plot area.
  - `construction_year_from` integer: Minimum construction year.
  - `construction_year_to` integer: Maximum construction year.
  - `floor` 'no_floor' | 'ground' | 'middle' | 'top': Floor type. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `floors` field instead.</strong>
  - `floors` string[]: List of floor types.
  - `orientation` 'exterior' | 'interior': Property view orientation.
  - `view` 'water' | 'landscape' | 'city' | 'golf' | 'park': View from the property. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `views` field instead.</strong>
  - `views` string[]: List of views from the property.
  - `direction` 'north' | 'south' | 'east' | 'west': Cardinal direction the property faces. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `directions` field instead.</strong>
  - `directions` string[]: List of cardinal directions the property faces.
  - `characteristics` object: Property characteristics.<br/><strong>The field was changed from Array of strings to object.</strong><br/><strong>Backwards compatibility is still supported.</strong>
    - `must_have` string[]: Include only properties that have all these characteristics.
    - `exclude` string[]: Exclude properties that contain any of these characteristics.
  - `types` string[]: <br>Country availability per type is available at the [GET /api/v1/references/types](/#operation/api__get__v1__references__types) endpoint.<br><br>Property types by type groups:<br/><strong>apartment:</strong> penthouse, dachgeschosswohnung, erdgeschosswohnung, apartment, etagenwohnung, studio, duplex<br/><strong>house:</strong> townhouse, reihenmittelhaus, landwirtschaftliche_betriebe, country_house, family_house (<span style="color:red">DEPRECATED</span>), villa, palace, chalet, zweifamilienhaus, country_estate, reihenendhaus, reihenhaus, bungalow, einfamilienhaus, house<br/><strong>room:</strong> room<br/><strong>building:</strong> office_building, apartment_building, mix_use_building<br/><strong>investment:</strong> retail, hotel, warehouse, office, restaurant, industrial, other_commercial, werkstatt<br/><strong>plot:</strong> rural_plot, urban_plot, plot (<span style="color:red">DEPRECATED</span>)<br/><strong>other:</strong> garage, other, parking
  - `property_types` string[]: Property types, as returned by the [GET /api/v1/references/types](/#operation/api__get__v1__references__types) endpoint.<br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `types` field instead.</strong>
  - `private` boolean: Whether to return properties listed by a private individual, as opposed to an agent or a professional.
  - `auction` boolean: Whether to return auction properties. (If the `bank` filter is also set, the result will contain both `auction` and `bank` properties)
  - `bank` boolean: Whether to return bank properties. (If the `auction` filter is also set, the result will contain both `bank` and `auction` properties)
  - `casafari_connect` boolean: Whether to return properties that have at least one listing with a company connected to Casafari Connect.
  - `listing_agents` string[]: Return properties from specified agents. To find allowed agent names use the [GET /api/v1/references/agents](/#operation/api__get__v1__references__agents) endpoint.
  - `with_agencies` string[]: Return properties from specified agencies, companies or sources. To find allowed agency names use the [GET /api/v1/references/agencies](/#operation/api__get__v1__references__agencies) endpoint.
  - `without_agencies` string[]: Exclude properties from specified agencies, companies or sources. To find allowed agency names use the [GET /api/v1/references/agencies](/#operation/api__get__v1__references__agencies) endpoint.
  - `exclusive` boolean: Whether to return properties that are available on market exclusively from a single agency or private individual.<br/>Can be passed only along with at least one of the fields: `private`, `with_agencies`, `without_agencies`.
  - `ref_numbers` string[]: List of reference numbers from listings.
  - `energy_certificate` 'Unknown' | 'A+' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H': Energy certificate. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `energy_ratings` field instead.</strong>
  - `energy_certificates` string[]: List of energy certificates. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `energy_ratings` field instead.</strong>
  - `energy_ratings` string[]: List of energy ratings.
  - `days_on_market_from` integer: Minimum days on market value.
  - `days_on_market_to` integer: Maximum days on market value.
  - `gross_yield_from` number: Minimum gross yield value.
  - `gross_yield_to` number: Maximum gross yield value.
  - `rooms_from` integer: Minimum number of rooms.
  - `rooms_to` integer: Maximum number of rooms.
  - `number_of_parkings_from` integer: Minimum number of parking spaces.
  - `number_of_parkings_to` integer: Maximum number of parking spaces.
  - `living_area_from` integer: Minimum living area.
  - `living_area_to` integer: Maximum living area.
  - `floor_numbers` integer[]: Desired list of floor numbers. Negative values indicate underground floors (e.g. basements).<br>Minimum value is -250.<br>Maximum value is 250.

## Response `200`

- object[]
  - `count` integer
  - `next` string, uri, nullable
  - `previous` string, uri, nullable
  - `results` ApiPropertiesSearchResponseV1
    - `property_id` integer, required: ID of the property.
    - `primary_listing_id` integer, required: Primary listing (ad) ID of the property which is defined after the matching into property.
    - `type` 'apartment' | 'studio' | 'duplex' | 'penthouse' | 'dachgeschosswohnung' | 'etagenwohnung' | 'erdgeschosswohnung' | 'country_house' | 'house' | 'palace' | 'townhouse' | 'villa' | 'country_estate' | 'chalet' | 'bungalow' | 'family_house' | 'reihenhaus' | 'reihenendhaus' | 'reihenmittelhaus' | 'einfamilienhaus' | 'zweifamilienhaus' | 'landwirtschaftliche_betriebe' | 'retail' | 'office' | 'industrial' | 'warehouse' | 'hotel' | 'other_commercial' | 'restaurant' | 'werkstatt' | 'plot' | 'urban_plot' | 'rural_plot' | 'room' | 'other' | 'garage' | 'parking' | 'apartment_building' | 'office_building' | 'mix_use_building', required: Property type, as returned by the [GET /api/v1/references/types](/#operation/api__get__v1__references__types) endpoint.
    - `type_group` string, required: Property type group, as returned by the [GET /api/v1/references/types](/#operation/api__get__v1__references__types) endpoint.
    - `operations` string[], required: Operation types for which property is available.
    - `location` object, required: Information about property location.
      - `location_id` integer, required: ('Location ID, as returned by the [POST /api/v1/references/locations](/#operation/api__post__v1__references__locations) endpoint.',)
      - `name` string, required: Location name.
      - `administrative_level` string, required: Location administrative level.
      - `zip_codes` string[]: The location zip codes.
    - `locations_structure` object[], required: Information about all the parent locations (including property location) up to the country.
      - `location_id` integer, required: ('Location ID, as returned by the [POST /api/v1/references/locations](/#operation/api__post__v1__references__locations) endpoint.',)
      - `name` string, required: Location name.
      - `administrative_level` string, required: Location administrative level.
      - `zip_codes` string[]: The location zip codes.
    - `coordinates` object, nullable, required: Property coordinates.
      - `latitude` number, required: Latitude.
      - `longitude` number, required: Longitude.
    - `total_area` integer, required: Total area.
    - `living_area` integer, required: Living area.
    - `plot_area` integer, required: Plot area.
    - `terrace_area` integer, required: Terrace area.
    - `bathrooms` integer, required: Number of bathrooms.
    - `bedrooms` integer, nullable, required: Number of bedrooms.
    - `rooms` integer, required: Number of rooms.
    - `number_of_parkings` integer, nullable: Number of parking spaces.
    - `floor_number` integer, nullable, required: Exact floor number. Negative values indicate underground floors (e.g. basements).
    - `rent_currency` string, required: Rent price currency code.
    - `rent_period` 'day' | 'week' | 'fortnight' | 'month' | 'year' | 'none', required: Rent period.
    - `rent_price` integer, required: Current rent price, in the currency of the listings (specified by the `rent_currency` field).
    - `rent_status` 'active' | 'reserved' | 'hold' | 'rented' | 'none', required: Current rent status of the property.
    - `sale_currency` string, required: Sale price currency code.
    - `sale_price` integer, required: Current sale price, in the currency of the listings (specified by the `sale_currency` field).
    - `sale_status` 'active' | 'reserved' | 'hold' | 'sold' | 'none', required: Current sale status of the property.
    - `is_private_property` boolean, required: Whether the property is listed by a private individual, as opposed to an agent or a professional.
    - `features` object, required: Property features, as returned by the [GET /api/v1/references/features](/#operation/api__get__v1__references__features) endpoint.
      - `floor` 'no_floor' | 'ground' | 'middle' | 'top', nullable, required: Floor type.
      - `orientation` 'exterior' | 'interior', nullable, required: Property view orientation.
      - `view` 'water' | 'landscape' | 'city' | 'golf' | 'park', nullable, required: View from the property. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `views` field instead.</strong>
      - `views` string[], nullable, required: List of views from the property.
      - `direction` 'north' | 'south' | 'east' | 'west', nullable, required: Cardinal direction the property faces. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `directions` field instead.</strong>
      - `directions` string[], nullable, required: List of cardinal directions the property faces.
      - `characteristics` string[], nullable, required: Property characteristics.
    - `condition` 'used' | 'ruin' | 'very-good' | 'new' | 'other', required: Property condition, as returned by the [GET /api/v1/references/conditions](/#operation/api__get__v1__references__conditions) endpoint.
    - `sale_time_on_market` object, nullable, required: Information about the property last activity on the sales market.
      - `date_start` string, date, required: Start date of activity on the market.
      - `date_end` string, date, nullable, required: End date of activity on the market.
      - `days_on_market` integer, required: Number of days property was / is on the market.
      - `has_untracked_period` boolean, required: Whether the property was already on the market when it started being tracked.
    - `rent_time_on_market` object, nullable, required: Information about the property last activity on the rental market.
      - `date_start` string, date, required: Start date of activity on the market.
      - `date_end` string, date, nullable, required: End date of activity on the market.
      - `days_on_market` integer, required: Number of days property was / is on the market.
      - `has_untracked_period` boolean, required: Whether the property was already on the market when it started being tracked.
    - `listings` object[], required: The list of listings related to the property.
      - `listing_id` integer, required: ID of the listing (ad).
      - `total_area` integer, required: Total area.
      - `plot_area` integer, required: Plot area.
      - `terrace_area` integer, required: Terrace area.
      - `bedrooms` integer, nullable, required: Number of bedrooms.
      - `bathrooms` integer, required: Number of bathrooms.
      - `rooms` integer, required: Number of rooms.
      - `sale_status` 'active' | 'reserved' | 'hold' | 'sold' | 'none', required: Current sale status of the listing.
      - `sale_currency` string, required: Sale price currency code.
      - `sale_price` integer, required: Current sale price, in the currency of the listing (specified by the `sale_currency` field).
      - `sale_price_base` integer, required: Current sale price, in Euros.
      - `rent_status` 'active' | 'reserved' | 'hold' | 'rented' | 'none', required: Current rent status of the listing.
      - `rent_currency` string, required: Rent price currency code.
      - `rent_price` integer, required: Current rent price, in the currency of the listing (specified by the `rent_currency` field).
      - `rent_price_base` integer, required: Current rent price, in Euros.
      - `agency_legal_id` string, required: Agency legal identifier specified on the source. Only for France and its overseas territories(DROM and COM).
      - `agency` string, required: The company that manages the listing.
      - `listing_url` string, nullable: URL of the listing. Available only for currently active listings.
      - `listing_old_url` string, nullable: Old URL of the listing. Available only for currently inactive listings.
      - `description` string, required: Property description.
      - `listing_uid` string, required: Unique ID of the listing on the source site.
      - `construction_year` integer, required: Construction year.
      - `source_name` string, required: The name of the source where the listing is displayed.
      - `contacts_info` object, required: Information about listing contacts.
        - `name` string, nullable, required: The owner name. Only for FSBO listings.
        - `email` string, email, nullable, required: The email contact.
        - `phone` string, nullable, required: The phone contact.
      - `energy_certificate` string, required: Energy certificate classification that attests to the energy efficiency of a property. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `energy_rating` field instead.</strong>
      - `energy_rating` string, required: Energy rating that attests to the energy efficiency of a property.
      - `heating_type` string, required: Type of heating.
      - `ceiling_label` string, nullable, required: Ceiling height in meters.<br><span style="color:red">Available only for Germany.</span>
      - `commission` number, nullable, required: Commission percentage.<br><span style="color:red">Available only for Germany.</span>
      - `min_rent_area` integer, nullable, required: Minimum rental area in square meters (mainly applicable to commercial properties).<br><span style="color:red">Available only for Germany.</span>
      - `companies` object[], required: Companies to which the listing belongs.
        - `name` string, required: Company name.
        - `casafari_connect_on` boolean, required: Whether the company is connected to Casafari Connect.
      - `created_at` string, date, required: The datetime when the listing was added.
      - `floor_number` integer, nullable, required: Exact floor number. Negative values indicate underground floors (e.g. basements).
      - `is_private` boolean, required: Whether the listing is listed by a private individual, as opposed to an agent or a professional.
      - `casafari_connect` boolean, nullable, required: Whether the company is connected to Casafari Connect.
      - `thumbnails` string[]: List of the thumbnail image URLs.
    - `history` object[]: ('List of sale and rent price history data. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `sale_price_history and rent_price_history` field instead.</strong>',)
      - `sale_price` integer, required: Sale price, in the currency of the listings (specified by the `sale_currency` field).
      - `sale_currency` string, required: Sale price currency code.
      - `rent_price` integer, required: Rent price, in the currency of the listings (specified by the `rent_currency` field).
      - `rent_currency` string, required: Rent price currency code.
      - `changed_at` string, date, required: Date when the estate was last updated.
    - `sale_price_history` object[]: List of sale price history data.
      - `date_start` string, date, required: Start date when the change was applied.
      - `date_end` string, date, required: End date when the change was applied.
      - `sale_price_old` integer, required: Old sale price, in the currency of the listings.
      - `sale_price_new` integer, required: New sale price, in the currency of the listings.
    - `rent_price_history` object[]: List of rent price history data.
      - `date_start` string, date, required: Start date when the change was applied.
      - `date_end` string, date, required: End date when the change was applied.
      - `rent_price_old` integer, required: Old rent price, in the currency of the listings.
      - `rent_price_new` integer, required: New rent price, in the currency of the listings.
    - `sale_status_history` object[]: List of sale status history data.
      - `date_start` string, date, required: Start date when the change was applied.
      - `date_end` string, date, required: End date when the change was applied.
      - `sale_status_old` string, required: Old sale status, in the currency of the listings.
      - `sale_status_new` string, required: New sale status, in the currency of the listings.
    - `rent_status_history` object[]: List of rent status history data.
      - `date_start` string, date, required: Start date when the change was applied.
      - `date_end` string, date, required: End date when the change was applied.
      - `rent_status_old` string, required: Old rent status, in the currency of the listings.
      - `rent_status_new` string, required: New rent status, in the currency of the listings.
    - `property_url` string, nullable: URL of the property in the CASAFARI website.
    - `address` string, required: Property address.
    - `zip_code` string, nullable, required: The location zip code.
    - `distance` number, nullable: Distance in kilometers from target point to the property.Available only when the `custom_location_boundary.circle` field is defined in the request.
    - `description` string, required: Property description.
    - `construction_year` integer, required: Construction year.
    - `rent_price_base` integer, required: Current rent price, in Euros.
    - `rent_price_per_sqm` number, required: Current rent price per square meter, in the currency of the listings (specified by the `rent_currency` field).
    - `rent_price_per_sqm_base` number, required: Current rent price per square meter, in Euros.
    - `sale_price_base` integer, required: Current sale price, in Euros.
    - `sale_price_per_sqm` number, required: Current sale price per square meter, in the currency of the listings (specified by the `sale_currency` field).
    - `sale_price_per_sqm_base` number, required: Current sale price per square meter, in Euros.
    - `is_auction_property` boolean, required: Whether the property is an auction property.
    - `is_bank_property` boolean, required: Whether the property is a bank property.
    - `changed_at` string, date, required: The date and time when the property was last updated.
    - `sale_price_last_change` object, nullable, required: Information about the last change of sale price.
      - `change_date` string, date, required: Date of the change.
      - `old_value` integer, required: Value before change.
      - `new_value` integer, required: Value after change.
    - `rent_price_last_change` object, nullable, required: Information about the last change of rent price.
      - `change_date` string, date, required: Date of the change.
      - `old_value` integer, required: Value before change.
      - `new_value` integer, required: Value after change.
    - `thumbnails` string[]: List of the thumbnail image URLs.
    - `pictures` string[]: List of the original picture image URLs.
    - `gross_yield` number, required: Gross yield in percentage.
    - `title` string, required: Property title.
    - `energy_certificate` string, required: Energy certificate classification that attests to the energy efficiency of a property. <br/><strong>This field is deprecated and will be removed in the next major update.</strong><br/><strong>Please, use `energy_rating` field instead.</strong>
    - `energy_rating` string, required: Energy rating that attests to the energy efficiency of a property.
    - `ceiling_label` string, nullable, required: Ceiling height in meters.<br><span style="color:red">Available only for Germany.</span>
    - `min_rent_area` integer, nullable, required: Minimum rental area in square meters (mainly applicable to commercial properties).<br><span style="color:red">Available only for Germany.</span>
    - `ref_numbers` string[]: List of reference numbers from listings.
    - `casafari_connect` boolean, nullable, required: Whether the company is connected to Casafari Connect.
    - `source_floor_numbers` integer[]: List of property floor numbers based on listings data. Negative values indicate underground floors (e.g. basements).
    - `retail_data` object, nullable: Retail-related attributes of the property. Null for non-commercial properties or if the retail data is not available.
      - `facade_measurements` object, nullable, required: Facade measurements of the commercial property (height, length, surface in meters).
        - `height` number, nullable, required: Facade height in meters.
        - `length` number, nullable, required: Facade length in meters.
        - `surface` number, nullable, required: Facade surface area in square meters.
      - `transfer_price_range` object, nullable, required: Price range if the property is available for transfer.
        - `gte` integer, nullable, required: Lower bound of the transfer price range.
        - `lte` integer, nullable, required: Upper bound of the transfer price range.
      - `is_street_level` boolean, nullable, required: Whether the commercial entrance is situated at the street level, without having to go upstairs/downstairs to reach it.
      - `number_of_floors` integer, nullable, required: The number of commercial property floors.
      - `number_of_premises` integer, nullable, required: The number of property usable rooms/premises.
      - `possible_business_types` string[], nullable, required: What kind of business can/did run in this commercial property (e.g. cafe, restaurant, grocery store, dental clinic).

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden

---

[API](https://skmtc.dev/casafari/apis/casafari-api.md) · [All operations](https://skmtc.dev/casafari/apis/casafari-api/llms.txt) · [OpenAPI document](https://skmtc.dev/casafari/apis/casafari-api/revisions/6743b99d4bf9?raw)
