Expanding

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.

Programming language

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

Expanding a property's assessment data
property_id and address are always selected by the properties endpoint. Expansion sets are included only when named in expand.
Request
Shell session
curl -X GET "https://api.houski.ca/properties?api_key=YOUR_API_KEY&city=calgary&country_abbreviation=ca&expand=assessments&province_abbreviation=ab"
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('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);
})();
Response
JSON
{
  "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"
  }
}