Practical examples for using the Houski API.
Select the programming language you want to display the code examples in.
curl -X GET "http://127.0.0.1:8080/properties?api_key=YOUR_API_KEY&city=calgary&country_abbreviation=ca&expand=permits&expand_permit_application_date_gt=2026-04-01&expand_permit_content_regex=(?i)\b(secondary|suite)\b&filter_expand_match=all&page=1&province_abbreviation=ab&results_per_page=3"
const houski_recipe_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('http://127.0.0.1:8080/properties');
url.searchParams.set('api_key', 'YOUR_API_KEY');
url.searchParams.set('city', 'calgary');
url.searchParams.set('country_abbreviation', 'ca');
url.searchParams.set('expand', 'permits');
url.searchParams.set('expand_permit_application_date_gt', '2026-04-01');
url.searchParams.set('expand_permit_content_regex', '(?i)\b(secondary|suite)\b');
url.searchParams.set('filter_expand_match', 'all');
url.searchParams.set('page', '1');
url.searchParams.set('province_abbreviation', 'ab');
url.searchParams.set('results_per_page', '3');
const response = await fetch(url);
const data = await response.json();
return data;
}
(async () => {
let data: PropertiesResponse = await houski_recipe_data();
// Log the response
console.log(data);
})();
{
"cache_hit": false,
"cost_cents": 0.36000001430511475,
"data": [
{
"address": "243 Sora Terrace SE",
"permits": [
{
"expand_permit_application_date": "2026-05-08",
"expand_permit_content": "Status: Hold|Issued date: N/A|Completed date: N/A|Estimated project cost: 48380.82|Permit class: Secondary Suites|Permit type: Residential Improvement Project|Permit type mapped: Building|Work class: Alteration|Work class group: Improvement|Work class mapped: Existing|applicant: N/A|contractor: N/A|estimated project cost: 48380.82|Total square feet affected: N/A|Housing units affected: 1",
"expand_permit_id": "BP2026-07881",
"expand_permit_type": "Building",
"property_id": "11058e2706b6d957"
}
],
"property_id": "11058e2706b6d957"
},
{
"address": "24 Saddlepeace Way NE",
"permits": [
{
"expand_permit_application_date": "2026-06-09",
"expand_permit_content": "Status: Released|Category: Residential - New Single / Semi / Duplex|Description: RELAXATION: SINGLE DETACHED DWELLING (BUILDING SETBACK FROM SIDE PROPERTY LINE); NEW: SECONDARY SUITE (BASEMENT)|Proposed use code: C2626; C2730|Proposed use description: SECONDARY SUITE; SINGLE DETACHED DWELLING|Permitted/discretionary: Permitted with a Relaxation|Land use district: R-G|Land use district description: Residential - Low Density Mixed Housing|Concurrent LOC: N/A|Decision: Approval|Decision by: Development Authority|Decision date: 2026-07-20|Canceled/refused date: N/A|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-03359",
"expand_permit_type": "Development",
"property_id": "1133af762eba2e1a"
}
],
"property_id": "1133af762eba2e1a"
},
{
"address": "5516 Memorial Drive NE",
"permits": [
{
"expand_permit_application_date": "2026-04-09",
"expand_permit_content": "Status: Hold|Category: Residential - Secondary Suite|Description: NEW: ACCESSORY RESIDENTIAL BUILDING (GARAGE), BACKYARD SUITE (ABOVE GARAGE)|Proposed use code: C1175|Proposed use description: BACKYARD SUITE|Permitted/discretionary: Discretionary|Land use district: R-C1|Land use district description: Residential - Contextual One Dwelling|Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: N/A|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
"expand_permit_id": "DP2026-02042",
"expand_permit_type": "Development",
"property_id": "113daab063306b9d"
}
],
"property_id": "113daab063306b9d"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 354
},
"price_quote": false,
"result_total": 1060,
"time_ms": 896,
"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"
}
}