Ontario Real Estate Tools
LTT/MLTT, Seller Net, Offer Compare, Affordability

API Documentation

Integrate the LTT calculator into your applications

Quick Start

Embed the calculator widget on your website with a single script tag.

HTML Embed

<div data-ltt-widget 
     data-location="TORONTO" 
     data-res-type="SINGLE_FAMILY" 
     data-theme="auto">
</div>
<script src="https://cdn.yourdomain.dev/widget/ltt.min.js" async></script>

Available Attributes

  • data-location: "TORONTO" or "ON"
  • data-res-type: "SINGLE_FAMILY" or "OTHER"
  • data-theme: "auto", "light", or "dark"
  • data-accent: CSS color value (e.g., "#3B82F6")
  • data-ltt-widget: Place on any element to auto-mount the widget

Use the Widget Snippet Generator to configure options, preview, and copy a ready-made embed.

API Reference

Endpoint

POST /api/v1/calculate

Authentication

Include your API key in the Authorization header:

Authorization: Bearer sk_test_...

Request Body

{
  "price": 50000000,           // Integer cents (e.g., 50000000 = $500,000)
  "closingDate": "2025-01-01", // ISO date string
  "location": "TORONTO",       // "TORONTO" or "ON"
  "resType": "SINGLE_FAMILY",  // "SINGLE_FAMILY" or "OTHER"
  "isFirstTimeBuyer": true,    // Boolean
  "applyNRST": false,          // Optional: Boolean
  "applyMNRST": false          // Optional: Boolean
}

Response

{
  "ontarioLTT": 647500,        // Integer cents
  "torontoMLTT": 647500,       // Integer cents
  "provincialRebate": 400000,  // Integer cents
  "municipalRebate": 447500,   // Integer cents
  "totalLTT": 447500,          // Integer cents
  "nrst": 0,                   // Integer cents
  "mnrst": 0,                  // Integer cents
  "grandTotal": 447500,        // Integer cents
  "effectiveRates": [...],     // Array of rate breakdowns
  "breakdown": [...],           // Array of line items
  "notes": [...],              // Array of strings
  "sources": [...]             // Array of URLs
}

cURL Example

curl -X POST https://api.yourdomain.dev/v1/calculate \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "price": 50000000,
    "location": "TORONTO",
    "resType": "SINGLE_FAMILY",
    "isFirstTimeBuyer": true,
    "applyNRST": false,
    "applyMNRST": false
  }'

JavaScript Example

const response = await fetch('https://api.yourdomain.dev/v1/calculate', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk_test_...',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    price: 50000000,
    location: 'TORONTO',
    resType: 'SINGLE_FAMILY',
    isFirstTimeBuyer: true,
    applyNRST: false,
    applyMNRST: false,
  }),
});

const result = await response.json();
console.log('Total LTT:', result.totalLTT / 100);

PDF Export

Cash-to-Close

POST /api/export/pdf

Body includes calculator inputs plus closing cost options (down payment, CMHC, city preset):

{
  "input": { "price": 80000000, "location": "TORONTO", ... },
  "downPayment": 16000000,
  "showCMHC": false,
  "applyCMHCPST": true,
  "cityPreset": "TORONTO",
  "includeStatusCertificate": false
}

Seller Net Sheet

POST /api/export/seller-pdf
{
  "salePrice": 75000000,
  "commissionRate": 0.05,
  "legalFee": 150000,
  "dischargeFee": 100000,
  "mortgagePayout": 40000000,
  "adjustments": 0
}

Offer Compare

POST /api/export/compare-pdf

Body contains a and b scenarios, each matching the calculator inputs.

All endpoints return application/pdf with a suggested filename.

CSV & Shareable Links

  • Copy CSV is available on Cash-to-Close, Offer Compare, and Seller Net pages.
  • Shareable links are supported for the main calculator and Offer Compare (compact base64 params).

Rate Limits

Free Tier

  • • 60 requests per minute
  • • Basic widget with attribution
  • • Standard support

Pro Tier ($29/month)

  • • 5,000 requests per month
  • • 60 requests per minute
  • • Widget without attribution
  • • Priority support

Test Vectors

Use these test cases to validate your integration:

PriceLocationTypeFTBTotal LTT
$368,000TorontoSingleYes$0.00
$400,000TorontoSingleYes$475.00
$500,000TorontoSingleYes$4,475.00
$1,100,000TorontoSingleNo$36,950.00

Error Codes

HTTP Status Codes

  • 200 - Success
  • 400 - Invalid input parameters
  • 401 - Invalid or missing API key
  • 429 - Rate limit exceeded
  • 500 - Internal server error

Error Response Format

{
  "error": {
    "code": "INVALID_INPUT",
    "message": "Price must be a positive integer",
    "details": [...]
  }
}