Landcor Property API

The Landcor Property API is a live REST service on api.landcor.com that publishes a valid OpenAPI 3.1.0 contract titled "Landcor Property API" version 0.1.0, served anonymously at https://api.landcor.com/openapi.json (HTTP 200, 47,840 bytes, fetched 2026-07-26) with interactive Swagger UI at /docs and ReDoc at /redoc. It exposes twelve operations across four tags. Property covers GET /property/search (address filters for unit number, street direction, street number, street name and postal code), GET /property/{pid} for full property detail keyed on the Landcor PID in xxx-xxx-xxx format, GET /property/{pid}/report/pdf which returns a base64-encoded, password-protected PDF report, and GET /address/autocomplete. Valuation covers GET /valuationRange/{pid}, GET /valuationRange/{pid}/updates, GET /valuationRange/{pid}/history, POST /valuation/ltv-check for loan-to-value comparison against the AVM value, and GET /valuation/neighbourhood/{neighbourhood_code}/{unit_type_code}/sales for aggregated monthly or rolling-three-month neighbourhood sales series. Comparables covers GET /comparables/{pid}. AVM Summary covers POST /generate-avm-summary, which generates a narrative summary from Landcor AVM data. Health covers GET /health, the only unauthenticated operation, which returns {"status":"ok"}. Authentication is a single HTTPBearer security scheme; every other operation declares it and returns HTTP 401 with {"detail":"Missing token"} when called anonymously, verified against /property/search, /address/autocomplete and /valuationRange/{pid} on 2026-07-26. The contract is public but the credentials are not: Landcor publishes no developer portal, no key issuance page, no API pricing and no API terms, and does not reference api.landcor.com anywhere on landcor.com, so tokens are obtainable only through a direct commercial arrangement with the company. The specification's own operation descriptions disclose the implementation behind it, naming the stored procedure USP_SEARCH_SERVICE_PROPERTY and a legacy Landcor SOAP webservice that produces the PDF report, which is recorded here as harvested fact rather than as documentation Landcor intended to publish.

OpenAPI Specification

