Canadian mortgage, tax & land transfer calculators: 12 read-only tools, LTT for all 13 provinces.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Estimate British Columbia's home flipping tax on a property sold within 730 days: 20% tapering to 0% between 366 and 730 days, with a $20,000 primary-residence deduction (only if held at least 365 days).
Number of days the property was owned before sale
Proceeds minus cost to acquire minus cost to improve (may be negative)
Lived in it as a primary residence
Estimate British Columbia's home flipping tax on a property sold within 730 days: 20% tapering to 0% between 366 and 730 days, with a $20,000 primary-residence deduction (only if held at least 365 days).
| Argument | Type | Description |
|---|---|---|
| daysHeld* | number | Number of days the property was owned before sale |
| taxableIncome* | number | Proceeds minus cost to acquire minus cost to improve (may be negative) |
| isPrimaryResidence | boolean | Lived in it as a primary residence |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taxableIncome",
"daysHeld"
],
"properties": {
"daysHeld": {
"type": "number",
"minimum": 0,
"description": "Number of days the property was owned before sale"
},
"taxableIncome": {
"type": "number",
"description": "Proceeds minus cost to acquire minus cost to improve (may be negative)"
},
"isPrimaryResidence": {
"type": "boolean",
"default": false,
"description": "Lived in it as a primary residence"
}
}
}Analyze a Canadian rental property: capitalization rate, net operating income, gross rent multiplier, expense ratio, annual cash flow and cash-on-cash return, plus how the cap rate compares to typical yields in the local market. Mortgage math uses Canadian semi-annual compounding.
| Argument | Type | Description |
|---|---|---|
| city | string | City used for the cap-rate benchmark range |
| downPayment* | number | Down payment in CAD. Set equal to purchasePrice for an all-cash purchase. |
| propertyType | string | |
| purchasePrice* | number | Purchase price in CAD |
| vacancyRatePct | number | Vacancy allowance as a percent of gross rent |
| interestRatePct | number | Mortgage rate as a percent, e.g. 5.49 |
| monthlyGrossRent* | number | Total gross monthly rent across all units in CAD |
| amortizationYears | number |
Estimate Canadian capital gains tax on a disposition (real estate, stocks, crypto, a business, or a rental property). Applies the flat 50% inclusion rate, the principal-residence exemption, the lifetime capital gains exemption for QSBC shares, capital-loss offsets, and rental CCA recapture — then taxes the taxable gain on top of your other income at federal + provincial brackets.
| Argument | Type | Description |
|---|---|---|
| isQSBC | boolean | Business only: qualified small business corporation shares (LCGE) |
| taxYear | number | Tax year of the disposition |
| province | string | Province/territory of residence |
| assetType | string | |
| landValue | number | Rental only: land portion of the sale price (splits land vs building gain) |
| salePrice* | number | Gross sale proceeds in CAD |
| yearsOwned | number | Years the property was owned (principal-residence proration) |
| buyingCosts | number | Land transfer tax, legal fees, and other costs of acquiring |
Compare a HELOC against a second mortgage for tapping home equity in Canada. Returns how much you can borrow (revolving HELOC capped at 65% LTV, total secured borrowing to 80% with an A lender), monthly payments, TDS qualification at the OSFI stress-test rate, and the equivalent numbers for B and private lenders.
| Argument | Type | Description |
|---|---|---|
| province | string | |
| homeValue* | number | Current market value of the home in CAD |
| amountToBorrow* | number | Amount you want to borrow in CAD |
| helocSpreadPct | number | Lender spread over prime as a percent, e.g. 0.5 |
| purposeOfFunds | string | |
| helocPrimeRatePct | number | Prime rate as a percent; defaults to the site's current prime |
| existingMonthlyDebts | number | Other monthly debt payments (car, cards, loans) |
| annualHouseholdIncome* | number |
Estimate the profit on a Canadian house flip: land transfer tax (with first-time buyer rebate), renovation cost with contingency, holding costs, realtor commission, and closing costs — then the tax bill. Flags the CRA residential property flipping rule (held under 12 months = 100% business income, no capital gains treatment) and shows the tax saving from waiting past the 12-month line.
| Argument | Type | Description |
|---|---|---|
| city | string | City name — include 'Toronto' to add the Toronto municipal land transfer tax |
| province | string | |
| purchasePrice* | number | Purchase price in CAD |
| contingencyPct | number | Renovation contingency as a percent of the renovation budget |
| renovationCost* | number | Budgeted renovation cost in CAD, before contingency |
| closingCostsBuy | number | Legal and inspection costs on the purchase, excluding land transfer tax |
| afterRepairValue* | number | Expected resale price after renovation (ARV) in CAD |
Calculate 2026 Canadian federal + provincial income tax, CPP/QPP, EI, QPIP (Quebec), Ontario surtax and Health Premium where applicable, plus net (take-home) pay for any province.
| Argument | Type | Description |
|---|---|---|
| province* | string | Province of residence |
| annualIncome* | number | Gross annual employment income in CAD |
| employmentType | string | |
| rrspContribution | number | Annual RRSP contribution in CAD |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"annualIncome",
"province"
],
"properties": {
"province": {
"enum": [
"Ontario",
"British Columbia",
"Alberta",
"Quebec",
"Manitoba",
"Saskatchewan",
"Nova Scotia",
"New Brunswick",
"PEI",
"Newfoundland & Labrador"
],
"type": "string",
"description": "Province of residence"
},
"annualIncome": {
"type": "number",
"minimum": 0,
"description": "Gross annual employment income in CAD"
},
"employmentType": {
"enum": [
"employed",
"self_employed"
],
"type": "string",
"default": "employed"
},
"rrspContribution": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Annual RRSP contribution in CAD"
}
}
}Estimate land transfer tax on a home purchase for all 13 provinces and territories (incl. Toronto MLTT, Montreal welcome tax), first-time buyer rebates, plus the transfer registration fee (the government fee to register the deed) and the total due at registration. Alberta, Saskatchewan, Newfoundland & Labrador and the three territories charge no land transfer tax, only the registration fee. The mortgage registration fee is separate and not included.
| Argument | Type | Description |
|---|---|---|
| price* | number | Purchase price in CAD |
| province* | string | Province or territory |
| inToronto | boolean | Ontario only: property is within the City of Toronto (adds the municipal LTT) |
| isFirstTimeBuyer | boolean | |
| quebecMunicipality | string | Quebec only: 'montreal' uses Montreal's welcome-tax brackets (the website's Quebec default); 'other' uses the provincial base schedule for municipalities without higher rates above $500,000 |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"price",
"province"
],
"properties": {
"price": {
"type": "number",
"description": "Purchase price in CAD",
"exclusiveMinimum": 0
},
"province": {
"enum": [
"Ontario",
"British Columbia",
"Quebec",
"Alberta",
"Manitoba",
"Nova Scotia",
"New Brunswick",
"Saskatchewan",
"PEI",
"Newfoundland & Labrador",
"Northwest Territories",
"Nunavut",
"Yukon"
],
"type": "string",
"description": "Province or territory"
},
"inToronto": {
"type": "boolean",
"default": false,
"description": "Ontario only: property is within the City of Toronto (adds the municipal LTT)"
},
"isFirstTimeBuyer": {
"type": "boolean",
"default": false
},
"quebecMunicipality": {
"enum": [
"montreal",
"other"
],
"type": "string",
"default": "montreal",
"description": "Quebec only: 'montreal' uses Montreal's welcome-tax brackets (the website's Quebec default); 'other' uses the provincial base schedule for municipalities without higher rates above $500,000"
}
}
}Calculate the minimum down payment for a Canadian home under the Dec 2024 CMHC rules (5% on the first $500k, 10% on the portion from $500k–$1.5M, 20% at/above $1.5M), plus whether CMHC insurance applies and the premium rate.
| Argument | Type | Description |
|---|---|---|
| homePrice* | number | Purchase price in CAD, e.g. 800000 |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"homePrice"
],
"properties": {
"homePrice": {
"type": "number",
"description": "Purchase price in CAD, e.g. 800000",
"exclusiveMinimum": 0
}
}
}Work out the maximum home price a Canadian buyer qualifies for: binary-searches the price that keeps both the GDS (39%) and TDS (44%) ratios satisfied at the OSFI stress-test rate, honouring the Dec-2024 minimum down payment tiers and the $1.5M CMHC insurability ceiling. Returns max price, max mortgage, CMHC premium, monthly payment, and the GDS/TDS ratios.
| Argument | Type | Description |
|---|---|---|
| province | string | |
| condoFees | number | Monthly condo fees — 50% counts toward GDS/TDS for condos |
| downPayment* | number | Down payment — dollars, or a percent if downPaymentMode='percent' |
| annualIncome* | number | Primary applicant gross annual income in CAD |
| monthlyDebts | number | Other monthly debt payments (car, cards, student loans) |
| propertyType | string | |
| monthlyHeating | number | Estimated monthly heating cost in CAD |
| downPaymentMode | string |
Calculate the periodic mortgage payment for a Canadian home. Call it ONE of two ways: (a) if the user gave a PURCHASE PRICE, pass homePrice + downPayment and CMHC insurance is applied when the down payment is under 20%; (b) if the user gave a MORTGAGE / LOAN AMOUNT (e.g. "payment on a $500,000 mortgage"), pass loanAmount on its own. Do NOT invent a purchase price in order to reach a loan amount — use loanAmount. Inventing a price changes the answer by several percent and attaches a CMHC premium the user does not owe.
| Argument | Type | Description |
|---|---|---|
| province | string | Province name, used only for CMHC PST on the premium |
| rateType | string | |
| homePrice | number | Purchase price in CAD, e.g. 650000. Use with downPayment. Omit if the user gave you the mortgage amount instead. |
| termYears | number | |
| loanAmount | number | The mortgage amount itself in CAD, when the user stated the loan rather than the purchase price. Mutually exclusive with homePrice. No CMHC premium is applied on this path — the amount is taken as the principal. |
| downPayment | number | Down payment amount in CAD (or percent if downPaymentType='percent'). Required when homePrice is used. |
| downPaymentType |
Estimate the penalty to break a Canadian mortgage: three months' interest vs the interest rate differential (IRD), including the big-bank posted-rate method. Fixed = greater of the two; variable = usually three months' interest. IMPORTANT: the three rate inputs below are lender-specific and are NOT supplied by most users. If they are omitted, this tool falls back to illustrative site defaults and the answer can be several times too low or too high — the response reports exactly which values were assumed in `assumedInputs`. Always surface those assumptions to the user and tell them to confirm the real figures with their lender.
| Argument | Type | Description |
|---|---|---|
| balance* | number | Outstanding mortgage balance in CAD |
| rateType | string | |
| lenderMethod | string | Big banks use the posted-rate IRD, monolines use actual rates. Which is larger depends on the gap between the discount originally received and today's posted rate — it is NOT always the big bank. |
| contractRatePct* | number | Your contract rate as a percent, e.g. 5.25 |
| monthsRemaining* | number | Months remaining in the term |
| postedAtOriginationPct | number | Big-bank method: posted (not discounted) rate when you signed, from your mortgage documents. HIGH IMPACT — this single value can change the penalty several-fold. Omit if unknown and the reply will say it was assumed. |
Calculate the maximum allowable annual rent increase under the Ontario LTB, BC RTB or Manitoba RTB guideline for a given year, and the resulting new rent.
| Argument | Type | Description |
|---|---|---|
| year* | string | Guideline year, e.g. '2026'. Use the rent_increase tool's supported years if unsure. |
| province* | string | |
| currentRent* | number | Current monthly rent in CAD |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"currentRent",
"province",
"year"
],
"properties": {
"year": {
"type": "string",
"description": "Guideline year, e.g. '2026'. Use the rent_increase tool's supported years if unsure."
},
"province": {
"enum": [
"Ontario",
"British Columbia",
"Manitoba"
],
"type": "string"
},
"currentRent": {
"type": "number",
"description": "Current monthly rent in CAD",
"exclusiveMinimum": 0
}
}
}| annualOperatingExpenses* | number | Total annual operating expenses in CAD (property tax, insurance, management, maintenance, landlord utilities) — excludes mortgage payments |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"purchasePrice",
"monthlyGrossRent",
"annualOperatingExpenses",
"downPayment"
],
"properties": {
"city": {
"enum": [
"toronto",
"vancouver",
"calgary",
"edmonton",
"ottawa",
"montreal",
"halifax",
"winnipeg",
"hamilton",
"kitchener-waterloo",
"other"
],
"type": "string",
"default": "other",
"description": "City used for the cap-rate benchmark range"
},
"downPayment": {
"type": "number",
"minimum": 0,
"description": "Down payment in CAD. Set equal to purchasePrice for an all-cash purchase."
},
"propertyType": {
"enum": [
"single-family",
"multi-unit",
"commercial",
"mixed-use"
],
"type": "string",
"default": "single-family"
},
"purchasePrice": {
"type": "number",
"description": "Purchase price in CAD",
"exclusiveMinimum": 0
},
"vacancyRatePct": {
"type": "number",
"default": 5,
"maximum": 100,
"minimum": 0,
"description": "Vacancy allowance as a percent of gross rent"
},
"interestRatePct": {
"type": "number",
"default": 5.49,
"maximum": 25,
"minimum": 0,
"description": "Mortgage rate as a percent, e.g. 5.49"
},
"monthlyGrossRent": {
"type": "number",
"minimum": 0,
"description": "Total gross monthly rent across all units in CAD"
},
"amortizationYears": {
"type": "number",
"default": 25,
"maximum": 30,
"minimum": 1
},
"annualOperatingExpenses": {
"type": "number",
"minimum": 0,
"description": "Total annual operating expenses in CAD (property tax, insurance, management, maintenance, landlord utilities) — excludes mortgage payments"
}
}
}| annualIncome | number | Your other annual income in CAD — the gain stacks on top of this |
| sellingCosts | number | Realtor commission, legal fees, and other costs of selling |
| taxpayerType | string |
| capitalLosses | number | Prior/current capital losses available to offset the gain |
| lcgeRemaining | number | Remaining lifetime capital gains exemption room in CAD |
| purchasePrice* | number | Original purchase price in CAD |
| yearsDesignated | number | Years designated as your principal residence |
| ccaClaimedToDate | number | Rental only: total CCA claimed to date |
| capitalImprovements | number | Capital improvements added to the adjusted cost base |
| isPrincipalResidence | boolean | Real estate only: claim the principal residence exemption |
| originalBuildingCost | number | Rental only: original building cost for CCA recapture |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"salePrice",
"purchasePrice"
],
"properties": {
"isQSBC": {
"type": "boolean",
"default": false,
"description": "Business only: qualified small business corporation shares (LCGE)"
},
"taxYear": {
"type": "number",
"default": 2026,
"maximum": 2035,
"minimum": 2020,
"description": "Tax year of the disposition"
},
"province": {
"enum": [
"Ontario",
"British Columbia",
"Alberta",
"Quebec",
"Manitoba",
"Saskatchewan",
"Nova Scotia",
"New Brunswick",
"PEI",
"Newfoundland & Labrador",
"Northwest Territories",
"Nunavut",
"Yukon"
],
"type": "string",
"default": "Ontario",
"description": "Province/territory of residence"
},
"assetType": {
"enum": [
"real-estate",
"stocks",
"crypto",
"business",
"rental",
"other"
],
"type": "string",
"default": "real-estate"
},
"landValue": {
"type": "number",
"minimum": 0,
"description": "Rental only: land portion of the sale price (splits land vs building gain)"
},
"salePrice": {
"type": "number",
"minimum": 0,
"description": "Gross sale proceeds in CAD"
},
"yearsOwned": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Years the property was owned (principal-residence proration)"
},
"buyingCosts": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Land transfer tax, legal fees, and other costs of acquiring"
},
"annualIncome": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Your other annual income in CAD — the gain stacks on top of this"
},
"sellingCosts": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Realtor commission, legal fees, and other costs of selling"
},
"taxpayerType": {
"enum": [
"individual",
"corporation",
"trust"
],
"type": "string",
"default": "individual"
},
"capitalLosses": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Prior/current capital losses available to offset the gain"
},
"lcgeRemaining": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Remaining lifetime capital gains exemption room in CAD"
},
"purchasePrice": {
"type": "number",
"minimum": 0,
"description": "Original purchase price in CAD"
},
"yearsDesignated": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Years designated as your principal residence"
},
"ccaClaimedToDate": {
"type": "number",
"minimum": 0,
"description": "Rental only: total CCA claimed to date"
},
"capitalImprovements": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Capital improvements added to the adjusted cost base"
},
"isPrincipalResidence": {
"type": "boolean",
"default": false,
"description": "Real estate only: claim the principal residence exemption"
},
"originalBuildingCost": {
"type": "number",
"minimum": 0,
"description": "Rental only: original building cost for CCA recapture"
}
}
}| Gross annual household income in CAD |
| extraMonthlyPrincipal | number | Optional extra principal paid monthly on the HELOC |
| secondMortgageRatePct | number | Second mortgage rate as a percent; defaults to the tier's typical rate |
| secondMortgageTermYears | number |
| outstandingFirstMortgage* | number | Balance remaining on the first mortgage in CAD |
| secondMortgageAmortYears | number |
| secondMortgageLenderTier | string | A = bank/credit union, B = trust/MIC, Private = individual investor |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"homeValue",
"outstandingFirstMortgage",
"amountToBorrow",
"annualHouseholdIncome"
],
"properties": {
"province": {
"enum": [
"Ontario",
"British Columbia",
"Alberta",
"Quebec",
"Manitoba",
"Saskatchewan",
"Nova Scotia",
"New Brunswick",
"Newfoundland and Labrador",
"Prince Edward Island"
],
"type": "string",
"default": "Ontario"
},
"homeValue": {
"type": "number",
"description": "Current market value of the home in CAD",
"exclusiveMinimum": 0
},
"amountToBorrow": {
"type": "number",
"minimum": 0,
"description": "Amount you want to borrow in CAD"
},
"helocSpreadPct": {
"type": "number",
"maximum": 10,
"minimum": 0,
"description": "Lender spread over prime as a percent, e.g. 0.5"
},
"purposeOfFunds": {
"enum": [
"Home Renovation",
"Debt Consolidation",
"Investment Property Down Payment",
"Education",
"Emergency Funds",
"Other"
],
"type": "string",
"default": "Home Renovation"
},
"helocPrimeRatePct": {
"type": "number",
"maximum": 25,
"minimum": 0,
"description": "Prime rate as a percent; defaults to the site's current prime"
},
"existingMonthlyDebts": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Other monthly debt payments (car, cards, loans)"
},
"annualHouseholdIncome": {
"type": "number",
"minimum": 0,
"description": "Gross annual household income in CAD"
},
"extraMonthlyPrincipal": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Optional extra principal paid monthly on the HELOC"
},
"secondMortgageRatePct": {
"type": "number",
"maximum": 30,
"minimum": 0,
"description": "Second mortgage rate as a percent; defaults to the tier's typical rate"
},
"secondMortgageTermYears": {
"type": "number",
"default": 1,
"maximum": 10,
"minimum": 1
},
"outstandingFirstMortgage": {
"type": "number",
"minimum": 0,
"description": "Balance remaining on the first mortgage in CAD"
},
"secondMortgageAmortYears": {
"type": "number",
"default": 25,
"maximum": 30,
"minimum": 1
},
"secondMortgageLenderTier": {
"enum": [
"A",
"B",
"Private"
],
"type": "string",
"default": "A",
"description": "A = bank/credit union, B = trust/MIC, Private = individual investor"
}
}
}| closingCostsSell |
| number |
| Legal and staging costs on the sale, excluding commission |
| isFirstTimeBuyer | boolean | Eligible for the first-time buyer land transfer tax rebate |
| marginalTaxRatePct | number | Your combined marginal tax rate as a percent |
| holdingPeriodMonths | number | Months held from purchase to sale — under 12 triggers the CRA flipping rule |
| monthlyHoldingCosts | number | Monthly carrying costs: mortgage interest, property tax, insurance, utilities |
| realtorCommissionPct | number | Realtor commission on the sale as a percent of ARV |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"purchasePrice",
"afterRepairValue",
"renovationCost"
],
"properties": {
"city": {
"type": "string",
"default": "",
"description": "City name — include 'Toronto' to add the Toronto municipal land transfer tax"
},
"province": {
"enum": [
"Ontario",
"British Columbia",
"Alberta",
"Quebec",
"Manitoba",
"Saskatchewan",
"Nova Scotia",
"New Brunswick",
"PEI",
"Newfoundland"
],
"type": "string",
"default": "Ontario"
},
"purchasePrice": {
"type": "number",
"description": "Purchase price in CAD",
"exclusiveMinimum": 0
},
"contingencyPct": {
"type": "number",
"default": 15,
"maximum": 100,
"minimum": 0,
"description": "Renovation contingency as a percent of the renovation budget"
},
"renovationCost": {
"type": "number",
"minimum": 0,
"description": "Budgeted renovation cost in CAD, before contingency"
},
"closingCostsBuy": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Legal and inspection costs on the purchase, excluding land transfer tax"
},
"afterRepairValue": {
"type": "number",
"description": "Expected resale price after renovation (ARV) in CAD",
"exclusiveMinimum": 0
},
"closingCostsSell": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Legal and staging costs on the sale, excluding commission"
},
"isFirstTimeBuyer": {
"type": "boolean",
"default": false,
"description": "Eligible for the first-time buyer land transfer tax rebate"
},
"marginalTaxRatePct": {
"type": "number",
"default": 43.41,
"maximum": 60,
"minimum": 0,
"description": "Your combined marginal tax rate as a percent"
},
"holdingPeriodMonths": {
"type": "number",
"default": 6,
"maximum": 120,
"minimum": 0,
"description": "Months held from purchase to sale — under 12 triggers the CRA flipping rule"
},
"monthlyHoldingCosts": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Monthly carrying costs: mortgage interest, property tax, insurance, utilities"
},
"realtorCommissionPct": {
"type": "number",
"default": 5,
"maximum": 15,
"minimum": 0,
"description": "Realtor commission on the sale as a percent of ARV"
}
}
}| interestRatePct | number | Contract mortgage rate as a percent, e.g. 4.79 |
| amortizationYears | any |
| annualPropertyTax | number | Estimated annual property tax in CAD |
| coApplicantIncome | number | Co-applicant gross annual income in CAD (0 = none) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"annualIncome",
"downPayment"
],
"properties": {
"province": {
"type": "string",
"default": "Ontario"
},
"condoFees": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Monthly condo fees — 50% counts toward GDS/TDS for condos"
},
"downPayment": {
"type": "number",
"minimum": 0,
"description": "Down payment — dollars, or a percent if downPaymentMode='percent'"
},
"annualIncome": {
"type": "number",
"minimum": 0,
"description": "Primary applicant gross annual income in CAD"
},
"monthlyDebts": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Other monthly debt payments (car, cards, student loans)"
},
"propertyType": {
"enum": [
"single-family",
"condo",
"townhouse"
],
"type": "string",
"default": "single-family"
},
"monthlyHeating": {
"type": "number",
"default": 175,
"minimum": 0,
"description": "Estimated monthly heating cost in CAD"
},
"downPaymentMode": {
"enum": [
"dollar",
"percent"
],
"type": "string",
"default": "dollar"
},
"interestRatePct": {
"type": "number",
"default": 5.23,
"maximum": 25,
"minimum": 0,
"description": "Contract mortgage rate as a percent, e.g. 4.79"
},
"amortizationYears": {
"anyOf": [
{
"type": "number",
"const": 25
},
{
"type": "number",
"const": 30
}
],
"default": 25
},
"annualPropertyTax": {
"type": "number",
"default": 4800,
"minimum": 0,
"description": "Estimated annual property tax in CAD"
},
"coApplicantIncome": {
"type": "number",
"default": 0,
"minimum": 0,
"description": "Co-applicant gross annual income in CAD (0 = none)"
}
}
}| string |
| paymentFrequency | string |
| amortizationYears | number | Amortization in years (max 25 insured, 30 uninsured/first-time new builds) |
| annualInterestRatePct* | number | Annual interest rate as a percent, e.g. 5.25 |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"annualInterestRatePct"
],
"properties": {
"province": {
"type": "string",
"description": "Province name, used only for CMHC PST on the premium"
},
"rateType": {
"enum": [
"fixed",
"variable"
],
"type": "string",
"default": "fixed"
},
"homePrice": {
"type": "number",
"description": "Purchase price in CAD, e.g. 650000. Use with downPayment. Omit if the user gave you the mortgage amount instead.",
"exclusiveMinimum": 0
},
"termYears": {
"type": "number",
"default": 5,
"maximum": 10,
"minimum": 1
},
"loanAmount": {
"type": "number",
"description": "The mortgage amount itself in CAD, when the user stated the loan rather than the purchase price. Mutually exclusive with homePrice. No CMHC premium is applied on this path — the amount is taken as the principal.",
"exclusiveMinimum": 0
},
"downPayment": {
"type": "number",
"minimum": 0,
"description": "Down payment amount in CAD (or percent if downPaymentType='percent'). Required when homePrice is used."
},
"downPaymentType": {
"enum": [
"amount",
"percent"
],
"type": "string",
"default": "amount"
},
"paymentFrequency": {
"enum": [
"monthly",
"semi-monthly",
"biweekly",
"accelerated-biweekly",
"weekly",
"accelerated-weekly"
],
"type": "string",
"default": "monthly"
},
"amortizationYears": {
"type": "number",
"default": 25,
"maximum": 30,
"minimum": 1,
"description": "Amortization in years (max 25 insured, 30 uninsured/first-time new builds)"
},
"annualInterestRatePct": {
"type": "number",
"maximum": 25,
"minimum": 0,
"description": "Annual interest rate as a percent, e.g. 5.25"
}
}
}| todaysPostedForClosestTermPct | number | Big-bank method: your lender's posted rate today for the closest term. Omit if unknown and the reply will say it was assumed. |
| currentRateForRemainingTermPct | number | Monoline method: today's rate for the remaining term (percent). Lender-specific — omit if unknown and the reply will say it was assumed. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"balance",
"contractRatePct",
"monthsRemaining"
],
"properties": {
"balance": {
"type": "number",
"description": "Outstanding mortgage balance in CAD",
"exclusiveMinimum": 0
},
"rateType": {
"enum": [
"fixed",
"variable"
],
"type": "string",
"default": "fixed"
},
"lenderMethod": {
"enum": [
"big-bank",
"monoline"
],
"type": "string",
"default": "big-bank",
"description": "Big banks use the posted-rate IRD, monolines use actual rates. Which is larger depends on the gap between the discount originally received and today's posted rate — it is NOT always the big bank."
},
"contractRatePct": {
"type": "number",
"maximum": 25,
"minimum": 0,
"description": "Your contract rate as a percent, e.g. 5.25"
},
"monthsRemaining": {
"type": "number",
"maximum": 120,
"minimum": 0,
"description": "Months remaining in the term"
},
"postedAtOriginationPct": {
"type": "number",
"maximum": 25,
"minimum": 0,
"description": "Big-bank method: posted (not discounted) rate when you signed, from your mortgage documents. HIGH IMPACT — this single value can change the penalty several-fold. Omit if unknown and the reply will say it was assumed."
},
"todaysPostedForClosestTermPct": {
"type": "number",
"maximum": 25,
"minimum": 0,
"description": "Big-bank method: your lender's posted rate today for the closest term. Omit if unknown and the reply will say it was assumed."
},
"currentRateForRemainingTermPct": {
"type": "number",
"maximum": 25,
"minimum": 0,
"description": "Monoline method: today's rate for the remaining term (percent). Lender-specific — omit if unknown and the reply will say it was assumed."
}
}
}