Filtering

Most of the endpoints on the Houski API allow you to filter the data returned by the API, by virtually any field. You can also filter properties geographically by specifying a bounding box, or polygon (scroll down on this page for examples).

Filtering is performed by adding query parameters to the request URL. For example, to filter the properties returned by the properties endpoint by the number of full bathrooms, you could do any of the following:

FilterNameExample
Greater thangtbathroom_full_gt=3
Greater than or equal togtebathroom_full_gte=3
Less thanltbathroom_full_lt=3
Less than or equal toltebathroom_full_lte=3
Equal toeqbathroom_full_eq=3
Not equal toneqbathroom_full_neq=3
In the given listinproperty_type_in=House,Apartment
Matches a regular expressionregexbathroom_full_regex=1|3
Does not match a regular expressionnregexbathroom_full_nregex=1|3
Programming language

Select the programming language you want to display the code examples in.

Filtering by number of bedrooms
Request
Shell session
curl -X GET "https://api.houski.ca/properties?api_key=YOUR_API_KEY&bedroom_eq=3&country_abbreviation=ca&province_abbreviation=ab&results_per_page=3&select=bedroom,den,estimate_list_price,latitude,longitude"
TypeScript code
const houski_properties_data = async (): Promise<PropertiesResponse> => {

    // You must copy the PropertiesResponse type declarations from the 
    // Houski API documentation to strongly type the response

    const url = new URL('https://api.houski.ca/properties');
    url.searchParams.set('api_key', 'YOUR_API_KEY');
    url.searchParams.set('bedroom_eq', '3');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('province_abbreviation', 'ab');
    url.searchParams.set('results_per_page', '3');
    url.searchParams.set('select', 'bedroom,den,estimate_list_price,latitude,longitude');

    const response = await fetch(url);
    const data = await response.json();

    return data;
}

