!

API recipes

Practical examples for using the Houski API.

Examples

Find properties with specific building permits

Programming language

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

Search for permits in a city
Pull Calgary properties with permits matching a case-insensitive regex for 'secondary' or 'suite'. filter_expand_match=all restricts to properties with permit data, 3 results per page, and expand_permit_application_date_gt limits to permits issued in the last 180 days.
Request
Shell session
curl -X GET "https://api.houski.ca/properties?api_key=YOUR_API_KEY&city=calgary&country_abbreviation=ca&expand=permits&expand_permit_application_date_gt=2026-02-14&expand_permit_content_regex=(?i)\b(secondary|suite)\b&filter_expand_match=all&page=1&province_abbreviation=ab&results_per_page=3"
TypeScript code
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('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', 'permits');
    url.searchParams.set('expand_permit_application_date_gt', '2026-02-14');
    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);
})();
Response
JSON
{
  "cache_hit": false,
  "cost_cents": 0.08999999612569809,
  "data": [
    {
      "address": "221 12 Avenue NE",
      "permits": [
        {
          "expand_permit_application_date": "2026-03-11",
          "expand_permit_content": "Status: Cancelled|Category: Residential - New Single / Semi / Duplex|Description: NEW: SINGLE DETACHED DWELLING, SECONDARY SUITE (BASEMENT), ACCESSORY RESIDENTIAL BUILDING (GARAGE)|Proposed use code: C1020; C2626; C2730|Proposed use description: ACCESSORY RESIDENTIAL BUILDING; SECONDARY SUITE; SINGLE DETACHED DWELLING|Permitted/discretionary: Discretionary|Land use district: R-CG|Land use district description: Residential - Grade-Oriented Infill|Concurrent LOC: N/A|Decision: N/A|Decision by: N/A|Decision date: N/A|Canceled/refused date: 2026-03-23|SDAB Number: N/A|SDAB hearing date: N/A|SDAB Decision: N/A|SDAB decision date: N/A",
          "expand_permit_id": "DP2026-01337",
          "expand_permit_type": "Development",
          "property_id": "101f96b239efbbf6"
        }
      ],
      "property_id": "101f96b239efbbf6"
    },
    {
      "address": "2419 Bowness Road NW",
      "permits": [
        {
          "expand_permit_application_date": "2026-03-09",
          "expand_permit_content": "Status: Released|Category: Residential - Secondary Suite|Description: NEW: SECONDARY SUITE - PARKING STALL|Proposed use code: C2626|Proposed use description: SECONDARY SUITE|Permitted/discretionary: Permitted with a Relaxation|Land use district: R-CG|Land use district description: Residential - Grade-Oriented Infill|Concurrent LOC: N/A|Decision: Approval|Decision by: Development Authority|Decision date: 2026-04-17|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-01267",
          "expand_permit_type": "Development",
          "property_id": "1101630d961e15c0"
        }
      ],
      "property_id": "1101630d961e15c0"
    },
    {
      "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"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 390
  },
  "price_quote": false,
  "result_total": 1168,
  "time_ms": 688,
  "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"
  }
}