landcor-property-api-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"Landcor Property API","version":"0.1.0"},"paths":{"/health":{"get":{"tags":["Health"],"summary":"Service health check","description":"Simple liveness endpoint for load balancers and uptime checks.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/property/search":{"get":{"tags":["Property"],"summary":"Search for properties using the stored procedure address filters.","description":"Args:\n        filters: Collection of optional address filters such as\n            ``StreetName`` or ``PostalCode`` that are forwarded to\n            :data:`~services.stored_procedures.USP_SEARCH_SERVICE_PROPERTY`.\n\n    Returns:\n        A list of :class:`PropertySearchResult` objects containing normalized\n        PID, jurisdiction, address, and actual use type information.\n\n    Business Rules:\n        * A ``404`` response is returned when the underlying search yields no\n          rows.","operationId":"search_property_property_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unit_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Number"}},{"name":"street_direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Direction"}},{"name":"street_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Number"}},{"name":"street_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name"}},{"name":"postal_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PropertySearchResult"},"title":"Response Search Property Property Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/property/{pid}":{"get":{"tags":["Property"],"summary":"Retrieve detailed information for a property.","description":"Args:\n        pid: Landcor property identifier in ``xxx-xxx-xxx`` format.\n\n    Returns:\n        PropertyResponse: Envelope containing the PID, formatted address\n        metadata, and nested assessment, usage, exterior, interior, and\n        jurisdiction sections. The assessment section includes derived values\n        such as price-per-square-foot, while the exterior section summarizes\n        parking counts and amenity flags.\n\n    Business Rules:\n        * A 404 error is returned if the property cannot be located.\n        * 'Y'/'N' flag values are converted to booleans.","operationId":"read_property_property__pid__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","description":"Property identifier in format xxx-xxx-xxx","title":"Pid"},"description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/property/{pid}/report/pdf":{"get":{"tags":["Property"],"summary":"Return the encrypted PDF report for a property.","description":"The PID is first resolved into assessment area (AA) code, jurisdiction code\n    and roll number. These identifiers are required by the legacy Landcor SOAP\n    webservice, which returns a base64-encoded, password protected PDF. A 404\n    error is returned when the PID cannot be resolved, while a 502 error\n    indicates that the legacy webservice either rejected the request or\n    responded without a valid PDF payload.\n\n    ``use_test_credentials`` is set when the caller presented a TEST token so\n    the legacy webservice is authenticated with the TEST credential set.","operationId":"read_property_pdf_property__pid__report_pdf_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","description":"Property identifier in format xxx-xxx-xxx","title":"Pid"},"description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReportPdfResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/valuationRange/{pid}":{"get":{"tags":["Valuation"],"summary":"Retrieve valuation range information for a property.","description":"Args:\n        pid: Landcor property identifier in ``xxx-xxx-xxx`` format.\n\n    Returns:\n        ValuationRangeResponse with low and high valuation range values.\n\n    Business Rules:\n        * A 404 error is raised if no valuation record exists for the PID.","operationId":"read_valuation_range_valuationRange__pid__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","description":"Property identifier in format xxx-xxx-xxx","title":"Pid"},"description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValuationRangeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/valuationRange/{pid}/updates":{"get":{"tags":["Valuation"],"summary":"Return the valuation range for compatibility with the updates endpoint.","description":"Historically this endpoint exposed multiple update strategies. The\n    functionality now mirrors :func:`get_property_valuation_range` so that\n    clients receive the same data as the valuation range endpoint.\n\n    Args:\n        pid: Landcor property identifier in ``xxx-xxx-xxx`` format.\n\n    Returns:\n        ValuationRangeResponse with low and high valuation range values.\n\n    Business Rules:\n        * A 404 error is raised if no valuation record exists for the PID.","operationId":"read_property_monthly_update_valuationRange__pid__updates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","description":"Property identifier in format xxx-xxx-xxx","title":"Pid"},"description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValuationRangeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/valuationRange/{pid}/history":{"get":{"tags":["Valuation"],"summary":"Retrieve the complete valuation history for a property.","description":"Args:\n        pid: Landcor property identifier in ``xxx-xxx-xxx`` format.\n\n    Returns:\n        ValuationHistoryResponse containing chronological valuation data points.\n\n    Business Rules:\n        * A 404 error is raised if no valuation history exists for the PID.","operationId":"read_valuation_history_valuationRange__pid__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","description":"Property identifier in format xxx-xxx-xxx","title":"Pid"},"description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValuationHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/valuation/ltv-check":{"post":{"tags":["Valuation"],"summary":"Compare a property's AVM value against a provided LTV amount.","operationId":"run_ltv_check_valuation_ltv_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTVCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTVCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/valuation/neighbourhood/{neighbourhood_code}/{unit_type_code}/sales":{"get":{"tags":["Valuation"],"summary":"Retrieve aggregated neighbourhood sales data.","description":"Args:\n        neighbourhood_code: Assessment neighbourhood identifier.\n        unit_type_code: Unit type grouping for comparable sales.\n        interval: Aggregation interval flag (``\"monthly\"`` or ``\"rolling3m\"``).\n        months: Number of months of data to request.\n        snapshot_day: Preferred day of the month for aggregation snapshots.\n\n    Returns:\n        NeighbourhoodSalesSeriesResponse containing sales metrics over time.\n\n    Business Rules:\n        * A 400 error is raised if ``interval`` is not recognised.\n        * A 404 error is raised when no sales data is available.","operationId":"read_neighbourhood_sales_series_valuation_neighbourhood__neighbourhood_code___unit_type_code__sales_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"neighbourhood_code","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Assessment neighbourhood identifier.","title":"Neighbourhood Code"},"description":"Assessment neighbourhood identifier."},{"name":"unit_type_code","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Unit type code used to group comparable properties.","title":"Unit Type Code"},"description":"Unit type code used to group comparable properties."},{"name":"interval","in":"query","required":false,"schema":{"enum":["monthly","rolling3m"],"type":"string","description":"Aggregation interval for the sales series. Use 'monthly' for discrete months or 'rolling3m' for rolling averages.","default":"monthly","title":"Interval"},"description":"Aggregation interval for the sales series. Use 'monthly' for discrete months or 'rolling3m' for rolling averages."},{"name":"months","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Number of months of history to include in the response.","default":24,"title":"Months"},"description":"Number of months of history to include in the response."},{"name":"snapshot_day","in":"query","required":false,"schema":{"type":"integer","maximum":31,"minimum":1,"description":"Preferred day of the month for the aggregation snapshot.","default":15,"title":"Snapshot Day"},"description":"Preferred day of the month for the aggregation snapshot."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NeighbourhoodSalesSeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/comparables/{pid}":{"get":{"tags":["Comparables"],"summary":"Retrieve properties comparable to the given PID.","operationId":"read_comparables_comparables__pid__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","description":"Property identifier in format xxx-xxx-xxx","title":"Pid"},"description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparablesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/address/autocomplete":{"get":{"tags":["Property"],"summary":"Autocomplete address lookup","description":"Returns matching address suggestions based on partial address input. Each word in the query must match a word boundary in the address. Requires at least 3 characters.","operationId":"autocomplete_address_address_autocomplete_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":200,"description":"Partial address string to search for.","examples":["123 main","west broadway van"],"title":"Q"},"description":"Partial address string to search for."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of suggestions to return.","default":10,"title":"Limit"},"description":"Maximum number of suggestions to return."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutocompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/generate-avm-summary":{"post":{"tags":["AVM Summary"],"summary":"Generate Avm Summary","description":"Generate a narrative summary from uploaded Landcor AVM data.","operationId":"generate_avm_summary_generate_avm_summary_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LandcorAVMSummaryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LandcorAVMSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"AssessmentYear":{"properties":{"year":{"type":"integer","title":"Year"},"land":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Land"},"improvements":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Improvements"},"total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total"}},"type":"object","required":["year"],"title":"AssessmentYear"},"AutocompleteResponse":{"properties":{"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions","description":"Matching address strings ordered by relevance."},"count":{"type":"integer","title":"Count","description":"Number of suggestions returned."}},"type":"object","required":["suggestions","count"],"title":"AutocompleteResponse","description":"Response containing address autocomplete suggestions."},"BCAssessmentSection":{"properties":{"assessment_area_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assessment Area Code"},"assessment_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assessment Area"},"jurisdiction_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Jurisdiction Code"},"jurisdiction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jurisdiction"},"roll_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Roll Number"},"neighbourhood_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood Code"},"neighbourhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"},"last_land_value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Land Value Amount","description":"Most recent assessed value assigned to the land portion."},"last_improvement_value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Improvement Value Amount","description":"Most recent assessed value of the improvements on the parcel."},"last_total_value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Total Value Amount","description":"Most recent total assessed value of the property."},"previous_total_value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Previous Total Value Amount","description":"Previous year's total assessed value."},"price_per_square_foot":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Square Foot","description":"Derived price per finished square foot using the latest assessment."},"year_over_year_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Year Over Year Change","description":"Year over year percentage change of the assessment value."}},"type":"object","title":"BCAssessmentSection","description":"Valuation metrics sourced from BC Assessment."},"ClimateEvent":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ClimateEvent"},"ClimateEvents":{"properties":{"has_recent_events":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Recent Events"},"events":{"items":{"$ref":"#/components/schemas/ClimateEvent"},"type":"array","title":"Events"}},"type":"object","title":"ClimateEvents"},"ComparableProperty":{"properties":{"address":{"allOf":[{"$ref":"#/components/schemas/PropertyAddressMetadata"}],"description":"Formatted address metadata for the comparable property."},"distance_to_subject_property":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Distance To Subject Property","description":"Human readable distance from the comparable to the subject property."},"distance_to_subject_property_meters":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance To Subject Property Meters","description":"Numeric distance from the comparable to the subject property in meters."},"assessment":{"allOf":[{"$ref":"#/components/schemas/BCAssessmentSection"}],"description":"Assessment and lot size information for the comparable property."},"usage":{"allOf":[{"$ref":"#/components/schemas/PropertyUsageSection"}],"description":"Classification and zoning details for the comparable property."},"exterior":{"allOf":[{"$ref":"#/components/schemas/ExteriorDataSection"}],"description":"Exterior construction and amenity data for the comparable property."},"interior":{"allOf":[{"$ref":"#/components/schemas/InteriorDataSection"}],"description":"Interior layout information for the comparable property."},"other":{"allOf":[{"$ref":"#/components/schemas/OtherSection"}],"description":"Additional identifiers and legal metadata for the comparable property."},"sale":{"anyOf":[{"$ref":"#/components/schemas/PropertySaleSection"},{"type":"null"}],"description":"Latest sale metadata for the comparable property if available."}},"type":"object","title":"ComparableProperty","description":"Comparable property details grouped into shared property sections."},"ComparableSale":{"properties":{"property_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Address"},"last_sale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Sale Price"},"last_sale_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Sale Date"},"assessment_land":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Assessment Land"},"assessent_improvements":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Assessent Improvements","description":"Mirrors the upstream payload's misspelled key."},"assessment_total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Assessment Total"},"use_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Type"},"characteristics":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Characteristics"},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bathrooms"},"floor_area_sqft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Floor Area Sqft"},"lot_size_sqft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lot Size Sqft"},"year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Built"},"effective_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Effective Year"},"foundation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Foundation"},"parking":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking"},"neighbourhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"type":"object","title":"ComparableSale","description":"Comparable sale with full underwriting detail."},"ComparablesResponse":{"properties":{"pid":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","title":"Pid","description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"},"comparables":{"items":{"$ref":"#/components/schemas/ComparableProperty"},"type":"array","title":"Comparables"}},"type":"object","required":["pid","comparables"],"title":"ComparablesResponse","description":"Response schema for comparable properties."},"ExteriorDataSection":{"properties":{"year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Built"},"effective_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Effective Year"},"foundation_type_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Foundation Type Code"},"foundation_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Foundation Type"},"covered_deck_area":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Covered Deck Area"},"uncovered_deck_area":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Uncovered Deck Area"},"carports":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Carports"},"single_garages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Single Garages"},"multi_garages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Multi Garages"},"parking_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking Summary","description":"Human readable summary of available parking counts."},"has_pool":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Pool"},"pool":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pool"},"other_buildings":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Other Buildings"},"exterior_type_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exterior Type Code"},"exterior_type_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exterior Type Description"},"corner_lot":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Corner Lot"},"waterfront_lot":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Waterfront Lot"},"water_lot":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Water Lot"},"prime_view_lot":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Prime View Lot"},"good_view_lot":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Good View Lot"},"fair_view_lot":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fair View Lot"},"lot_size_sq_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lot Size Sq Ft","description":"Lot size expressed in square feet."},"lot_size_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lot Size Text","description":"Formatted lot size string including square feet and acres."},"lot_size_freeform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lot Size Freeform","description":"Freeform lot size value captured by BC Assessment."},"lot_width_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lot Width Ft","description":"Lot width in feet."},"lot_depth_ft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lot Depth Ft","description":"Lot depth in feet."}},"type":"object","title":"ExteriorDataSection","description":"Exterior construction, site dimensions, parking, and amenity data."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HistoricalSale":{"properties":{"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"sale_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sale Type"},"title_certificate_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title Certificate Number"}},"type":"object","title":"HistoricalSale"},"InteriorDataSection":{"properties":{"stories":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stories"},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms_4_piece":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms 4 Piece"},"bathrooms_3_piece":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms 3 Piece"},"bathrooms_2_piece":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms 2 Piece"},"bathroom_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathroom Total"},"fireplaces":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fireplaces"},"fireplace_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fireplace Total"},"fireplace_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fireplace Type"},"total_basement_area":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Basement Area"},"finished_basement_area":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Finished Basement Area"},"basement_unfinished_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Basement Unfinished Area"},"basement_finished_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Basement Finished Area"},"main_finished_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Main Finished Area"},"total_finished_area":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Finished Area","description":"Total finished area in square feet for the primary structure."}},"type":"object","title":"InteriorDataSection","description":"Interior counts, configuration details, and square-footage metrics."},"LTVCheckRequest":{"properties":{"pid":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","title":"Pid","description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"},"ltv_amount":{"type":"number","exclusiveMinimum":0.0,"title":"Ltv Amount","description":"Loan-to-value amount to compare against the property's AVM value.","example":500000}},"type":"object","required":["pid","ltv_amount"],"title":"LTVCheckRequest","description":"Request body for comparing a property's AVM against an LTV amount."},"LTVCheckResponse":{"properties":{"pid":{"type":"string","pattern":"^\\d{3}-\\d{3}-\\d{3}$","title":"Pid","description":"Property identifier in format xxx-xxx-xxx","example":"xxx-xxx-xxx"},"ltv_amount":{"type":"number","title":"Ltv Amount","description":"Loan-to-value amount supplied in the request."},"has_avm":{"type":"boolean","title":"Has Avm","description":"Indicates whether the property has an AVM value on record."},"avm_exceeds_ltv":{"type":"boolean","title":"Avm Exceeds Ltv","description":"True when the property's AVM value is greater than the provided LTV amount."}},"type":"object","required":["pid","ltv_amount","has_avm","avm_exceeds_ltv"],"title":"LTVCheckResponse","description":"Outcome of comparing a property's AVM against an LTV amount."},"LandcorAVMSummaryRequest":{"properties":{"subject_property":{"anyOf":[{"$ref":"#/components/schemas/SubjectProperty"},{"type":"null"}]},"valuation":{"anyOf":[{"$ref":"#/components/schemas/ValuationMeta"},{"type":"null"}]},"assessment_history":{"items":{"$ref":"#/components/schemas/AssessmentYear"},"type":"array","title":"Assessment History"},"comparable_sales":{"items":{"$ref":"#/components/schemas/ComparableSale"},"type":"array","title":"Comparable Sales"},"neighbourhood":{"anyOf":[{"$ref":"#/components/schemas/NeighbourhoodInsights"},{"type":"null"}]},"sales_history":{"items":{"$ref":"#/components/schemas/HistoricalSale"},"type":"array","title":"Sales History"},"valuation_change":{"anyOf":[{"$ref":"#/components/schemas/ValuationChange"},{"type":"null"}]},"climate_events":{"anyOf":[{"$ref":"#/components/schemas/ClimateEvents"},{"type":"null"}]},"permit_history":{"anyOf":[{"$ref":"#/components/schemas/PermitHistory"},{"type":"null"}]},"scores":{"anyOf":[{"$ref":"#/components/schemas/NeighbourhoodScores"},{"type":"null"}]}},"type":"object","title":"LandcorAVMSummaryRequest","description":"Request body for generating an AVM narrative summary."},"LandcorAVMSummaryResponse":{"properties":{"summary":{"type":"string","title":"Summary","description":"Generated Landcor AVM summary."},"validation":{"allOf":[{"$ref":"#/components/schemas/ValidationResult"}],"description":"Validation metadata describing potential issues in the narrative."}},"type":"object","required":["summary","validation"],"title":"LandcorAVMSummaryResponse","description":"Response payload returned by the narrative generation endpoint."},"NeighbourhoodInsights":{"properties":{"avg_assessed_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Assessed Value"},"avg_price_last_6_months":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Price Last 6 Months"},"last_valid_sale_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Valid Sale Date"},"value_range":{"anyOf":[{"$ref":"#/components/schemas/NeighbourhoodValueRange"},{"type":"null"}]}},"type":"object","title":"NeighbourhoodInsights"},"NeighbourhoodSalesPoint":{"properties":{"period_start":{"type":"string","format":"date","title":"Period Start","description":"First day of the aggregation period represented by the data point."},"period_end":{"type":"string","format":"date","title":"Period End","description":"Last day of the aggregation period represented by the data point."},"min_sale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Sale Price","description":"Lowest sale price recorded during the aggregation period."},"max_sale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Sale Price","description":"Highest sale price recorded during the aggregation period."},"avg_sale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Sale Price","description":"Average sale price recorded during the aggregation period."},"median_sale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Sale Price","description":"Median sale price recorded during the aggregation period."},"data_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source","description":"Originating data source for the aggregated sales metrics."}},"type":"object","required":["period_start","period_end"],"title":"NeighbourhoodSalesPoint","description":"Aggregated sales metrics for a neighbourhood and unit type."},"NeighbourhoodSalesSeriesResponse":{"properties":{"neighbourhood_code":{"type":"string","title":"Neighbourhood Code","description":"Identifier of the neighbourhood that the sales data relates to."},"unit_type_code":{"type":"string","title":"Unit Type Code","description":"Unit type code used to group comparable sales records."},"points":{"items":{"$ref":"#/components/schemas/NeighbourhoodSalesPoint"},"type":"array","title":"Points","description":"Chronological series of aggregated sales metrics."}},"type":"object","required":["neighbourhood_code","unit_type_code"],"title":"NeighbourhoodSalesSeriesResponse","description":"Response wrapper for neighbourhood sales series data."},"NeighbourhoodScores":{"properties":{"walk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Walk"},"transit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Transit"},"bike":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bike"}},"type":"object","title":"NeighbourhoodScores"},"NeighbourhoodValueRange":{"properties":{"low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Low"},"median":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median"},"high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"High"}},"type":"object","title":"NeighbourhoodValueRange"},"OtherSection":{"properties":{"owner_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Address"},"characteristics":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Characteristics"},"legal_description":{"anyOf":[{"type":"stri

# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/landcor/refs/heads/main/openapi/landcor-property-api-openapi.json