(async () => {
let data: PropertiesResponse = await houski_properties_data();

// Log the response
console.log(data);
})();
Response
JSON
{
  "cache_hit": false,
  "cost_cents": 2.1000001430511475,
  "data": [
    {
      "address": "834 Applewood Drive SE",
      "bedroom": 3,
      "den": 2,
      "estimate_list_price": 550330,
      "latitude": 51.04966354370117,
      "longitude": -113.92732238769533,
      "property_id": "83ec4220f6409712"
    },
    {
      "address": "29 6020 Temple Drive NE",
      "bedroom": 3,
      "den": 2,
      "estimate_list_price": 321273,
      "latitude": 51.085689544677734,
      "longitude": -113.94725036621094,
      "property_id": "8f7adcb41ff38858"
    },
    {
      "address": "601 9930 Bonaventure Drive SE",
      "bedroom": 3,
      "den": 0,
      "estimate_list_price": 433938,
      "latitude": 50.962799072265625,
      "longitude": -114.06729125976562,
      "property_id": "3683649433dd5480"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 414233
  },
  "price_quote": false,
  "result_total": 1242697,
  "time_ms": 99,
  "ui_info": {
    "country": "Canada",
    "country_abbreviation": "CA",
    "country_abbreviation_id": "9ace2b6431b7f1be",
    "country_abbreviation_link": "ca",
    "country_slug": "canada",
    "province": "Alberta",
    "province_abbreviation": "AB",
    "province_abbreviation_id": "aae1f05a0f89d2c7",
    "province_abbreviation_link": "ca/ab",
    "province_slug": "alberta"
  }
}
Filtering by a bounding box

A bounding box is a rectangular geographic region defined by two points: the northeast and southwest corners. The northeast corner is defined by the latitude and longitude of the top right corner of the box, and the southwest corner is defined by the latitude and longitude of the bottom left corner of the box.

These bounding box parameters can be used to filter requests. When used, requests will only include the properties that are located within the bounding box.

Request
Shell session
curl -X GET "https://api.houski.ca/properties?api_key=YOUR_API_KEY&bbox_ne_lat=51.1005&bbox_ne_lng=-113.508&bbox_sw_lat=50.6668&bbox_sw_lng=-114.4593&country_abbreviation=ca&province_abbreviation=ab&results_per_page=3&select=bedroom,den,estimate_list_price,latitude,longitude"
TypeScript code
const houski_properties_data = async (): Promise<PropertiesResponse> => {

    // You must copy the PropertiesResponse type declarations from the 
    // Houski API documentation to strongly type the response

    const url = new URL('https://api.houski.ca/properties');
    url.searchParams.set('api_key', 'YOUR_API_KEY');
    url.searchParams.set('bbox_ne_lat', '51.1005');
    url.searchParams.set('bbox_ne_lng', '-113.508');
    url.searchParams.set('bbox_sw_lat', '50.6668');
    url.searchParams.set('bbox_sw_lng', '-114.4593');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('province_abbreviation', 'ab');
    url.searchParams.set('results_per_page', '3');
    url.searchParams.set('select', 'bedroom,den,estimate_list_price,latitude,longitude');

    const response = await fetch(url);
    const data = await response.json();

    return data;
}

(async () => {
let data: PropertiesResponse = await houski_properties_data();

// Log the response
console.log(data);
})();
Response
JSON
{
  "cache_hit": false,
  "cost_cents": 2.1000001430511475,
  "data": [
    {
      "address": "834 Applewood Drive SE",
      "bedroom": 3,
      "den": 2,
      "estimate_list_price": 550330,
      "latitude": 51.04966354370117,
      "longitude": -113.92732238769533,
      "property_id": "83ec4220f6409712"
    },
    {
      "address": "29 6020 Temple Drive NE",
      "bedroom": 3,
      "den": 2,
      "estimate_list_price": 321273,
      "latitude": 51.085689544677734,
      "longitude": -113.94725036621094,
      "property_id": "8f7adcb41ff38858"
    },
    {
      "address": "601 9930 Bonaventure Drive SE",
      "bedroom": 3,
      "den": 0,
      "estimate_list_price": 433938,
      "latitude": 50.962799072265625,
      "longitude": -114.06729125976562,
      "property_id": "3683649433dd5480"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 131169
  },
  "price_quote": false,
  "result_total": 393506,
  "time_ms": 159,
  "ui_info": {
    "country": "Canada",
    "country_abbreviation": "CA",
    "country_abbreviation_id": "9ace2b6431b7f1be",
    "country_abbreviation_link": "ca",
    "country_slug": "canada",
    "province": "Alberta",
    "province_abbreviation": "AB",
    "province_abbreviation_id": "aae1f05a0f89d2c7",
    "province_abbreviation_link": "ca/ab",
    "province_slug": "alberta"
  }
}
Filtering by a polygon

A polygon is a geometric shape defined by a set of ordered points connected by straight lines. The polygon is defined by a set of latitude and longitude coordinates that create an arbitrary shape.

When using the polygon parameter in a request, only properties within the polygon will be returned.

The polygon parameter requires a string of latitude-longitude pairs that are separated by underscores, with each pair separated by a comma.

Request
Shell session
curl -X GET "https://api.houski.ca/properties?api_key=YOUR_API_KEY&country_abbreviation=ca&polygon=51.0447_-114.0719,51.0544_-114.0719,51.0544_-114.0856,51.0452_-114.0856&province_abbreviation=ab&results_per_page=3&select=bedroom,den,estimate_list_price,latitude,longitude"
TypeScript code
const houski_properties_data = async (): Promise<PropertiesResponse> => {

    // You must copy the PropertiesResponse type declarations from the 
    // Houski API documentation to strongly type the response

    const url = new URL('https://api.houski.ca/properties');
    url.searchParams.set('api_key', 'YOUR_API_KEY');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('polygon', '51.0447_-114.0719,51.0544_-114.0719,51.0544_-114.0856,51.0452_-114.0856');
    url.searchParams.set('province_abbreviation', 'ab');
    url.searchParams.set('results_per_page', '3');
    url.searchParams.set('select', 'bedroom,den,estimate_list_price,latitude,longitude');

    const response = await fetch(url);
    const data = await response.json();

    return data;
}

(async () => {
let data: PropertiesResponse = await houski_properties_data();

// Log the response
console.log(data);
})();
Response
JSON
{
  "cache_hit": false,
  "cost_cents": 2.1000001430511475,
  "data": [
    {
      "address": "130 10 Street NW",
      "bedroom": 3,
      "den": 0,
      "estimate_list_price": 3156191,
      "latitude": 51.053070068359375,
      "longitude": -114.0854721069336,
      "property_id": "7a0649bad4032e66"
    },
    {
      "address": "903 801 2 Avenue SW",
      "bedroom": 3,
      "den": 0,
      "estimate_list_price": 669513,
      "latitude": 51.051414489746094,
      "longitude": -114.07894897460938,
      "property_id": "75867e673b8e6cab"
    },
    {
      "address": "2103 1078 6 Avenue SW",
      "bedroom": 1,
      "den": 0,
      "estimate_list_price": 465941,
      "latitude": 51.04834747314453,
      "longitude": -114.0847396850586,
      "property_id": "c480b59b433c4b63"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 1506
  },
  "price_quote": false,
  "result_total": 4516,
  "time_ms": 479,
  "ui_info": {
    "country": "Canada",
    "country_abbreviation": "CA",
    "country_abbreviation_id": "9ace2b6431b7f1be",
    "country_abbreviation_link": "ca",
    "country_slug": "canada",
    "province": "Alberta",
    "province_abbreviation": "AB",
    "province_abbreviation_id": "aae1f05a0f89d2c7",
    "province_abbreviation_link": "ca/ab",
    "province_slug": "alberta"
  }
}