Many properties have extra data sets beyond the regular fields, such as an expansion set with assessment history.
Use the expand query parameter. For assessment data: ?expand=assessments
Specify multiple expansions with commas. For assessments and permits: ?expand=assessments,permits
The available expansions are assessments, listings, listings_rent, and permits. See each set's fields on the fields & expansions page.
Not all properties have every expansion set. A property with no records in a requested set has no key for that set, and a property whose records were all removed by expansion filters gets an empty array.
To return only properties that have an expansion set, filter on the matching boolean field: has_expand_listings, has_expand_listings_rent, has_expand_permits, or has_expand_assessments. For example, ?has_expand_permits_eq=true returns only properties with permit records. These are fast indexed filters on the property record itself, so they are much cheaper and faster than expanding a data set just to drop properties with empty arrays. See the filtering page for details.
Expanded rows cost $0.001 each. The rate is the same for every expansion set and does not depend on how many fields the nested row carries, so a whole listing or permit record costs the same as one field on the parent property. This is added to the per-field price of the properties themselves. See the pricing page.
Select the programming language you want to display the code examples in.
curl -X GET "https://api.houski.ca/properties?api_key=YOUR_API_KEY&city=calgary&country_abbreviation=ca&expand=assessments&province_abbreviation=ab"
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('city', 'calgary');
url.searchParams.set('country_abbreviation', 'ca');
url.searchParams.set('expand', 'assessments');
url.searchParams.set('province_abbreviation', 'ab');
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);
})();
{
"cache_hit": true,
"cost_cents": 1.82,
"data": [
{
"address": "518 Rochester Terrace NW",
"assessments": [
{
"expand_assessment_value": 1300000,
"expand_assessment_year": 2026,
"property_id": "103f92f6cf7bbdd9"
},
{
"expand_assessment_value": 297000,
"expand_assessment_year": 2024,
"property_id": "103f92f6cf7bbdd9"
},
{
"expand_assessment_value": 1320000,
"expand_assessment_year": 2025,
"property_id": "103f92f6cf7bbdd9"
}
],
"property_id": "103f92f6cf7bbdd9"
},
{
"address": "36 Crimson Ridge Heights NW",
"assessments": [
{
"expand_assessment_value": 194000,
"expand_assessment_year": 2026,
"property_id": "104fb85a9c002e5d"
},
{
"expand_assessment_value": 194000,
"expand_assessment_year": 2024,
"property_id": "104fb85a9c002e5d"
},
{
"expand_assessment_value": 194000,
"expand_assessment_year": 2025,
"property_id": "104fb85a9c002e5d"
}
],
"property_id": "104fb85a9c002e5d"
},
{
"address": "54 Rowmont Link NW",
"assessments": [
{
"expand_assessment_value": 853500,
"expand_assessment_year": 2026,
"property_id": "1055f97323e53f25"
},
{
"expand_assessment_value": 219500,
"expand_assessment_year": 2023,
"property_id": "1055f97323e53f25"
},
{
"expand_assessment_value": 776500,
"expand_assessment_year": 2024,
"property_id": "1055f97323e53f25"
},
{
"expand_assessment_value": 872500,
"expand_assessment_year": 2025,
"property_id": "1055f97323e53f25"
}
],
"property_id": "1055f97323e53f25"
},
{
"address": "499 Rochester Terrace NW",
"assessments": [
{
"expand_assessment_value": 888000,
"expand_assessment_year": 2026,
"property_id": "1106094a42c3757d"
},
{
"expand_assessment_value": 451000,
"expand_assessment_year": 2024,
"property_id": "1106094a42c3757d"
},
{
"expand_assessment_value": 910000,
"expand_assessment_year": 2025,
"property_id": "1106094a42c3757d"
}
],
"property_id": "1106094a42c3757d"
},
{
"address": "304 30 Rochester View NW",
"assessments": [
{
"expand_assessment_value": 105000,
"expand_assessment_year": 2026,
"property_id": "1198b011e799062c"
}
],
"property_id": "1198b011e799062c"
},
{
"address": "95 Royston He NW",
"assessments": [
{
"expand_assessment_value": 918500,
"expand_assessment_year": 2026,
"property_id": "11aa161875771a70"
},
{
"expand_assessment_value": 432000,
"expand_assessment_year": 2024,
"property_id": "11aa161875771a70"
},
{
"expand_assessment_value": 941000,
"expand_assessment_year": 2025,
"property_id": "11aa161875771a70"
}
],
"property_id": "11aa161875771a70"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 110113
},
"price_quote": false,
"result_total": 660677,
"time_ms": 3321,
"ui_info": {
"city": "Calgary",
"city_id": "6ec95b53075d062c",
"city_link": "ca/ab/calgary",
"city_slug": "calgary",
"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"
}
}